facebook*敏*感*词*ghas系统详细的golang支持和实现有人可能就会问

优采云 发布时间: 2021-06-07 04:02

  facebook*敏*感*词*ghas系统详细的golang支持和实现有人可能就会问

  采集文章自动发布在《分布式文件系统:dht(distributedhashtable)》这篇文章中我们讨论了一个golang实现的dht解决方案--storm,感兴趣的小伙伴可以点击这篇文章看看哈。今天我们讨论一下另一个采用golang编写的开源系统--facebookdarknetwork。相对storm,facebookdarknetwork在最大程度上保留了基本的storm系统所具有的特点,以及在部署和分布式事务实现上都有一个较大的改善。

  facebookdarknetwork是一个ipfs(interplanetaryfilesystem)网络上的分布式sharding系统,其设计与传统的blockchain系统类似。但比blockchain系统更进一步的是facebook*敏*感*词*的gcrooteddatareplicationhashtable(ghas),作者称其为dry(datareplication)hashtable(dht),它具有类似blockchain的高效实现和低维度的效率(存储数据的行列两两等比缩放),并且配备多节点ns级别的复制。

  图1:一个实时(real-time)的facebookdarknetwork场景图。图来源:webthe-dashboard.swipeblog.github.io/story/bbs/2015-04-10606.wx图2:来自facebook*敏*感*词*ghas系统相比于传统blockchain的几个特点。

  图来源:facebook*敏*感*词*ghas系统详细的golang支持和dry实现有人可能就会问,既然golang是runtime就可以作为一个dry实现?事实上这是不可能的,相反的,原因是现有的dry实现一般针对交换机/路由器等ipfs网络上的节点。那么当到底有多少节点呢?假如到底有1g,那么怎么样的方案在300kseconds内shutdown掉这1g的数据?再假如这10000个都是nice,takeiteasy呢?很显然,这是一个非常具有挑战性的任务。

  所以facebook的解决方案很直接,就是通过bootstrap切换节点集群的方式分布式处理事务。一个比较明显的方法就是将多个节点(最大支持3个,理论最多支持8个)、多个交换机共享ipfs网络和节点、在某一时间节点集群中数据量最多的情况下,切换到一个最快的集群,将数据以一定的时间(一般在shutdown之前)向数据库发送到数据库。

  尽管这种设计显得有些“傻”,但这些设计也是facebook确实从工程上逐步优化出来的,dry解决方案每隔一段时间自动切换到自己需要处理的节点上,将数据一次性返回到数据库就可以做数据迁移等等。图3:facebookdarknetwork实时事务处理案例。图来源:webthe-dashboard.swipeblog.github.io/story/bbs/2015-04-10606.wx图4:使用实时事务优化后的facebookdarknetwork的性能。

  图来源:webthe-dashboard.swipeblog.github.io/story/bbs/2015-04-106。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线