架構設計訓練營作業 3
前言
本文是自研发消息队列中间件详细设计文档,用于指导指导消息队列后续的开发,测试和运维。
词汇表
MQ: message queue 消息队列
Sn:Shard 数据分片,用来描述分片标号例如,S1,S2
1. 业务背景
由于业务量不断上升,同步 blocking 方式吞吐量无法满足业务需求,为了增加业务吞吐量,要增加异步消息队列进行业务解耦。可以解决目前业务中的如下问题:
性能问题:由于后端架构采用微服务,每次前端业务请求需要多次后端级联调用,用户端等待时间过长。
耦合问题:新增子系统时,需要通知所有消费方进行系统升级来整合新的子系统功能。
效率问题:无法实现统一的业务调用请求模板,每个子系统都需要大量的人力维护输入参数和返回数据格式。
2. 约束和限制
必须在今年 Q4 完成开发测试,进行线上测试
服务器成本不能超过 20 万每年
数据库采用开源 MySQL
消息队列写入读取延迟小于 200ms
3. 总体架构
3.1 架构分析
3.1.1 高可用
調用中間件:采用無狀態,水平擴展集群
數據庫集群:單數據庫集群再用主備複製方式,主機故障時進行主備手動切換
3.2 总体架构
數據按照 id 進行分組,每個集群中按照分組存儲數據
每個集群分組使用主備 mysql 複製
每組中主機對外提供讀寫服務,備機不對外提供服務
主機故障后,需要手動切換備機為主機
4. 详细设计
4.3 设计规范
中間件使用一致性 hash 分配庫表,如果分配的庫表不可用,id 加一后繼續分配新庫表
mysql 采用 innodb 引擎
5. 质量设计
消息隊列後臺管理系統,可以觀測每個數據庫中庫表用量情況
成本:每個表存儲 10 萬條數據,超出后新建表,每個數據庫集群允許使用 100 張表,初始部署 3 太數據庫集群,預估成本 10 萬
6. 演进规划
預估一期,搭建單庫消息隊列,和對應單庫的中間件
部署管理系統
增加中間件橫向擴展功能,增加多庫連接功能
评论