备选方案模板1 .需求介绍[需求介绍主要说明需求的背景、目标、范围等]
随着XX微博业务的发展,业务上划分的子系统越来越多,目前系统之间的调用都是同步调用,存在以下问题:
性能问题:用户发布微博后,微博发布子系统需要同时调用“统计子系统”、“审计子系统”、“推荐子系统”等共计8个子系统,性能较低耦合问题:在添加子系统(如添加“广告子系统”)时,广告子系统需要开发新接口来解决微博发布子系统的呼叫效率问题。 由于每个子系统提供的接口参数和实现略有不同,因此每次重新设计接口和接口时,开发和测试团队都需要大量的重复工作量。
在以上背景下,必须部署消息队列进行系统解耦,并将当前同步调用更改为异步调用。 2 .需求分析[需求分析主要全方位描述需求相关信息]
5W [5W指世卫组织、世卫组织、假设、世卫组织、世卫组织]
世卫组织:寻求利益相关者,包括开发者、用户、购买者和决策者。
When :需求使用时间,如季节、时间和里程碑
What :需求的生产是什么,包括系统、数据、文件、开发库和平台
Where :有需求的APP应用方案,如国家、地点和环境。 例如,测试平台仅用于测试环境
Why :需求需要解决的问题通常与需求背景相关
消息队列的5W分析如下。
世卫组织:消息队列系统主要由业务子系统使用,子系统发送和接收消息。
When :如果子系统需要发送异步通知,则必须使用消息子系统
wat :需要建立消息队列系统
Where :开发、测试、预发、生产都要构建
Why :消息系统对子系统进行解耦,并将同步调用更改为异步调用
1h )这里的How既不是设计方案,也不是体系结构方案,而是一个重要的业务流程。 例如,一个系统如何向另一个系统发送消息,例如,在什么情况下发送消息。 这一部分可以独立地成为“用例文档”)。
消息队列有两个主要功能。
业务子系统向消息队列业务子系统发送消息从消息队列获取消息的八个约束(与需求相关的性能、成本、可靠性等在利益相关方提出的诉求不一定准确的分析约束中可能不需要)
性能:达到火箭MQ的性能水平
成本:参考XX公司的设计方案,10台以下的服务器
时间:希望在三个月内上线第一个版本,尝试在两个业务中使用
可靠性:消息队列系统的可靠性应根据业务要求达到99.99%
安全性:消息队列系统用于内部网,不需要考虑网络安全问题
合规性:消息队列系统必须根据公司当前的DevOps规范进行开发
技术:目前团队开发的主要负责人是Java,最好是用Java开发
兼容性:以前没有类似系统,不需要考虑兼容性
3 .复杂度分析[分析需求复杂度。 复杂度常见的有高可用性、高性能、可扩展性等,具体分析方法为mindmap]
高可用性
对于微博子系统来说,如果信息丢失、未经审查、之后违反了国家法律法规,这是非常严重的事情。 在等级子系统中,用户达到相应等级后,如果系统没有给他奖品和专属服务,VIP用户会非常不满,导致用户流失,损失收入,比较关键,但没有审查子系统的丢失消息那么严重
总的来说,消息队列需要高可用性,如消息写入、消息存储和消息读取。
高效能
当微博用户每天发送1000万条微博时,微博子系统每天生成1000万条消息,平均每个消息读取10个子系统,其他子系统读取的消息约为1亿次。 如果以秒为单位计算数据,则应该设计为平均每秒写入115条消息,读取1150条消息,并在考虑到系统读写并不完全平均的情况下以峰值进行计算。 如果峰值为平均值的3倍,则消息系统中的TPS为345,QPS为3450,考虑一定的性能裕度。 将设计目标定位为峰值的4倍,以确保一定的系统容量并适应后续业务的发展。 因此,最终的性能要求是TPS1380、QPS13800。 QPS13800不是很高,但是QPS13800已经很高了,所以高性能读取是一种复杂度。
可扩展
由于消息队列的功能是明确的,很少需要扩展,因此可扩展性不是此消息队列的重要复杂性。
4 .备选方案[备选方案的设计,至少三个备选方案,每个备选方案都需要说明重要实现,而不需要详细说明具体实现]
部署备选方案RocketMQ
[此处省略方案说明]
备选方案2 :群集MYSQL存储
[此处省略方案说明]
备选方案3 :集群自研存储
[此处省略方案说明]
5 .备选方案评估体系结构设计模板[备选方案评估后,选择一个方案落地实施。 体系结构设计文档用于说明细分方案]
1、总体方案
[总体方案需要从整体上描述方案结构,其核心内容是结构图和结构图的说明,包括模块或子系统的职责说明、核心流程]
2、体系结构概述
体系结构概述体系结构图和体系结构说明
3 .核心进程
消息发送过程
[此处省略过程说明]消息读取过程
[此处省略工艺说明] 4.详细设计
[详细设计需要说明具体实现的详细情况]
高可用性设计
/p> 消息发送可靠性[略]消息存储可靠性
[略]消息读取可靠性
[略]
高性能设计
[略]
可扩展设计
[略]
其他设计
[其他设计包括上述以外的其他设计考虑点,例如指定开发语言、符合公司的某些标准等,如果篇幅较长,也可以独立进行描述]
部署方案
[部署方案主要包括硬件要求、服务器部署方式、组网方式等]
5.架构演进规则
[通常情况下,规划和设计的需求比较完善,但如果一次性全部做完,项目周期可能会很长,因此可以采取分阶段实施,即:第一期做什么、第二期做什么,以此类推]
整个消息队列系统分为三期实现:
第一期:实现消息发送,权限控制功能,预计时间3个月
第二期:实现消息读取功能,预计时间1个月
第三期:实现主备基于Zookeeper切换的功能,预计时间2周