1 需求介绍
[需求介绍主要描述需求的背景、目标、范围等]
性能问题,耦合问题,效率问题……基于以上背景,我们需要XXX。
2 需求分析
[需求分析主要全方位地描述需求相关的信息]
5W:Who、When、What、Why、Where
Who:需求利益干系人,包括开发者、使用者、购买者、决策者等。
When:需求使用时间,包括季节、时间、里程碑等。
What:需求的产出是什么,包括系统、数据、文件、开发库、平台等。
Where:需求的应用场景,包括国家、地点、环境等,例如测试平台只会在测试环境使用。
Why:需求需要解决的问题,通常和需求背景相关。
8C:指的是8个约束和限制,即Constraints,包括性能Performance、成本Cost、时间Time、可靠性Reliability、安全性Security、合规性Compliance、技术性Technology、 兼容性Compatibility
注:需求中涉及的性能、成本、可靠性等仅仅是利益关联方提出的诉求,不一定准确;如果经过分析有的约束没有必要,或成本太高、难度太大,这些约束是可以调整的。
性能:需要达到Kafka的性能水平。
成本:参考XX公司的设计方案,不超过10台服务器。
时间:期望3个月内上线第一个版本,在两个业务尝试使用。
可靠性:按照业务的要求,消息队列系统的可靠性需要达到99.99%。
安全性:消息队列系统仅在生产环境内网使用,无需考虑网络安全;如消息中有敏感信息,消息发送方需要自行进行加密,消息队列系统本身不考虑通用的加密。
合规性:消息队列系统需要按照公司目前的DevOps规范进行开发。
技术性:目前团队主要研发人员是Java,最好用Java开发。
兼容性:之前没有类似系统,无需考虑兼容性。
复杂度分析
[分析需求的复杂度,复杂度常见的有高可用、高性能、可扩展等]
备选方案
[备选方案设计,至少3个备选方案,每个备选方案需要描述关键的实现,无须描述具体的实现细节]
备选方案1:直接引入开源Kafka。[此处省略方案描述]
备选方案2:集群 + MySQL存储。[此处省略方案描述]
备选方案3:集群 + 自研存储。[此处省略方案描述]
备选方案评估
[备选方案360度环评。注意备选方案评估的内容会根据评估会议的结果进行修改,也就是说架构师首先给出自己的备选方案评估,然后举行备选方案评估会议,再根据会议结论修改备选方案文档]
3 架构设计
[备选方案评估后会选择一个方案落地实施,架构设计文档就是用来详细描述细化方案的]
总体方案
[总体方案需要从整体上描述方案的结构,其核心内容就是架构图,以及针对架构图的描述,包括模块或者子系统的职责描述、核心流程]
架构总览
[架构总览给出架构图以及架构的描述]
核心流程
消息发送流程。[此处省略流程描述]
消息读取流程。[此处省略流程描述]
详细设计
[详细设计需要描述具体的实现细节]
高可用设计
消息发送可靠性
消息存储可靠性
消息读取可靠性
高性能设计
可扩展设计
安全设计
身份识别
队列权限
其他设计
[其他设计包括上述以外的其他设计考虑点,例如指定开发语言、符合公司的某些标准等,如果篇幅较长,也可以独立进行描述]
部署方案
[部署方案主要包括硬件要求、服务器部署方式、组网方式等]
4 架构演进规划
[通常情况下,规划和设计的需求比较完善,但如果一次性全部做完,项目周期可能会很长,因此可以采取分阶段实施,即:第一期做什么、第二期做什么,以此类推]