在目前这套项目架构诞生初期,基于当时的游戏类型和项目需求,架构做得相对简单,设计上尽可能通过goroutine而不是节点来并发,节点间用ETCD做服务发现,用gRPC做节点通信,在单向依赖,弱藕合的情况下,基本能够满足需求。对于个别强耦合的节点交互,使用gRPC Stream来建立双工连接。
随着游戏类型和业务需求的变更,跨服功能增多,节点划分越来越细,藕合越来越重,网络拓扑也越来越复杂。gRPC Stream不再能很好地胜任。
因此我们考虑用一套新的节点交互方案,大概有两个思路:
- 写一套完备的TCP网络库(包含服务发现,自动重连,编解码,心跳,流控等),用于统一节点间甚至Gateway与Client间的网络交互
- 使用MQ解耦集群内节点交互,将网状网络化为星形网络,简化网络拓扑