引言(文章的价值及意义)
1.研发全流程总结:从需求分析、架构设计、项目管理,部署等流程都有描述及对应的方法论沉淀;
2.总结DDD 架构设计实践经验;
3. 总结SpringCloud微服务架构实践经验;
4. 项目实战: 已电商秒杀系统的三高来做演示;
5. 分享经验,锻炼自己的总结能力;
6. 分享经验,和其他人交流学习;
我们直观从 三个架构来整体感受下:
- 业务架构
- 应用架构
- 技术架构
文章目录(项目研发流程)
我们按照项目的研发流程来编织文章目录,从项目立项到上线的流程来看各个环节 的 事情、人、职责、关键要素
章节 | 说明 |
---|---|
1. 秒杀业务的背景及描述 | 公司战略,部门战略,产品意义及价值 |
2.软件设计:DDD领域驱动设计 | 软件设计,业务建模 |
3.架构师的图-业务、应用、技术架构 | 架构师工作中主要面向的管理资料,就是架构图的维护 |
4.项目管理 | 项目管理、人力管理、研发流程devops |
5.功能特性 | 各种功能特性说明 |
6.项目效果展示及开源代码 | 成果展示及源码分享 |
7.部署流程 | 怎么代码部署到机器上 |
8.SpringCloud资料分享 | 微信公众号 领取资料 |
9.总结 | 方法论沉淀 |
1.秒杀业务的背景及描述-(项目背景)
方法论:
在实际的工作项目中,换成自己的项目业务的背景和意义。这块总体的方法论是:
1. 从价值角度出发:
1.1 做了这个项目会给我们的业务带来多大的收益?
1.2 降低了多少成本?
1.3 提高了多少效率?
1.4 为用户体验提升了多少?
1.5 对品牌影响力的提升是什么?
1.6 解决了什么痛点等方面入手?
2. 从现状资源角度触发:
2.1我们现状,技术栈、人力 是怎么样的?
2.2 实现的难度难点是什么?判断是否可实现。
3. 高视角来看项目:
3.1 是否满足公司战略,战术,价值观等;
3.2 从历史的周期内看,是否满足一定的周期规律
3.2.1 政治周期 --
3.2.2 康波周期 -- 经济周期
3.2.3 公司周期 --
4. 目标蓝图描述
4.1 实现的目标具体大概的业务场景是怎么杨的?
4.2 实现的大概原理、执行路径
备注: 项目是为了学习实践的假设案例,请不要对号入座,投射到现有公司及业务上。
我们公司是做跨境电商的,目前有一定的用户基础(比如:1000万注册用户 ),但是用户新增(DAA : 1000)、用户活跃度不是很好(DA 100万);
我们想通过构建秒杀商品,来增加用户日活(日活 500万),和每日新增用户数(每日新增 2万);
我们依靠公司现有的SpringCloud架构体系及java 技术团队,新增秒杀服务,新域名,CDN 等方式,来构建一套独立抗流量的业务流程出来,支撑秒杀业务。
附件信息:
- 业务MRD: 连接
- 产品PRD:连接
2.秒杀项目软件设计-(DDD领域驱动设计)
领域驱动设计总述
1. DDD设计 流程 方法论:
2. 统一语言:
3. 战略设计:
4. 战术设计:
5. 技术实现:
2.1 DDD设计方法论:
阶段 | 架构 | 输入 | 方法 | 输出 | 价值 |
---|---|---|---|---|---|
1.统一语言 | 业务交流 | 表格收集整理 | 秒杀域核心词汇表 | 统一语言,统一概念,对全域参与者 提高协作效率,降低沟通成本 | |
2.战略设计*领域分析 | 顶层业务架构 | 公司业务、问题空间 | 分而治之 流程功能分析 业务场景分析 领域知识和经验 |
核心子域 通用子域 支撑子域 |
对全局业务线的认知 |
3.战略设计*领域建模 | 子域业务架构 | 各域问题空间输入 | 事件风暴 用例分析 场景分析 |
领域模型 限界上下文 实体、聚合、聚合根、值对象 |
产生细分领域的业务模型 |
4. 战术设计*微服务设计 | 应用架构 | 领域模型 限界上下文 实体、聚合、聚合根、值对象 |
分层架构(四层、洋葱、六边形)、CQRS、领域事件驱动 | 1.对外:服务依赖关系 2. |
应用架构承载业务的实体 |
5. 战术设计*详细设计 | 子域技术架构 | 子域业务、应用架构 | 架构师软件设计方法 | 技术架构 | 针对业务特性选择合适的技术组件解决特性问题(三高、网络,存储、运算 等) |
6.战术设计*具体实现 | 业务架构 应用架构 技术架构 |
编码、测试、上线 | 软件功能交付 | 实施实现 |
2.2统一语言
方法论:
统一语言的目的就是为了方便沟通,因为参与项目的人员可能包括业务专家、架构师、开发人员、测试人员、运维人员等等,不同的角色对同一个概念的理解可能会千差万别,
比如:南方叫汤圆,北方叫元宵,那双方在沟通时要用汤圆还是用元宵呢?再举个例子,对于“库存”这个概念我们可以这样命名:Stock、Inventory、Amount、库存等,
如果没有统一语言,这些概念的命名就会变得五花八门,那怎么做到统一语言呢?推荐的一种做法是建一个核心领域词汇表.
秒杀域核心词汇表
名词 | 英文 | 解释 |
---|---|---|
秒杀 | seckill | 指的是 秒杀业务 |
秒杀商品 | seckill product | 指的是 秒杀业务中要售卖的商品 |
秒杀库存 | seckill stock | 指的是 秒杀设置的秒杀预售的库存是多少 |
超卖 | oversold | 指的是 卖出的商品数量大于了 秒杀库存 |
.... | .... | ..... |
2.3战略设计
2.3.1 战略设计*领域分析
- 问题空间: 在现有的电商系统中,增加秒杀模块;
- 业务线流程及功能分析;
2.1 用户需要能看到秒杀预告的信息 时间、商品,价格;
2.2 用户在秒杀开始是假进行秒杀点击;
2.3 秒杀抢购结果:没抢到;
2.4 秒杀抢购结果: 抢到,走订单流程支付购买;
2.5 秒杀抢购结构: 如果支付超时未购买,退库存,让其他人来购买; - 产出:
核心、通用、支撑 域 ;
核心 : 秒杀域、
通用: 订单域
支撑:用户域、支付域
业务线流程及功能概述;(每个业务线的功能及边界)
2.3.2 战略设计*领域建模
建模方法:事件风暴法;
- 事件风暴-事件收集
- 事件风暴-事件整理
- 产出:
领域模型
限界上下文
实体、聚合、聚合根、值对象
2.4战术设计
2.4.1 战术设计*应用架构(微服务拆分)
2.4.5 战术设计*技术方案(详细设计)
2.5技术实现
完成设计阶段,接下来进入研发流程。
3.架构师的图-业务、应用、技术架构
3.1 架构师的职责及架构师工作边界
3.2 业务架构
3.3 应用架构
3.4 技术架构
4.项目管理
4.1. 研发总体流程及设计的角色职责
1. 立项会: 公司战略,产品设计prd 等;
2. 需求沟通会:
3. 技术方案沟通会:设计分析: DDD
4. 技术方案: 业务架构,应用架构、技术架构的改动点,及具体编码实现的流程及逻辑、以及面临的难点;
5. 测试用例评审会:
6. 项目进度沟通会: 每日站会、项目周会;
7. 测试
8. 升级
9. 交付 : UAT 验收,现场验收,项目进度邮件同步;
5. 系统功能特性说明
功能 | 技术亮点 | 说明 | |
---|---|---|---|
并发处理 | 1. future异步处理业务流 | 多个后端请求并发执行,降低c端用户的访问的RT | 代码:ServiceClass 类 |
软件设计方法 | DDD领域驱动设计 | 战略设计战术设计,完美融合微服务概念的拆分 | 推荐pdf《领域驱动设计:软件核心复杂性应对之道》 |
6.项目效果展示及开源代码
6.1 线上访问路径;
6.2 项目开源路径地址:
7.部署实践
部署清单列表:按顺序部署;
7.1 机器清单:
7.2 中间件: redis、mysql 、
8. 资料分享
- DDD 领域驱动设计;
- SpringCloud 书单;
- 相关面试题;
9.总结
架构师是承上启下,把控方案、技术走向的角色,在系统维护,项目研发中起到了很关键的作用,如下我们沉淀了架构师的工作方法论:
架构师工作方法论:
(1) 公司战略:行业分析,公司阶段,商业模式切入点分析;
(2) 业务架构:业务划分、高内聚低耦合;
(3) 技术架构:分层架构、技术栈
(4) 人力梯队:把合适的人到业务架构、应用架构、技术架构的具体域里面。
(5) 兜底管理: 故障管理、监控管理、风控、安全、降级、备份;
(6) 底层逻辑: 目标思维、兜底思维、利他、分治、系统性思考,极限思考;
本文我们从电商秒杀项目的立项、DDD分析设计、架构输出、编码、部署演示等,带大家体验了一遍 DDD + SpringCloud 的研发流程,期中有大量方法论的沉淀描述,希望能帮助到更多需要的同学。
我们这期到这里,后会有期。喜欢的小伙伴点赞、评论、点在看。
参考文章:
【DDD序列2-事件风暴】
https://baijiahao.baidu.com/s?id=1688784023337140575&wfr=spider&for=pc