分布式系统的实现、测试与优化
1. 哈希与数据库复制
在分布式系统中,若使用某种一致性哈希(consistent hashing),可以大大减少需要迁移的数据量。一致性哈希是一种更智能的键到节点的映射方式,对集群变化具有更强的适应性。不过,其实现可能会变得复杂,因此可以先采用简单的全局注册方法,虽然它的可扩展性不是特别强,但却是一个可行的简单解决方案。若需要更好的性能和可扩展性,则需采用更复杂的方法,也可以考虑使用第三方解决方案,如 Syn(https://github.com/ostinelli/syn)或 Swarm(https://github.com/bitwalker/swarm)。
1.1 实现复制数据库
在对系统进行一些更改后,会出现以下行为:
1. 当首次请求 Bob 的待办事项列表时,会在处理该请求的节点上创建一个待办事项列表。
2. 所有后续对 Bob 待办事项列表的请求都会转发到步骤 1 中创建的进程。
3. 如果步骤 1 中创建列表的节点(或进程)崩溃,对 Bob 列表的新请求将导致新的待办事项服务器被注册。
乍一看,系统似乎分布正常,但存在一个重要问题:数据库在节点崩溃后无法保存数据。例如,在节点 A 上对 Bob 的列表进行了多次更新,若节点 A 崩溃,其他节点(如节点 B)将接管工作,但之前存储的数据不会在该节点上,从而导致所有更改丢失。
为了解决这个问题,需要对数据库进行复制,最简单的方法是在整个集群中复制数据。当向数据库存储数据时,将更改传播到集群中的所有节点。可以借助 :rpc 模块的服务来实现,具体更改如下:
1. 将现有的 D
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



