angularjs - Node.js 的共识算法

标签 angularjs node.js consensus paxos raft

我正在尝试实现一个协作 Canvas ,许多人可以在其中徒手绘制或使用特定的形状工具进行绘制。 服务器是用 Node.js 开发的,客户端是用 Angular1-js 开发的(我对它们都很陌生)。 我必须使用共识算法,以便始终向所有用户显示相同的内容。

我遇到了严重的麻烦,因为我找不到正确的使用教程。我一直在寻找和研究 Paxos 实现,但似乎 Raft 在实际中使用得非常多。

有什么建议吗?我真的很感激。

最佳答案

编写分布式系统并不是一项容易的任务[1],因此我建议使用一些现有的强一致性系统,而不是从头开始实现。通常的嫌疑人是 zookeeper , consul , etcd , atomix/copycat 。其中一些提供 Nodejs 客户端:

我个人从未将它们与nodejs一起使用过,所以我不会评论客户端的成熟度。

如果你坚持自己实现共识,那么 raft 应该更容易理解——这篇论文出人意料地容易理解 https://raft.github.io/raft.pdf 。他们也有一些 Nodejs 实现,但同样,我没有使用过它们,所以很难推荐任何特定的实现。 Gaggle readme包含一个示例和 skiff has an integration test其中记录了其用法。

退一步来说,我不确定分布式共识是否是您所需要的。看起来你有多个客户端和一个服务器。您也许可以使用集中式数据存储。问题域并不是真正的分布式 - 当服务器根据 FIFO 接收到形状时,形状可以一个一个地叠加在另一个之上(想象一下多个人在同一个白板上书写,最后一个获胜)。挑战在于对现有形状的并发修改,也许您可​​以回退到最后/第一个更改获胜或类似的情况。

这里探索的另一个有趣的途径是 Conflict-free Replicated Data Types — CRDT 。 github 上的人们使用它们在 Atom 中实现协作“结对”编程。请参阅the atom teletype blog post ,还有their implementation也许有用,因为协作编辑似乎正是您试图解决的问题。

希望这有帮助。

[1]看看jepsen系列https://jepsen.io/analyses其中 Kyle Kingsbury 测试了分布式数据存储的各种故障条件。

关于angularjs - Node.js 的共识算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47571033/

相关文章:

javascript - Angular 支付返回带有测试数据的无效卡

algorithm - Lamport 的 Paxos 中的矛盾使简单的论文

javascript - 如何在 ng-Table 中隐藏页面切片?

node.js - AngularJS + ExpressJS。代理 POST 请求待处理

node.js - end() 不是 Node Mocha 测试中的函数

javascript - Puppeteer使用JS路径选择器通过DOM输入登录文本的问题

algorithm - 如果有多个领导者,Raft 算法如何保证共识?

networking - configtx.yaml 中的每个定义在 Hyperledger fabric v1.0 中意味着什么?

javascript - fonts/ionicons.ttf?v=2.0.0 404(未找到)-CSS-Angular-localhost

javascript - Angular 1.x ES6 服务 $http 未定义