facebook*敏*感*词*ghas系统详细的golang支持和实现有人可能就会问
优采云 发布时间: 2021-06-07 04:02facebook*敏*感*词*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。