发现想抽时间写博客实在是太难了,不过我觉得今天这一篇还是很值得写一下的。
熟悉我的同学应该都知道,我之前做了一款《矩阵危机》的产品,使用的是帧同步的技术。
简单画一下V1架构图:
Gateway
网关服务器。
负责客户端连接的接入,使用协议TCP。
使用C++编写。
KcpProxy
Kcp协议的代理服务器。
客户端默认使用Kcp连接服务器,如果失败会自动回退到Tcp。
使用C++编写。
RoomServer
房间服务器。运行战斗逻辑,每个房间同时仅能运行一场战斗,帧率为15帧/秒。
房间服务器与Gateway间通过Tcp连接,每个房间建立一个一条独立的连接。
使用Python编写。
整个架构还是比较清晰的,但是里面有个极大的问题:性能
因为python的性能实在是太差了,对于RoomServer每秒15帧这种cpu密集型的业务场景完全不适合。
至于python的性能有多差,我当时做过一个简单的测试,同样的业务代码,c++是python性能的10倍左右。
可能直接说这个数字大家也没什么感觉,但是要知道换算成服务器的话,那就是10倍的服务器量,10倍的成本。
所以这也是要做架构升级的原因。
而升级的方案也有多种,其中一个方案如下:
其核心逻辑是将CPU密集的RoomServer放到Gateway中去,而额外多出来一组RoomController负责对Gateway和Room进行控制。
RoomController可以继续使用python实现。
这样的方案虽然解决了性能问题,但是却导致gateway的功能过于耦合,不是好的设计方案。
还有一个方案就是将RoomServer直接使用C++重写,每个Room开一个线程 ...