早之前听说过微服务相关的概念,但之前没结合实际的项目去使用和总结,正好项目中使用到,这段时间也陆陆续续的学习。
在游戏中,有些功能比较独立的可以解耦出来,单独作为一个服务,比如排行榜服务,这里只存储角色id和要排序的字段,其他附加字段一般不会放在微服务,不然会造成频繁更细粒度的数据同步(由策划需求决定)。还有像好友/聊天功能,邮件等都是可以这么做的。但是否过细的拆分各功能由微服务来做,也是要考虑的。
不过这些设计还是很大可能视游戏类型,不分区分服,通过合理的设计架构,可承载百万级的PCU;不过在设计微服务时,是否要过多考虑业务侧呢?如果加业务功能则舍弃部分能用性;一般通用性的框架,是不会过多考虑业务侧的具体细节,由策划和开发人员基于需求来扩展。
一般微服务需要考虑网关的接入,数据冗余和高可用,通过横向扩展堆机器即可达到高QPS;接入微服务,那么请求是由客户端直接到微服务,还是需要由客户端先到游戏服,然后可能组装请求转发到微服务,再对结果进行处理,响应给客户端?这里还是有很多细节考虑的。
这样经过一些合理的拆分,真正的游戏服可能只处理核心的业务,比如移动/同步/战斗,玩法相关等,还是要看游戏类型;不过很多的需求,都是可以简化设计。