微服务拆分的一些基本原则

文章首发公众号:海天二路搬砖工

单一职责原则

什么是单一职责原则

单一职责原则原本是面向对象设计中的一个基本原则,它指的是一个类只负责一项职责,不要存在多于一个导致类变更的原因。

在微服务架构中,一个微服务也应该只负责一个功能或业务领域,这样可以使微服务的职责清晰、可维护性高、易于扩展和替换。

单一职责原则案例

以一个简单的电商系统为例,可以拆分为用户服务、商品服务、订单服务、物流服务等微服务,每个微服务只负责单一的业务领域。

在这里插入图片描述

涉及用户身份信息的修改,只需要变更用户服务,其他服务不受影响。

实现单一职责原则的挑战与应对

在微服务架构中,实现单一职责原则,其实最大的挑战职责边界不够清晰。

在微服务设计的初期,尽可能地定义出微服务之间的职责边界,确保每个微服务负责的业务领域和功能范围都能够清晰地定义出来。

在设计的过程中,可以采用 DDD(领域驱动设计)等设计技术来帮助确定职责边界。

如果我们无法确定一个功能是否应该属于某个微服务,或者认为该功能当前属于这个微服务,但以后可能不是,那它就不应该放在当前的微服务中。可以进一步定义这个功能所属的业务领域,也可以单独使用某个微服务来托管这些类似的功能。

服务自治原则

什么是服务自治原则

微服务架构的服务自治原则(Service Autonomy)是指每个微服务都应该具备高度自治的能力,即每个服务要能做到独立开发、独立测试、独立构建、独立部署,独立运行。

服务自治原则是微服务架构中的一条基本原则,它有利于提高整个系统的可靠性和弹性,并能够更快速地响应业务需求和变化。

服务自治原则还可以鼓励团队之间更加分散化、独立化的协作方式,并减少不同团队的耦合度,提高系统的可扩展性和可重用性。

服务自治原则示例

同样以上面的电商系统为例,每一个微服务应该有自己的存储、配置,在进行开发、部署、构建、运行和测试时,并不需要过多关注其他微服务的状态和数据。

在这里插入图片描述

实现服务自治原则的挑战和应对

对于一个相对复杂的系统而言,是没有办法完全切割成完全独立的子系统(服务)的。
比如上面的示例中,订单管理可能包含下单逻辑,下单需要考虑商品是否还有库存(商品管理)。微服务之前可能发生流程的联动,或者数据的共享。

在实现服务自治原则时,需要定义好服务间交互的协议。要尽可能避免直接访问对方的数据,而应该通过统一的接口来获取信息和提供能力。

分层单向依赖原则

什么是分层单向依赖原则

在更为复杂的业务中,微服务的水平拆分已经无法满足微服务治理的需求。针对不同的功能定位,可以做纵向的分层。

通常,系统可以分为下面几层

  • **API 网关层:**提供统一的服务接口和面向用户的商业逻辑处理,是微服务系统和外部系统的统一接口,具备流量控制、认证授权、缓存等功能。
  • **应用服务层:**处理业务逻辑、事务管理、权限控制等,对外提供领域服务接口,同时维护业务状态和业务规则。应用服务层对其他层具有扩展性和可配置性,是整个系统的关键决策层。
  • **领域服务层:**实现业务功能和核心业务逻辑,是核心的业务处理层。领域服务层之间不直接互相调用,只能通过公开的作用于领域范围内的接口完成。
  • **数据访问层:**提供数据访问和持久化,例如数据库的读写、缓存管理等,对领域实体进行持久化操作。

分层单向依赖原则示例

在这里插入图片描述

实现分层单向依赖的挑战与应对

  • 接口设计问题: 分层单向依赖要求每个层次都只能调用下层的接口,需要对接口设计进行规范化和优化。对于接口设计问题,需要注意保持接口的稳定性和向后兼容性,避免调用者和实现者之间的耦合度过高。
  • 性能问题: 在做分层单向依赖的时候,需要完成大量的层间信息传递,这有可能导致性能瓶颈增强。为了解决这个问题,可以采用一些优化策略,如缓存、异步等方式来加速服务处理和减少系统负担。

我的公众号

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值