实体服务是一种反模式

实体服务是一种反模式

大家好,又见面了,我是全栈君。

在微服务架构中,最重要的是要保持服务间的隔离。实体服务(Entity Service)是被广泛应用于微服务架构上的一种模式,但其实它是一种反模式,因为它背离了服务隔离的原则。Michael Nygard在他的微服务系列博客中提到了这一点。

\\

Nygard是“Release It!”的作者,他说实体服务被用于解决一个非常常见的问题,在微软的一本关于微服务架构的电子书中和Spring的两个教程中均用到了这种模式。

\\

在Nygard看来,反模式只会让事情变得更糟。为了说明实体服务是一种反模式,他使用一个大型的遗留单体作为例子。这个应用程序有多个实例,每个实例都包含了所有特性:

\\

82000b2ddadd942dc6bf7da4c4814170.png

\\

根据Spring的教程,使用微服务架构对这个应用程序进行重构,将特性分解到单独的服务中。但Nygard说,大部分特性仍然需要多个实体,这样就会在多个实体之间形成依赖。比如,计算购物车的价钱需要所有服务的介入:

\\

9d73e770fdc92059a54a634676f15729.png

\\

Nygard认为,这些依赖会造成耦合,从而影响可用性、性能和容量。他还强调说,这些依赖导致语义上的耦合,一个服务的变更会波及到其他服务。在最糟糕的情况下,这样会导致一个服务需要与不同版本的服务打交道。

\\

Nygard总结了在微服务架构中使用实体服务将会产生的结果:

\\

  • 团队仍然可以按照他们的节奏发布服务。\\\t
  • 语义上的耦合导致了跨团队的协商。\\\t
  • 大量请求需要调用实体服务,增加了流量负载。\\\t
  • 整体的可用性取决于更多的服务。\

基于以上几点,Nygard认为实体服务是一种反模式。

\\

来自Fourth.com的首席架构师Ben Morris在另一篇博文中引用了Nygard的文章,他说,在微服务架构中使用实体服务比单体架构还要糟糕。Morris认为,微服务的优势之一就是它的自治性,但细粒度的服务越多,它们之间的耦合就越大,从而降低了自治性。他强调说,流程的变更会变得很困难,因为困难涉及到大量的服务,而如果服务是由不同的开发团队进行维护的,那么变更会变得更加困难。使用大量小型耦合服务的另一个风险在于,一个服务发生故障会产生级联效应,影响到更多的服务。

\\

Nygard的博文引发了长时间的讨论。微软那本电子书的作者说,他们在书中已经针对使用HTTP调用来耦合微服务这样的做法提供了警告。他也强调,正确使用领域模型可以提升微服务的自治性。

\\

在Nygard后续的博文中,他将会介绍实体服务的替代方案。

\\

查看英文原文Entity Services is an Antipattern

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107787.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 钓鱼诈骗网站哪里举报_如何识别诈骗

    钓鱼诈骗网站哪里举报_如何识别诈骗目录:一、起因二、识别方法——看域名三、如何举报一、起因事情的起因是这样的,今天收到个群邮件,里面有个所谓的邀请函,长下面这样:没有内容,只有一个附件,是一个HTML文件,俗称网页。其实这种的一看就是钓鱼或者诈骗网站,不过出于好奇,我还是想把它下下来看一下。出于安全考虑,首先看一下源码,源码如下:<divstyle="LINE-HEIGHT:-9999px;DISPLA…

  • latex公式换行后保证括弧大小相同

    latex公式换行后保证括弧大小相同latex公式换行方法一:\left\{xxxxx\right.\left.xxxxx\right\}此方法可能导致上下括号大小不同为解决此问题,需要自定义括号大小,自带的大小控制符有\big,\Big,\bigg,\Bigg\big\{xxxxxxxxx\big\}这样人为定义了同样大小的括弧,根据需要调整括弧控制符即可…

  • 冯诺依曼结构的基本原理_冯诺依曼机工作原理

    冯诺依曼结构的基本原理_冯诺依曼机工作原理2.冯诺依曼计算机的工作原理*存储系统构建与快速访问存储程序:将程序存放在计算机的存储器中*指令系统、控制器设计等程序控制:按指令地址访问存储器并取出指令,经译码依次产生指令执行所需的控制信号

  • Java stream 求和_JAVA求和

    Java stream 求和_JAVA求和BigDecimal:BigDecimalbb=list.stream().map(Plan::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add);int、double、long:doublemax=list.stream().mapToDouble(User::getHeight).sum();…

  • HDU 1257 最少拦截系统

    HDU 1257 最少拦截系统

  • myeclipse2017安装svn插件_eclipse连接svn

    myeclipse2017安装svn插件_eclipse连接svn采用在bundles.info文件写入配置信息的方式安装插件。具体步骤如下: 点击下载: MyEclipse_9_SVN_plugins_site-1.6.18.zip1)首先找到 bundles.inf 文件,在myeclipses安装目录下的     MyEclipse9\configuration\org.eclipse.equinox.simpl

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号