[即时通讯] - 重构之路

问题:

生产环境,用户快速增长,后台服务暴露各种问题:服务器资源紧张,消息队列满MQ 卡死,服务处理不过来,数据库压力太大。


重构目的:

高性能,可扩展,容灾,容易维护。

分布式架构,全异步框架,服务功能拆分,逻辑拆分,与业务无关 系统存储。


基本架构图

重构手段:

1、优化功能逻辑和实现策略:一期版本,为了赶进度,很多功能逻辑和解决问题策略都不是最优的,还有优化的空间。

1) 业务分类处理:例如对平台所有用户推送广告和动态,这些数据对用户不重要,但涉及到平台大量用户必定会消耗系统资源,如果跟系统正常业务逻辑放在一起处理,肯定影响系统性能,所以系统要分离子业务独立处理。

2) 数据分页:用户手机屏幕有限,数据分页显示就足够了,好友列表,关注,粉丝列表等。

3) 可见即所得:用户眼睛看到的数据才向服务取,例如用户信息,群组信息显示只需要显示头像,昵称,不必要取详细的信息。

4) 数据增量,压缩传输:例如通讯录数据,手机少则一两百人,多则上千人,数据上传服务前,必须经过压缩,而且要优化增量上传策略,上传更新变动的数据。

5) 群聊,圈子写存储策略:千人群组里发一条信息,每个接收者在数据库里存一条记录是不可想象的,同理圈子里发表说说也一样,添加监听者逻辑,每个监听者存一个监听消息列表缓存 Redis 。数据库只记录一条数据。

6) 消息推送过期策略:用户只关心最近发生的事,用户离开一段时间重新登录,只推送最近数据,没必要全部离线数据进行推送。

7) 空间换时间:企业运营多个系统, ID 不一样,建立映射关系,也可以多个 ID 写入具体的业务数据表中,避免系统间频繁访问。


2、优化客户端缓存:终端缓存图片数据,用户数据,群组数据,部分数据逻辑结果等等,减少对服务请求。高效的系统不能只依靠服务进行改良,客户端也是很重要的一环。

3、优化系统架构:分布式架构;系统分层拆分,多个层级功能分明,逻辑清晰。(参考 nginx 多进程模型)

4、优化系统性能:多进程架构,避免线程死锁问题;全异步框架,减少同步请求等待缓慢,占用系统资源;引入 jemalloc 优化内存性能。


5、优化系统存储:引入多级缓存,读写数据同步改为异步,数据分类,引入优先级策略。

1) 数据分类:根据业务分类数据,属性数据,日志数据,实时数据,非实时数据,高优先级数据,低优先级数据。根据不同数据类型,引入不同处理策略。

2) 非业务: 独立于业务,减少耦合,提高系统通用性。要引入独立的存储读写协议。

3) 多级存储:进程 Session  + Redis + Mysql,引入数据热点机制,超时机制,淘汰不活跃或者僵尸用户数据,提高缓存命中率,减少对数据库读写访问。

4) 异步读写:单个实例的 Redis 压测并发能力达到 7万 ,同步情况下,并发不足 2 千,所以存储要引入异步读写框架。

5) 低延迟:数据落地缓慢,但是高性能系统对数据处理速度要求很高,上层逻辑服务,不可能等数据入库成功才进行下一步操作。所以在 Redis + Mysql 存储系统架构中,只要写 Redis 请求成功就马上返回,然后数据排队入库。

6) 数据库整合:分库,分表,分区,读写分离,主从。根据业务优化存储策略,整合字段,整合冗余表。例如圈子的说说,评论,点赞,原来分为3张表,但是这3张表相似度很高,就可以整合成一张。


6、优化代码:精减代码体积,减少代码依赖,引入轻量级稳定开源代码,统一代码风格。

7、优化系统管理工具:可视化管理系统,禁止手动直接操作数据库,保证系统数据安全性。


文档先行:

无规矩不成方圆,以文档为依据;复杂的问题简单化,简单的问题条理化;好记性不如烂笔头,杜绝口口相传陋习。

1) 业务需求说明书:产品具体功能说明,口头说明无效,必须落地文档。

2) 系统架构设计说明书:系统设计思想,总体架构,协议设计,数据走向,各个模块逻辑,功能,交互和关系。

3) 开发说明书:代码管理工具,系统研发工具,开发技巧,注意事项。

4) 协议设计说明书:协议结构描述。复杂的系统往往是几个团队小组协作完成的,客户端,后台,第三方等等,以文档协议为依据进行交互。

5) 数据库表结构设计说明书:业务数据落地,相应数据库和表的详细信息,分库分表策略,数据群组,主从分配配置。

6) Redis数据结构设计说明书:数据结构设计,数据类型分类,业务对应数据定义。

7) 功能实现逻辑说明书:写逻辑前,将需求和问题条理化。好记性不如烂笔头,复杂的业务逻辑务必要有逻辑图(“千言万语不及一张图”),实现策略和相关的文档说明。

8) 代码规范说明书:编码的重中之重,良好的代码风格让人赏心悦目,易于维护。团队在写第一行代码前就要代码规范培训,良好的规范也是企业文化的一种传承。

9) 系统部署说明书:量化,细化使用工具,安装软件,执行脚本,部署步骤。


感谢团队的智慧..


更精彩内容,请关注我的博客:https://wenfh2020.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容