C++服务开发入门指南
  • 序言
  • 前言
  • 一、一个简单的服务
    • 1 什么是服务
    • 2 服务可以用来做什么
    • 3 简单服务框架
  • 二、网络通信服务框架
    • 1 网络服务的基本概念
    • 2 增加监听端口
    • 3 处理客户端会话
    • 小结
  • 三、添加基础模块
    • 1 日志模块
    • 2 定时器
    • 3 事件机制
    • 4 线程池
    • 5 线程安全
    • 小结
  • 四、一个聊天服务
    • 1 需求描述及分析
    • 2 概要设计
    • 3 创建服务项目
    • 4 ClientUser实现
    • 5 RoomMgr实现
    • 6 ChatRoom实现
    • 7 RoomIDMgr实现
    • 小结
  • 五、测试、迭代及重构
    • 1 测试
    • 2 迭代
    • 3 重构
    • 4 版本号
  • 六、架构设计
    • 1 单点服务
    • 2 分布式服务
  • 七、部署及发布
    • 1 部署环境
    • 2 编译环境
    • 3 部署服务
    • 4 发布服务
  • 八、线上问题处理
    • 1 线上问题
    • 2 问题处理
  • 九、程序员的职业规划
    • 职业规划
Powered by GitBook
On this page
  1. 六、架构设计

1 单点服务

Previous六、架构设计Next2 分布式服务

Last updated 2 years ago

单点服务是一种比较简单的服务模型,所有服务功能在一个服务程序上实现,所有请求服务的客户端,都连接到这一台服务上,和服务直接通信。

我们之前实现的聊天服务程序就是一个单点服务。

由于不需要考虑和其他服务进行交互,所有功能都在一个服务里实现,这种设计是最容易实现的,也是服务开发最原始的形态。

在用户较少的情况下,这个设计可以满足业务需求,从业务的复杂度来看,4核CPU,4G内存的服务器(简称4C4G),大概可以支撑1w用户。

对于一个新上的业务来看,1W同时在线的承载能力足够了。

即便对于大公司而言,一个新业务能否活下来,也是一个未知数。如果没有推广资源的倾斜,人数很难快速增长,因此单点服务在大多数情况下都足够了。

那如果新业务成了爆款,人数突然上升怎么办?

有两个方式

1、增强单台服务配置

4C4G的服务承载,达到了用户上限,提升服务配置,可以增加服务用户上限。

服务程序的承载瓶颈通常是内存、CPU和网络带宽,哪方面陷入瓶颈,提升哪方面即可,如果不差钱的话,可以全方位提升。

单台服务提升配置,操作虽然简单,但也会有以下几个问题。

1、配置越来越高,成本可能急剧攀升。

2、一旦服务宕机(异常退出),会影响所有的用户。

3、如果需要更新服务,需要发出维护通知,所有用户在维护期间都不能连到服务器。

为了避免以上问题,另外一条路线是分区扩展。

2、分区扩展

我们在玩一些网游的时候,经常会遇到选择分区的提示,有的分区人数已满,有的分区显示拥挤,新区通常有火爆标识。

这里每一个分区都可以认为是一组同样的服务,不同分区之间,游戏数据是不相通的,在1区中建立的角色,无法带入带2区进行游戏。

当然,游戏服务采用分区的方式,还考虑到游戏的平衡性,后进入的玩家如果和老玩家等级差距过大,会失去很多游戏性,在新服里大家都从零开始,争全服排名的积极性更高,更容易刺激消费。

另外,有些游戏数值设计、关卡设计只能支撑2到3个月的游戏时长,玩家在老服务中都玩遍了,也会逐步流失。不断开启新区的方式,可以不断的吸引新用户来游戏,这个俗称滚服。

我们的聊天服务也可以采用这样的方式。通过分区,缓解用户上限的问题。

用户被分散到不同的分区后,每台服务的压力自然减轻,也就能够承载更多的用户总数。

对于聊天室服务还好,聊天室本身就有一个房间号,分区其实作为另一个维度的地址标识,大家约定好到哪个区,哪个id的聊天室房间聚会,也说的过去。

不过这终归会带来一些不便,进错分区,再输入聊天室的房号,是可能进错房间的。即便可以通过房间密码等形式进一步筛选,终究会对用户体验造成不好的影响。

而像微信、叮叮这样的应用,总不能用户注册在不同的分区,不能互发消息聊天吧。如何做到在一个大区内实现多用户交互,我们下一节介绍分布式服务。