最近参加了一个大服务器架构讨论活动, 记录下心得
概述
游戏客户端采用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的性能损耗对于整个逻辑的处理来说均可以忽略不计