电商项目微服务架构拆分实战

1. 微服务架构拆分设计

1.1 微服务架构

微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在 自己的进程中,服务间通信采用轻量级通信机制(通常用 HTTP 资源 API)这些服务围绕业 务能力构建并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术。

英文:Microserviceshttps://martinfowler.com/articles/microservices.html 

 中文:微服务|YYGCui's blog YYGCui的个人博客http://blog.cuicc.com/blog/2015/07/22/microservices

单体架构 vs 微服务架构 

 

1.2 微服务拆分的一些通用原则

单一服务内部功能高内聚低耦合:每个服务只完成自己职责内的任务,对于不 是自己职责的功能交给其它服务来完成

闭包原则(CCP 微服务的闭包原则就是当我们需要改变一个微服务的时 候,所有依赖都在这个微服务的组件内,不需要修改其他微服务

服务自治、接口隔离原则尽量消除对其他服务的强依赖,这样可以降低沟通 成本,提升服务稳定性。服务通过标准的接口隔离,隐藏内部实现细节。这使 得服务可以独立开发、测试、部署、运行,以服务为单位持续交付。

持续演进原则在服务拆分的初期,你其实很难确定服务究竟要拆成什么样。 应逐步划分,持续演进,避免服务数量的爆炸性增长。

拆分的过程尽量避免影响产品的日常功能迭代:也就是说要一边做产品功能迭 代,一边完成服务化拆分。比如优先剥离比较独立的边界服务(如短信服务 ),从非核心的服务出发减少拆分对现有业务的影响,也给团队一个练习、 试错的机会。同时当两个服务存在依赖关系时优先拆分被依赖的服务。

服务接口的定义要具备可扩展性比如微服务的接口因为升级把之前的三个参 数改成了四个,上线后导致调用方大量报错,推荐做法服务接口的参数类型最 好是封装类,这样如果增加参数就不必变更接口的签名

避免环形依赖与双向依赖尽量不要有服务之间的环形依赖或双向依赖,原因 是存在这种情况说明我们的功能边界没有化分清楚或者有通用的功能没有下沉下来。

阶段性合并:随着你对业务领域理解的逐渐深入或者业务本身逻辑发生了比较 大的变化,亦或者之前的拆分没有考虑的很清楚,导致拆分后的服务边界变得 越来越混乱,这时就要重新梳理领域边界,不断纠正拆分的合理性。

自动化驱动部署和运维的成本会随着服务的增多呈指数级增长,每个服务都 需要部署、监控、 日志分析等运维工作,成本会显著提升。因此,在服务划分 之前,应该首先构建自动化的工具及环境。开发人员应该以自动化为驱动力, 简化服务在创建、开发、测试、部署、运维上的重复性工作,通过工具实现更 可靠的操作,避免微服务数量增多带来的开发、管理复杂度问题。

1.3 微服务拆分策略

功能维度拆分策略

大的原则是基于 业务复杂度 拆分服务: 业务复杂度足够高,应该基于领域驱动拆分服务。业务复杂度较低,选择基于数据驱动拆分服务
  • 基于数据驱动拆分服务: 自下而上的架构设计方法,通过分析需求,确定整体数据结构,根据表之间的关系拆分服务。
拆分步骤: 需求分析,抽象数据结构,划分服务,确定调用关系和业务流程验证。
  • 基于领域驱动拆分服务: 自上而下的架构设计方法,通过和领域专家建立统一的语言,不断交流,确定关键业务场景,逐步确定边界上下文。领域驱动更强调业务实现效果,认为自下而上的设计可能会导致技术人员不能更好地理解业务方向,进而偏离业务目标。
拆分步骤:通过模型和领域专家建立统一语言,业务分析,寻找聚合,确定服务调用关系,业务流程验证和持续优化。
以电商的场景为例,交易链路划分的限界上下文如下图左半部分,根据一个限界上下文可以设计一个微服务,拆解出来的微服务如下图右侧部分。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值