利用 Akka 集群实现成功的横向扩展
1. 分布式系统构建的前期考虑
在构建分布式系统时,Akka 能让部署决策更多地成为一个配置项而非代码层面的问题。拥有多个代码库可以极大地便利大型团队在代码库上的协作,它通过消除通信渠道以及将代码提交隔离到不同的仓库,避免了布鲁克斯法则所描述的问题(给已经延迟的项目增加更多资源会导致项目更晚完成)。
在系统复杂到难以以单体架构管理之前,或者至少在有充分的数据支持(与性能或团队工作量相关)采用分布式部署方式之前,建议先推迟构建分布式系统的考虑。
无论一开始决定构建单体应用还是服务,从第一天起就可以将不同的关注点封装到库中。这样在准备实际部署单独的应用之前,团队就能从在不同代码库上工作中受益。如果从一开始就这么做,当需要拆分应用时,管理代码共享会容易得多。
2. 集群的定义与职责
集群是一组相互通信的服务器,集群中的每个服务器被称为节点或成员。集群应能够动态改变规模,并在发生故障时将影响降至最低,因此集群需要处理两项职责:故障检测和在整个集群中传播所有可用成员的一致视图。
2.1 故障检测
随着节点数量的增加,节点故障或网络临时分区的可能性也会增大。集群是一个动态实体,当服务器关闭或不可用时会缩小,当添加服务器(例如处理更多负载)时会扩大。集群中的节点通过向其他成员发送消息来确定这些成员是否可用,并根据回复或无回复来判断成员的可用性。
为了降低监控其他节点健康状况的复杂性,Akka 中的故障检测仅监控节点旁边的一定数量的节点。例如,在一个由六个节点组成的集群环中,每个节点可能监控其后的两个节点是否发生故障。Akka 集群中每个节点默认监控
超级会员免费看
订阅专栏 解锁全文
47

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



