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

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

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

松耦合

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

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

高内聚

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

限界上下文

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

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

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

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

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

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

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

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

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

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

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

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

逐步划分上下文

继续学怎么划分上下文。

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

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

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

关于业务概念的沟通

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

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

相关推荐
Huangjin007_33 分钟前
【Linux 系统篇(十一)】基础开发工具(六) —— 版本控制器 Git
linux·运维·git
j7~1 小时前
【Linux】二十六.线程篇三《Linux多线程编程:线程控制、线程ID以及进程地址空间分布、线程局部存储__thread以及clone系统调用》---详解
linux·运维·服务器·开发语言·c++·多线程编辑·线程的控制
沸速存储8 小时前
整机瓶颈判断思路,自上而下定位卡顿根源
运维·服务器·电脑·内容运营
奈斯先生Vector9 小时前
告别工具碎片化:基于 Nano Banana 全模态 AI 聚合架构搭建“文本-图像-视频”自动化协同生产线
运维·数据库·人工智能·架构·自动化·aigc·音视频
DLYSB_10 小时前
AIOps 大模型实战:基于 LangChain 运维 Agent 的根因诊断与现场声光播报闭环
运维·langchain·报警灯
一可米12 小时前
gitHub.com Actions自动化发布
运维·自动化·github
智塑未来12 小时前
证券公司智能运维平台哪个品牌做得好?擎创科技智能运维 2.0 适配券商全场景
运维·科技·区块链
酷可达拉斯13 小时前
自动化运维-ansible配置文件与主机清单
linux·运维·自动化·ansible
来者皆善14 小时前
ZYNQ linux上使用 USB CDC ACM
linux·运维·服务器
4/5$全真龙门14 小时前
廉价易行的内网穿透
运维