最近参加了一个大服务器架构讨论活动, 记录下心得
游戏客户端采用Cocos2dx-Lua的纯Lua编写逻辑, 服务器采用Golang作为开发语言
游戏类型类似于COC,因此无需选服. 需要使用大服务器架构进行处理
采用Mongodb做持久存储, redis做跨服通信数据交换
使用UCloud的云技术, 省去了烦人的运维工作
客户端和服务器通讯使用HTTP短连接, 基于json的数据封包协议
服务器间大量使用Golang自带的json+rpc进行通信
服务器类型大致分为逻辑服务器,战斗服务器, 中心服务器
逻辑服务器负责日常逻辑及公共逻辑处理(好友, 公会)
1个逻辑服务器对应一个区, n个区均使用Ucloud云Mongodb进行数据存储
战斗服务器是一个集群, 集群会返回一个负载最低的服务器返回使用
战斗服务器通过cgo技术与客户端C++/lua的战斗逻辑进行逻辑复用, 在此技术上进行
战斗逻辑的校验
客户端登陆前, 在中心服务器这里获得可登陆的逻辑服务器地址, 同时做一个负载均衡
短连接
由于操作系统的技术趋于稳定, 同时, 手游的弱交互型导致的游戏架构趋于简单. 因此网络负载不再是游戏服务器技术的瓶颈. 从经验看来, 游戏服务器技术, 更重要的是还是看数据库的选型及处理方式.
虽然Mongodb的性能上不如内存数据库. 但是从存储安全性上要比个人搭建的内存数据库简单, 安全
外加上云技术的引用, 性能的瓶颈和运维的技术复杂度迎刃而解
Redis用于跨服数据交互那是再好不过的数据中介了, 保证速度和稳定性, 绝对不是造轮子能比拟的
短连接在手游上处理起来比长连接简单一些, 无需做断线重连. 服务器的底层也是由Golang的框架库保证质量的. 因此负载毫无问题. 服务器对内及对外均使用json进行数据交换, 简化了协议处理. 也方便了调试
json rpc的性能损耗对于整个逻辑的处理来说均可以忽略不计