服务器灰度更新
灰度更新的思想是,
例如:
在服务器组A,B,C 情况下 全部引流到A 等到玩家引流的差不多之后(这个过程短则几分钟长则几小时)在对服务器组BC进行更新(重启等操作),完成后再把玩家引流到BC,组A玩家迁徙完成后在进行组A的更新(重启的等操作)组A完成后再起来,至此整个更新流程完成。
这个过程有一些注意事项:
1.新进的客户端会触发客户端更新流程 因此新进的玩家是新版本的,对于新旧版本玩家还在旧的服务器,如果服务器内部没做版本兼容的话,那么就需要阻止不兼容的新旧版本的玩家之间的交互了。
2.服务器内部的负载均衡算法能够具备屏蔽灰度区的服务器的功能,这样是为了避免服务器新进入的客户端连接到了旧版本的服务器。一般来说多级星形结构天然具备这种优势。新登录的玩家直接分配到新版本的服务器,旧服务器的玩家等自然下线即可。
3.这个过程最好自动化处理,因为这个过程周期长,操作过程中对错误容忍度低。
对于玩家交互的解决方案:
1.刺激战场的做法是直接屏蔽交互功能,比如组队邀请老版本的玩家直接提示版本过低无法邀请。
2.服务器内部相互做兼容,这条实现难度非常大,可以不用考虑了。
3.变相于方案1,改为被接收方(低版本)忽略邀请请求,一般这种都是服务器同时客户端,可以改用不同的消息名字来让低版本客户端忽略消息。
4. 1和3是忽略处理 如果带有交互的话 比如弹窗告知原因那么就要考虑这种做法了,客户端登录时带上版本号 ,对于不同版本的特定需要屏蔽的RPC都单独进行拦截处理,这种的话方便简单就能处理这个关系了,这一切可以通过配表来处理。
TODO