开发HA群集应用程序

时间:2019-01-21 22:05:14

标签: architecture replication master-slave resiliency leader-election

我正在尝试为物联网设备设计一个软件工具,该工具基本上应该执行分布式事务。它将有一个主服务器,部署在云基础架构上,由于专门安装了代理软件,该主服务器可以连接到设备。尽管代理(和其他相关工具)的结构和功能非常简单,但是我发现代理对某些要求充满挑战

  • 使用复制必须高度可用
  • 它必须跟踪分布式事务的部分状态,因此,如果主节点发生故障,则故障转移节点可以在其中断的位置继续工作并完成工作
  • 最终,所有设备必须处于相同状态。交易并非绝对是原子的,但主服务器必须能够在每时每刻重试以更新发生故障的设备
  • 主服务器通过http / ws端点公开API

Mastr reference architecture

我假设使用以下组件是可行的解决方案:

API服务器负责客户端身份验证,水平功能和api公开。负载平衡器后面的每个实例都与一个知名的Job executor(JE)种子连接,接收JE副本列表,并要求一个领导者,该领导者将由大多数答案投票。

领导者Job Executor收到交易请求,并将广播命令应用于所有设备,然后开始收集响应。它为每个发送错误响应或根本没有响应的设备重试(显然,它应该知道设备何时物理连接到ping / pong机制)。领导者将失败设备的列表发送到所有其他节点,这样,如果失败,则将选举新的领导者,并且可以继续尝试在先前发生故障的设备上执行命令

我真的需要这个吗?还是我可以简单地假设所有副本都可以共享数据库中的全局状态?在这种情况下,我仍然需要被动节点还是可以进行主动复制?既然这似乎是一个非常普遍的问题,您能建议我一个框架/工具(例如Zookeeper吗?)来实现我的目标?

预先感谢

0 个答案:

没有答案