博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微服务设计笔记(3)——服务建模
阅读量:1903 次
发布时间:2019-04-26

本文共 815 字,大约阅读时间需要 2 分钟。

1 好服务的特征

1.1 松耦合

松耦合指的是,修改一个服务,而另一个相关的服务,不需要修改。微服务的重要特点就是:能够独立修改和部署单个服务,而不会影响、甚至修改系统中的其它服务。

一个服务应该尽可能少地了解与之协作的服务信息。因为过度了解,会导致紧耦合。

1.2 高内聚

高内聚指的是,把相关的行为聚集在一起。这样,需要改变行为时,只需要在一处修改,然后独立发布。

我们需要做的是,找出业务领域的边界,然后实现高内聚。

2 服务边界

一个服务,分为两部分。一部分需要与外部通信,另一部分则不需要。就好像细胞,细胞膜定义了细胞的边界,并因此确定了什么在细胞内,什么在细胞外,以及什么物质可以通过细胞膜。

假设某家公司,拥有财务部门与仓库部门。这些部门都有明确的对外接口,比如仓库部门需要输出存货报告,而财务部门需要输出工资单等等。它们也有只有它们自己知道的细节,比如仓库部门内的铲车数量、财务部门的总账计算公式。

因此,这两个部门之间需要共享一个“库存信息”模型,进行数据交换。

微服务设计应该与构建的模型保持一致。如果搞错了服务边界,修复的代价是很大的。所以,我们可以等系统变得稳定之后,再确定需要把哪些内容作为服务划分出去。

把一套已有代码的系统划分为各个微服务,比从头开始构建微服务要简单得多。

3 逐步划分

一开始,我们会首先识别出一个粒度比较粗的服务模型。比如我们把仓库分为处理订单、接收货物、管理库存。而财务会根据目前的状况,通过微服务的形式来影响库存等级:

也可以去除仓库边界,把这些模块都作为微服务:

我们要根据组织的实际情况,来选择划分的方法。如果处理订单、接收货物、管理库存,是由不同的团队来提供服务,那么建议把它们都划分为微服务;如果它们都是由一个团队来负责的,那么建议加上仓库边界,统一对外提供服务。这种方式可以很方便地打包测试,而且只需要测试一个服务。

建议按照地理位置或组织结构,对系统进行合理划分。

转载地址:http://wbccf.baihongyu.com/

你可能感兴趣的文章
visual svn for visual studio 2019
查看>>
asp.net core 学习二
查看>>
asp.net core NLog 配置
查看>>
知识点-Concul
查看>>
Ocelot网关+Consul服务注册发现+Core WebApi+gRPC+IdentityServer4+MongoDB、Redis、RabbitMQ
查看>>
asp.net core Ocelot
查看>>
C#中使用TransactionScope类(分布式事务)
查看>>
几种开发方式
查看>>
Microsoft SQL Server 2019 安装服务没有及时响应启动或控制请求。
查看>>
#if DEBUG #endif
查看>>
sql server decimal
查看>>
SQL Server中Id自增列的最大Id是多少
查看>>
AdminLTE
查看>>
asp.net core Authorization
查看>>
sqlserver dateadd&datediff使用
查看>>
WCF (413) Request Entity Too Large 需要配置上传文件大小
查看>>
Endpoint.Binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport)
查看>>
SonarQube
查看>>
Dapper.Contrib
查看>>
asp.ent core swagger
查看>>