微服务架构中模块划分和服务识别

最近在进行微服务架构的交流和讨论中,除了谈到微服务技术架构外,客户往往更加挂你微服务模块的划分粒度,已经具体的微服务API接口的识别和定义问题,因此这篇文章将重点谈下微服务架构实践过程中的微服务模块划分和服务识别。

首先我们还是再总结在在跨系统间的接口集成中服务的识别和定义方法,可以总结为:

1. 基于流程架构和业务架构,从跨系统交互流程出发,分析业务交互接口点,识别关键的业务服务能力。

2. 基于数据架构和主数据建模分析,识别关键的数据服务能力。

3. 基于技术架构和共性平台层技术组件的分析和定义,以能力开放原则识别关键技术服务能力。

因此对于跨系统间的集成,对于服务识别和定义思路是相对清晰的。那么在传统方法中业务系统的划分和定义粒度又是如何?在前面企业架构分析中,我曾经谈到过,通过跨系统交互流程分析,识别出最细粒度的业务功能模块和功能单元,然后再从底向上进行聚合,以CRUD分析为主要方法,多次迭代出最佳的满足高内聚,松耦合条件的业务系统划分。这里面没有一个精确方法,但是却有该大原则下的指导方法。

微服务模块的划分

微服务模块的划分不是什么新鲜事物,就是传统的业务系统内部的业务功能组件的划分,但是我要注意到的关键一点还是业务组件本身的粒度和大小。原来没有完全拆分为独立的微服务模块的时候,我们一个业务系统可以划分20个以上的业务模块,因为由于数据库本身没有拆分,同时业务模块间的调用本身又是内部的API调用,因此感觉不到有什么问题。但是如果把这20个业务模块完全拆分为独立的微服务模块,你才会发现模块间的紧耦合或者说大量的交互集成接口,会导致整个系统集成和交互关系相对复杂,后期很难管理。

这也是我们原来经常强调的,传统的一个大业务系统划分微服务模块的时候,尽量是划分到6到8个模块比较合适,当你本身的IT成熟度达到一定水平后你可以划分的更加细点。同时在微服务模块划分的时候一定要考虑数据库本身的划分,即底层的数据库也是划分开的,类似我原来谈私有云PaaS的时候谈的数据库的水平拆分。

究竟如何拆?实际上方法仍然是一样的,还是要分析单个业务系统内部的流程,然后分解到具体的业务组件或功能,再按照高内聚的原则进行聚合,尽量确保各个微服务模块之间的交互最少。同时对于大家都要用到的基础数据模块,仍然采用共性下沉的策略和思路进行。同时一个有价值的参考方法是,分析该业务系统承载的主体业务流程是什么?然后分析这个业务流程可以横向划分微哪几个独立的阶段,然后先将这些独立的阶段划分微不同的微服务模块,在划分好后再进行CRUD分析进行修正。

微服务接口的识别和定义

不管是传统的跨业务系统间交互的接口,还是微服务模块间的交互API接口,我一直强调的一个关键就是接口一定要保证粗粒度特性,实现业务规则和逻辑的高度内聚。接口面对的应该是核心的业务对象,领域对象或业务规则能力暴露,而不是微服务模块内部的数据库表的CRUD操作的暴露。如果将数据库表CRUD操作暴露为Rest
API接口并在微服务模块间相互调用。一个是耦合性增加,一个是完全没有实现高内聚的基本要求。

基于以上基础原则,我们在进行微服务接口识别和定义的时候,仍然需要从业务流程出发,梳理清楚完成一个完整的业务流程各个微服务模块之间有哪些业务交互接口,然后将这些接口识别出来后,才进行接口的拆分或合并,最终形成微服务API接口,只有这样最终的微服务API接口才是可以复用的。

由于我们已经将基础数据管理独立到一个基础模块,因此可以基于数据能力开放和暴露的原则将这些基础数据的能力以查询服务方式暴露为独立的数据服务能力接口。要求仍然是领域对象级而不是数据库表级别。

每一个微服务模块在开发和实现的时候,如果都是基于领域驱动架构设计的思路进行的,那么只有微服务模块的领域对象定义完整,完全可以将领域对象的能力以API接口的方式暴露出去,这里既包括了查询类接口,也包括了导入或数据插入类接口,其次对于核心的业务规则的实现可以独立暴露为接口服务。

在前面微服务架构咨询里面我曾经谈到过,在多个微服务模块之上,还可能有一个微服务能力组合层,实现类似流程服务和组合服务类的能力。如果存在这种情况,那么最好也是独立的微服务模块来实现,这个微服务模块本身可能并不对应具体的数据库,而是将底层的微服务模块之间服务能力进行组合,形成新的接口服务能力。

由于在微服务架构设计中,我们更加强调数据不落地的方式进行后续的开发和实现,由于数据不落地,我们就可以更好的以能力开放的思路来进行接口的识别和暴露。简单来说有哪些数据或业务对象在你这,有哪些业务规则属于你管理?这些都在经过粗粒度聚合后,都可以识别和定位为微服务API接口。

本文作者:佚名

来源:51CTO

时间: 2024-10-09 17:55:55

微服务架构中模块划分和服务识别的相关文章

认证鉴权与API权限控制在微服务架构中的设计与实现(一)

