电商系统微服务拆分设计
一、背景
假设你现在是一个创业公司的 CTO,开发团队大约 30 人左右,包括 5 个前端和 25 个后端,后端开发人员全部都是 Java,现在你们准备从 0 开始做一个小程序电商业务,请你设计微服务拆分的架构以及微服务基础设施选型。
要求
需要明确服务拆分思路,并且将拆分后的系统架构图画出来;
需要明确微服务基础设施选型思路,并选择一个微服务框架;
提示
需要应用三个火枪手原则;
需要选择拆分方式;
需要选择微服务框架的模式。
二、推导过程
考虑到是从 0 开始构建服务,鉴于团队内没有业务专家。因此我们将参考业界典型的小程序电商系统来进行业务划分。
1.业务领域划分
参考业界已有的 B2C 电商,划分出如下 商品,支付,订单,管理 4 个子域。
![](https://static001.geekbang.org/infoq/c9/c93224d9cb6df8539b006915c8318192.png)
2.依据三个火枪手的原则进行简单计算,按照平均 3 个人负责一个微服务的分配方案来计算,则 25 个后端开发人员可以负责约 7~8 个微服务。但考虑到目前团队还没有为微服务的经验,需要先对微服务基础设施进行落地,因此分配一部分开发人员负责基础设施的搭建和维护更为稳妥。
综上,将业务子域重新划分为如下 7 个微服务:
1.用户微服务:负责用户信息的管理,包括用户的积分属性。
2.支付微服务:负责订单支付相关的具体业务。
3.商品微服务:负责商品的展示,推荐,搜索逻辑。
4.订单微服务:负责订单创建,管理,积分抵扣优惠券等实际商品价格的逻辑。
5.库存微服务:负责商品库存管理。
6.物流微服务:负责该订单商品的物流服务。
7.管理后台微服务:负责整体系统的后台管理配置和数据统计。
以上 7 个微服务将由 21 个后端共同完成,剩下的 4 个人负责基础设施的搭建和维护。
3.整体架构图如下
![](https://static001.geekbang.org/infoq/0f/0fcaab7859beba96001b139e7948dba8.png)
三、基础设施选型
考虑到团队规模有限,后段开发人员均为 Java 背景,因此考虑选择嵌入 SDK 模式的维服务模式最为合适,因此微服务基础设施将直接选用 Spring Cloud 框架 SDK 进行研发,因为这种方式实现起来最为简单,且提然啊支持高性能高可用。
评论