对于服务器的动态扩容,可以专门引入一种服务器类型(CenterServer)来负责这件事。
工作机制
所有服务器进程启动并完成初始化后,首先主动连接 Center。Center 根据服务器连接规则,将新服务器的上线信息广播给所有当前已连接的服务器。新起来的服务器始终处于被动接受连接请求的角色。
这样,Center 服务器只承担扩容通知和少量全局进程控制等简单职责,自身压力自然极小。
容灾与扩容
Center 本身的容灾方面:Center 宕机对整个系统的影响几乎可以忽略——重启后,所有进程会自动重新连接,系统恢复正常。
Center 本身的扩容方面:考虑到潜在的压力问题,可以采用集群方式来扩展 Center 自身的容量。具体方案如下:
- Center 节点之间采用全互联拓扑。
- 其他服务器进程只需连接任意一个 Center 节点即可。
- Center 集群内部相互广播消息,单个 Center 节点所承受的压力因此大幅降低。
当集群规模增大、压力上升时,集群内部交互开销在单个 Center 进程总开销中的占比会越来越高。此时可以考虑引入 gossip 算法进行优化。每个 Center 节点的功能完全相同,唯一额外的处理是将自己收到的其他进程上线消息转发广播给其他 Center 节点。
与原方案的对比
此方案用于替代原先基于 redis-cluster pub-sub 的扩容设计。