主从服务
游戏服务架构中,通常会有些单点的控制服、路由服等
这些单点服务故障,会导致整个系统无法正常运作
通常会对这些服务,实施主从部署,达成高可用
本文介绍一种通用的主从实现方式
服务类型
通常,根据服务对数据的处理方式,可以归为 2 类:
- 无状态服务
- 有状态服务
对于无状态服务,保证失效服务能及时重启即可
因此文本主要针对有状态服务,如何实现通用的主从方案
有状态服实现主从面临的问题
从零开始实现主从的话,涉及很多挑战:
- 选主问题
- 主从服状态一致问题
由于节点故障、网络分区等已是常态
以上 2 个问题,要完美的解决,达到生产环境中的规格是有难度的
面对这种经典的问题,已经有不少产品提供了解决方案
其中, Raft 协议,提供了通俗易懂的实现方案
Etcd Raft 模块
Etcd 实现高可用以及高可靠,就是通过 Raft 来保证的
且其模块可以直接拿来使用
https://github.com/etcd-io/etcd/tree/main/contrib/raftexample 是基于 Etcd Raft 模块实现的 KV 服务的例子
可以基于这个例子稍微封装下,即可实现通用的主从服框架