[微服务设计]3_如何构建服务

一个好的服务的判定标准有很多------功能性、性能、可用性、可维护性、健壮性、协作性。在这一章节中,作者希望读者能专注在两个重要的概念上:松耦合和高内聚。

探讨基于低耦合高内聚原则的服务划分。

松耦合

一个松耦合的服务应该尽可能少地知道与之协作的那些服务的信息。

微服能独立修改以及部署而不需要修改其他服务。

高内聚

把相关的行为聚集在一起,不相关的行为放在别处。这样要改变某个行为时,只需要在一个地方进行修改。

限界上下文

"限界上下文"是领域驱动设计DDD种的一个核心概念,用于解决复杂业务系统中不同业务模块的边界划分和写作的问题,其核心思想是:将一个庞大系统拆分为多个明确边界的小业务领域,每个领域内部使用统一的语言和模型,并通过清晰的接口与其他领域交互。

这个"明确边界的小业务领域",就可以是"xxx上下文"。借助"限界上下文"对业务边界进行描述会比较准确,例如:

电商系统,可以简单分出来------

订单上下文:关注订单创建、支付状态、物流跟踪。(改变订单的行为只需要在订单上下文中进行,且不需要关注其他上下文,在必要的时候进行上下文通信即可)

库存上下文:管理商品库存的增减、预留和同步。

会员上下文:处理用户积分、等级和优惠券。

交互方式:订单创建时通过事件(如 OrderPlacedEvent)通知库存系统扣减库存。

"限界上下文"就是这样一个划分业务的逻辑边界的概念工具。

开篇有讲到,微服务是"协同工作的小而自洽的服务",如何"小的刚刚好",即"如何拆分为明确边界的小业务领域",最佳实践就是一个微服务对应一个"限界上下文"------微服务和限界上下文保持一致。

但是注意不要过度拆分,将单一业务拆分为多个上下文,我们核心原则还是低耦合高内聚。

服务拆分的边界可以理解为一个领域框,框内应该是相关性强的业务。

专家级程序员强调的行业经验应当就有领域划分边界的经验。

逐步划分上下文

继续学怎么划分上下文。

在引入"限界上下文"辅助划分高度相关的业务内容为微服务后,需要理解的是------上下文的颗粒度应该根据组织结构看来决定,组织结构和软件架构会互相影响。

例如仓库系统可以拆分为:订单处理、货物接收、库存管理

财务系统与仓库系统进行通信获取库存等级,是直接与仓库系统进行通信,还是与具体的库存管理通信,还是与仓库提供通信,这可能取决于开发系统的组织架构。

关于业务概念的沟通

设计微服务时,需要考虑微服务如何就一个业务概念进行通信。

通信方式同步还是异步,性能要求如何,系统复杂度怎么控制?这些都与业务概念相关,沟通的原则是尽量可靠、安全、可拓展。

相关推荐
小柏ぁ4 分钟前
calico/node is not ready: BIRD is not ready: BGP not established with xxx
运维·docker·kubernetes
Mintimate25 分钟前
云服务器 Linux 手动 DD 安装第三方 Linux 发行版:原理与实战
linux·运维·服务器
RussellFans36 分钟前
Linux 环境配置
linux·运维·服务器
高冷的肌肉码喽1 小时前
Linux-进程间的通信
linux·运维·服务器
乖乖是干饭王1 小时前
Linux系统编程中的_GNU_SOURCE宏
linux·运维·c语言·学习·gnu
jekc8682 小时前
禅道18.2集成LDAP
linux·运维·服务器
打码人的日常分享2 小时前
智慧城市建设方案
大数据·架构·智慧城市·制造
weixin_307779132 小时前
Linux下GCC和C++实现统计Clickhouse数据仓库指定表中各字段的空值、空字符串或零值比例
linux·运维·c++·数据仓库·clickhouse
鲁班大叔_0073 小时前
使用扣子与Dify的业务风险
架构·产品
hello早上好3 小时前
Spring不同类型的ApplicationContext的创建方式
java·后端·架构