集群管理
集群能力
在高并发场景中,应用系统的处理能力通常是个严峻的挑战。
在提高系统的并发处理能力上,Phoenix 框架使用聚合根对象作为调度单位进行线程调度,以提升单节点部署的情况下线程资源的利用效率。此外,借助 Akka-Cluster 和 Akka-Cluster-Sharding 的能力实现横向扩展,通过部署多个服务节点组成集群,聚合根对象可以在集群节点之间灵活调度,使得系统可以通过增加节点的方式提升处理能力。
Phoenix 框架提供应用系统的伸缩性。与横向扩展相似,Phoenix 服务集群可以动态缩减节点数量。Akka-Cluster 和 Akka-Cluster-Sharding 可以对聚合根对象进行集群调度和管理,在集群减少服务节点数量时,Akka可以将这些节点中的聚合根对象转移到剩余节点中。在进行节点移除的过程中,配合 EventSourcing 的能力,被移除节点中的聚合根可以在剩余节点中重新构建并恢复状态。
集群配置
Phoenix 支持在多种环境中运行。 下面分别介绍下 Phoenix 服务在集群时 Akka 的配置项需要如何进行配置。
Config | Kubernetes-API | Kubernetes-DNS | Consul | Nacos | Eureka | |
---|---|---|---|---|---|---|
动态种子节点 | 不支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
必要条件 | 需要配置种子节点 | 需要运行服务的 POD 能够访问 Kubernetes-API | 需要定义 Headless service 并且 Kubernetes 支持 publishNotReadyAddresses | 外部服务 Consul | 外部服务 Nacos | 外部服务 Eureka |
运行环境 | 无显式要求 | Kubernetes | Kubernetes | 无显式要求 | 无显式要求 | 无显式要求 |
优势 | 配置简单, 仅靠程序就可以运行 | 交由 Kubernetes API Server 管理 | 使用 DNS 作为服务发现, 无需 POD 权限 | 无运行环境限制, 支持配置中心,强一致性 | 无运行环境限制, 支持配置中心,同时支持 AP,CP | 无运行环境限制, 高可用注册中心 |
劣势 | 静态配置,容错能力差 | 需要 Kubernetes 环境和 POD 权限 | 需要 Kubernetes 环境,依赖于 DNS 解析,性能不好 | 强一致导致服务不可用,手动注销实例 | 需要客户端维护服务状态 | |
分区功能 | 不支持 | 不支持 | 不支持 | 不支持 | 支持 | 支持 |