写点什么

架構設計訓練營作業 3

用户头像
海罗沃德
关注
发布于: 2021 年 05 月 09 日

前言

本文是自研发消息队列中间件详细设计文档,用于指导指导消息队列后续的开发,测试和运维。


词汇表

MQ: message queue 消息队列

Sn:Shard 数据分片,用来描述分片标号例如,S1,S2


1. 业务背景

由于业务量不断上升,同步 blocking 方式吞吐量无法满足业务需求,为了增加业务吞吐量,要增加异步消息队列进行业务解耦。可以解决目前业务中的如下问题:

性能问题:由于后端架构采用微服务,每次前端业务请求需要多次后端级联调用,用户端等待时间过长。

耦合问题:新增子系统时,需要通知所有消费方进行系统升级来整合新的子系统功能。

效率问题:无法实现统一的业务调用请求模板,每个子系统都需要大量的人力维护输入参数和返回数据格式。


2. 约束和限制

  1. 必须在今年 Q4 完成开发测试,进行线上测试

  2. 服务器成本不能超过 20 万每年

  3. 数据库采用开源 MySQL

  4. 消息队列写入读取延迟小于 200ms

3. 总体架构


3.1 架构分析

3.1.1 高可用

調用中間件:采用無狀態,水平擴展集群

數據庫集群:單數據庫集群再用主備複製方式,主機故障時進行主備手動切換


3.2 总体架构

  1. 數據按照 id 進行分組,每個集群中按照分組存儲數據

  2. 每個集群分組使用主備 mysql 複製

  3. 每組中主機對外提供讀寫服務,備機不對外提供服務

  4. 主機故障后,需要手動切換備機為主機


4. 详细设计


4.3 设计规范

  1. 中間件使用一致性 hash 分配庫表,如果分配的庫表不可用,id 加一后繼續分配新庫表

  2. mysql 采用 innodb 引擎


5. 质量设计

  1. 消息隊列後臺管理系統,可以觀測每個數據庫中庫表用量情況

  2. 成本:每個表存儲 10 萬條數據,超出后新建表,每個數據庫集群允許使用 100 張表,初始部署 3 太數據庫集群,預估成本 10 萬


6. 演进规划

  1. 預估一期,搭建單庫消息隊列,和對應單庫的中間件

  2. 部署管理系統

  3. 增加中間件橫向擴展功能,增加多庫連接功能


用户头像

海罗沃德

关注

还未添加个人签名 2018.06.27 加入

还未添加个人简介

评论

发布
暂无评论
架構設計訓練營作業 3