架构实战营 - 模块 6- 作业
作业:拆分电商系统为微服务
【背景】 假设你现在是一个创业公司的 CTO,开发团队大约 30 人左右,包括 5 个前端和 25 个后端,后端开发人员全部都是 Java,现在你们准备从 0 开始做一个小程序电商业务,请你设计微服务拆分的架构以及微服务基础设施选型。
【作业要求】 1. 需要明确服务拆分思路,并且将拆分后的系统架构图画出来; 2. 需要明确微服务基础设施选型思路,并选择一个微服务框架。
【提示】 1. 需要应用三个火枪手原则; 2. 需要选择拆分方式; 3. 需要选择微服务框架的模式
约束条件:
1,开发团队约 30 个人左右,包括 5 个前端和 25 个后端,后端开发人员全部都是 Java
2,从 0 开始做一个小程序电商业务
方案:
1,因为从 0 开始,所以选择按照业务拆分。
2,因为从 0 开始,所以可以搭建完善的基础设施。
3,新业务,后端团队全部使用 Java,所以微服务框架有两个选择:
a,选择 springcloud
b,选择 dubbo
原则上这里可以根据团队技术栈的熟悉程度来选择。
因为是新业务,所以流量不会太大,所以用不到 RPC;且可能使用粗粒度的渐进式的方式拆分,所以可以优先考虑 springcloud;当流量增大,业务越来越多,应用也越来越多,应用与应用相互关联调用,发现有些功能已经不能简单划分开,此时可能就需要用到 RPC,这时可以考虑使用 dubbo。
4,系统架构图设计
虽然是新的电商业务,但是因为不清楚有没有业务专家,所以业务拆分思路有两种:
1,有业务专家,可以由业务专家带领来划分。
2,没有业务专家,可以渐进式,先粗分后演进。
并且还要考虑到基础设施的开发与维护工作。
A,业务部分:
所以,如果是粗粒度的划分:
因为后端是 25 个开发,根据三个火枪手的原则:
5 个前端,25 个后端,后端我们选择一对一拆分,拆分出六个服务。
B,基础设施部分:
由于业务部分拆分完后是 6 个服务,那么 25 个人中使用了 18 人,还剩下 7 个人可以进行基础设施的开发与维护。但是由于业界的基础设施已经成熟,所以可以直接采用开源方案进行使用,那么就省略的研发工作,只剩下环境的搭建,使用以及维护工作。
容器化都选用 k8s+docker
基于此,可以有多种方案:
1,springcloud 全家桶系列 + 其他组件
2,springcloud 全家桶系列 + 替换全家桶部分组件 + 其他组件
3,任意组件搭配系列(比如 nacos+dubbo+elastic-job+hytrix+cat+k8s+docker+rocketmq+redis+jenkins+testng+mockito 等)
出于简便的原因,可以采用 springcloud 全家桶系列 + 其他组件
评论