打造高并发十万用户 IM 聊天系统,你需了解这些架构设计技巧!-架构设计论坛-技术-SpringForAll社区

打造高并发十万用户 IM 聊天系统,你需了解这些架构设计技巧!

1 业务背景

假设你现在正在一个创业公司担任 CTO,因为微信工作生活娱乐不区分,已经发生了很多次将敏感信息(可以自行脑补一下)发错人甚至发错群的尴尬事件了! 你司 CEO 决定做一款IM工具,为了区别微信和 QQ 大众化的 IM 需求,你们公司主打安全IM,这款产品的竞争力如下:主打私密聊天,严格控制私密好友的数量,而不是像微信一样,买个菜都可能要加个微信。

公司背景

  • 技术团队大约10个人,后端6个,前端2个,Android 2个,ios还没有
  • 后端Java 为主,大部分是P6~P7;
  • 后端具备 MySQL、微服务、Redis 等开发使用经验
  • 后端没有大数据和推荐相关经验

业务基本场景

11.webp

  • 每个用户都会通过算法生成非对称的公钥和私组
  • 用户发送的消息会通过公钥加密,接收用户的消息使用自己的私钥解密
  • 只能创建一对一聊天
  • 聊天消息“阅后即焚最多只保留60分钟
  • 无需使用手机号注册
  • 每个用户最多20个好友
  • 增加群聊功能,每个私密群聊限制人数为5人
  • 增加支付功能,用于2个私聊用户之间转账或红包

2 总体架构思路

2.1 你的推测

老板说我们3年内要做到1千万注册用户,作为 CTO 的你应该如何做架构设计?

  • 十万 落地快,但是如果业务发展很快,架构很快不适应了怎么办?
  • 百万 落地慢一些,但同样面临业务发展过快的风险
  • 千万 落地时间可能要6个月以上,但基本上3年内无需再动架构

2.2 分级架构

22.webp

1.不同架构师的职责有什么区别?
  • 总架构师(P9) 的核心职责: 1.划分业务域,2.基础技术平台完善
  • 业务域架构师 (P8)的核心职责: 1,划分业务域内的微服务:2.按照用户规模设计架构.

比如全链路压测:

  • 影子库+流量标识(传统)
  • 容器化重新申请临时资源压测(新式)
2.感觉总架构师要运维、测试、大数据都要懂,这个怎么做到的?

但总架构师确实每个领域都要懂一些(技术广度)每个技术域需要一个P8的负责,例如:全链路压测什么时候实现? 用什么方案? 需要总架构师一起决策。

3.各个业务域内的架构,总架构师是不是不需要关注?

基本上是的,除非某个域问题很多,例如线上质量问题、开发效率问题等.

4.业务域划分是总架构师划分就可以了么?

实际上是由老板、业务方、总架构师一起讨论确定的,不单是一个技术决策,还是一个权力决策。

2.3 业务域划分粒度

三个火枪手原则的延续:一个业务域一个 P8,一个 P8 管理范围大约是30人。

33.webp

为何红包属于聊天域,而不是综合域的支付服务?看业务关联度!

44.webp

2.4 基础技术的“四化建设”

① 规范化

统一的各类规范,如:

  • 日志规范
  • 开发框架
  • RPC 框架
  • 接口规范
  • 代码管理规范
② 平台化

基于规范实现的统一平台,如:

  • 测试平台
  • 运维平台
  • 大数据平台
③ 自动化

统一平台自动实现各类功能,如:

  • 接口自动化测试
  • 全链路压测
  • 故障自动分析
④ 可视化

状态、功能、操作等可视化,如:

  • 系统状态可视化
  • 任务管理可视化
  • 任务执行可视化

2.4 基础技术的“四个核心平台”

① 运维平台
  • 配置
  • 部署
  • 监控
  • 应急

测试平台:

  • 用例管理
  • 资源管理
  • 任务管理
  • 数据管理

存储平台:

  • SQL 平台
  • NoSQL平台
  • 小文件存储
  • 大文件存储

大数据平台:

  • 离线计算
  • 在线计算
  • 推荐系统

百万用户规模的时候难道不需要运维和测试平台吗?基本还是半人肉运维,还不是重点,所以不成熟。

千万级别特地强调,因为:

  • 要求效率
  • 人肉效果太差
  • 没有平台,拆分架构后,各个业务混乱不堪

百万规模时,做数据分析推荐clickhouse。

4 计算架构设计

4.1 负载均衡

Nginx=>LVS=>F5:

55.webp

缓存架构

66.webp

5 其它架构设计

高可用架构设计

77.webp

88.webp

千万级用户 IM 业务,应该选择同城双活还是异地双活?先同城(六七百万)再演进到异地(四五千万)。

架构要解决的核心复杂度

  • 十万:快速验证(核心需求)
  • 百万:快速扩展(辅助需求)
  • 千万:全面完善(基础技术)
  • 亿级:全面优化(稳定、成本、开放)

百万用户架构 V.S 千万用户架构

99.webp

为什么十万百万用户规模时,架构是面向需求,而到了千万却是面向技术了?

之前为了验证,后续不需要验证了,技术就要跟上了。所以要去大公司才能学到真技术。

 

 

来源   https://blog.51cto.com/JavaEdge/6192524

请登录后发表评论

    没有回复内容