1 单点服务
Last updated
Last updated
单点服务是一种比较简单的服务模型,所有服务功能在一个服务程序上实现,所有请求服务的客户端,都连接到这一台服务上,和服务直接通信。
我们之前实现的聊天服务程序就是一个单点服务。
由于不需要考虑和其他服务进行交互,所有功能都在一个服务里实现,这种设计是最容易实现的,也是服务开发最原始的形态。
在用户较少的情况下,这个设计可以满足业务需求,从业务的复杂度来看,4核CPU,4G内存的服务器(简称4C4G),大概可以支撑1w用户。
对于一个新上的业务来看,1W同时在线的承载能力足够了。
即便对于大公司而言,一个新业务能否活下来,也是一个未知数。如果没有推广资源的倾斜,人数很难快速增长,因此单点服务在大多数情况下都足够了。
那如果新业务成了爆款,人数突然上升怎么办?
有两个方式
4C4G的服务承载,达到了用户上限,提升服务配置,可以增加服务用户上限。
服务程序的承载瓶颈通常是内存、CPU和网络带宽,哪方面陷入瓶颈,提升哪方面即可,如果不差钱的话,可以全方位提升。
单台服务提升配置,操作虽然简单,但也会有以下几个问题。
1、配置越来越高,成本可能急剧攀升。
2、一旦服务宕机(异常退出),会影响所有的用户。
3、如果需要更新服务,需要发出维护通知,所有用户在维护期间都不能连到服务器。
为了避免以上问题,另外一条路线是分区扩展。
我们在玩一些网游的时候,经常会遇到选择分区的提示,有的分区人数已满,有的分区显示拥挤,新区通常有火爆标识。
这里每一个分区都可以认为是一组同样的服务,不同分区之间,游戏数据是不相通的,在1区中建立的角色,无法带入带2区进行游戏。
当然,游戏服务采用分区的方式,还考虑到游戏的平衡性,后进入的玩家如果和老玩家等级差距过大,会失去很多游戏性,在新服里大家都从零开始,争全服排名的积极性更高,更容易刺激消费。
另外,有些游戏数值设计、关卡设计只能支撑2到3个月的游戏时长,玩家在老服务中都玩遍了,也会逐步流失。不断开启新区的方式,可以不断的吸引新用户来游戏,这个俗称滚服。
我们的聊天服务也可以采用这样的方式。通过分区,缓解用户上限的问题。
用户被分散到不同的分区后,每台服务的压力自然减轻,也就能够承载更多的用户总数。
对于聊天室服务还好,聊天室本身就有一个房间号,分区其实作为另一个维度的地址标识,大家约定好到哪个区,哪个id的聊天室房间聚会,也说的过去。
不过这终归会带来一些不便,进错分区,再输入聊天室的房号,是可能进错房间的。即便可以通过房间密码等形式进一步筛选,终究会对用户体验造成不好的影响。
而像微信、叮叮这样的应用,总不能用户注册在不同的分区,不能互发消息聊天吧。如何做到在一个大区内实现多用户交互,我们下一节介绍分布式服务。