作者: [Aoho's Blog] 引言: 本文系<认证鉴权与API权限控制在微服务架构中的设计与实现>系列的第一篇,本系列预计四篇文章讲解微服务下的认证鉴权与API权限控制的实现. 1. 背景 最近在做权限相关服务的开发,在系统微服务化后,原有的单体应用是基于session的安全权限方式,不能满足现有的微服务架构的认证与鉴权需求.微服务架构下,一个应用会被拆分成若干个微应用,每个微应用都需要对访问进行鉴权,每个微应用都需要明确当前访问用户以及其权限.尤其当访问来源不只是浏览器,还包括其他服务

微服务架构中API网关的角色

[编者的话]本文主要讲述了Mashape的首席技术执行官Palladino对API网关的详细介绍,以及API网关在微服务中所起的作用,同时介绍了Mashape的一款开源API网关Kong. 本文讲的是微服务架构中API网关的角色API网关提供商Mashape的首席技术执行官Marco Palladino预测,尽管它们在命名方面存在差异,但新出现的服务网格并不完全不同于API网关,两者之间的相似性会随着时间的推移而不断增长. Palladino指出,实际上这两种技术提供的功能很相似.API网关,比

微服务架构之外的选择——基于服务架构

来自ThoughtWorks的主管Neal Ford在最近的一次演讲中表达了他对企业软件系统架构转型的看法,他认为从单体架构转向基于服务的架构要比转向微服务架构来得容易.Ford在UberConf 2016大会上做了一次关于基于服务架构的演讲,基于服务架构是介于面向服务架构和微服务架构之间的一个中间地带.这里可以下载演讲幻灯片(PDF格式). 微服务架构有很多优点,不过Ford建议应该把这些优点应用在新开发的项目上.对于已经采用了单体架构的组织来说,转向微服务架构有很多问题需要解决:分离代码,分

为什么说传统分布式事务不再适用于微服务架构

传统应用使用本地事务和分布式事务保证数据一致性,但是在微服务架构中数据都是服务私有的,需要通过服务提供的API来访问,所以分布式事务不再适用微服务架构.那么微服务架构又该如何保证数据一致性呢?本文就来谈谈这个话题. 传统分布式事务不是微服务中数据一致性的最佳选择 微服务架构中应满足数据最终一致性原则 微服务架构实现最终一致性的三种模式 对账是最后的终极防线 传统分布式事务 我们先来看下第一部分,传统使用本地事务和分布式事务保证一致性. 传统单机应用一般都会使用一个关系型数据库,好处是应用可以使用

现代应用架构中的配置管理面临的挑战和应对之道

摘要:过去15年中,互联网产业开始蓬勃发展,基于互联网的各类应用大放异彩,而在信息技术上,企业应用架构也逐渐从传统的ERP,JavaEE集中式应用开始走向互联网.云计算.分布式服务化架构的转型,在这个过程中,数据中心及应用的配置管理这个领域也发生了深刻的变化.本文简单介绍了在现代企业应用架构中,传统的围绕分散的配置文件为中心的配置管理方式在面对诸如微服务.DevOps.容器服务.云计算等新技术形式下面临的挑战,同时会探讨如何通过独立的配置中心服务集中式管理数据中心中的所有配置来解决这一挑战,同时

从 Spring Cloud 开始,聊聊微服务架构实践之路

本文讲的是从 Spring Cloud 开始,聊聊微服务架构实践之路[编者的话]随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加.在这个背景下,平台的技术架构也完成了从传统的单体应用到微服务化的演进. 系统架构的演进过程 单一应用架构(第一代架构) 这是平台最开始的情况,当时流量小,为了节约成本,并将所有应用都打包放到一个应用里面,采用的架构为 .NET SQL Server: 表示层:位于最外层(最上层),最接近用户.用于显示数

微服务架构下的分布式数据管理

1.1 分布式数据管理之痛点 为了确保微服务之间松耦合,每个服务都有自己的数据库, 有的是关系型数据库(SQL),有的是非关系型数据库(NoSQL). 开发企业事务往往牵涉到多个服务,要想做到多个服务数据的一致性并非易事,同样,在多个服务之间进行数据查询也充满挑战. 我们以一个在线B2B商店为例,客户服务 包括了客户的各种信息,例如可用信用等. 管理订单,提供订单服务,则需要验证某个新订单与客户的信用限制没有冲突. 在单体应用中,订单服务只需要使用传统事务交易就可以一次性检查可用信用和创建订单.

Spring Boot与Docker(二):使用Spring Boot和Docker构建微服务架构

本文讲的是Spring Boot与Docker(二):使用Spring Boot和Docker构建微服务架构,[编者的话]本篇是<使用Spring Boot和Docker构建微服务架构>系列的第二篇,本篇我们将会利用工具进行设置,深入探讨如何使用Docker工作,然后搭建我们的第一个容器.原文作者为3Pillar环球旗下美国Adbanced技术集团的总监Dan Greene,Dan有十八年的软件设计和开发经验,包括在电子商务.B2B集成.空间分析.SOA架构.大数据以及云计算等领域的软件产品架

微服务架构的核心要点和实现原理

微服务架构中职能团队的划分 传统单体架构将系统分成具有不同职责的层次,对应的项目管理也倾向于将大的团队分成不同的职能团队,主要包括:用户交互UI团队.后台业务逻辑处理团队与数据存取ORM团队.DBA团队等.每个团队只对自己分层的职责负责,并对使用方提供组件服务质量保证.如果其中一个模块化组件需要升级.更新,那么这个变更会涉及不同的分层团队,即使升级和变更的改变很小,也需要进行跨团队沟通:需求阶段需要跨团队沟通产品功能,设计阶段需要跨团队沟通设计方案,开发阶段需要跨团队沟通具体的接口定义,测试阶段