实体服务是一种反模式

实体服务是一种反模式

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

在微服务架构中,最重要的是要保持服务间的隔离。实体服务(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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Cloneable_c++list容器

    Cloneable_c++list容器Cloneable类开心一笑开心是最重要的…..哥要出国旅游,让三哥帮忙看家,临走前特别交代:家里的藏獒随便逗,别惹鹦鹉。之后,三哥怎么逗藏獒,藏獒都不咬人。三哥心想:藏獒都这样,这鹦鹉也就一破鸟,能把我怎样?遂逗鹦鹉玩。结果,鹦鹉开口说话:咬他!藏獒扑上……三哥,享年27……自我介绍大家好,我叫能复制,英文名字叫“Cloneable”,住java.lang这个家,我这个人怎么说,

    2022年10月14日
    0
  • 图标变成了一张白纸_电脑图标是白纸形式但能打开

    图标变成了一张白纸_电脑图标是白纸形式但能打开大家好,我是波导终结者。WIN10到现在也有些年头了,虽然好的不学学坏的,天天搞强制升级有些烦人,有时候新版本的BUG也比较致命,但是整体的性能,功能和稳定性上还是有飞跃性的提升。其实WIN10自带不少实用工具,而且兼容性和稳定性没得说,很多时候我们可以不必寻找第三方工具,省了很多钱,也提高了不少效率。今天就一起来看看吧。WIN10自带截图工具WIN10自带截图工具,虽然肯定不比专业的截图工具强,…

    2022年10月19日
    0
  • 正版哈希值校验工具_电子证据哈希值校验

    正版哈希值校验工具_电子证据哈希值校验介绍常用的两个:1、Hash1.04特点:小巧方便快速。缺点:需要自己对比校验,不能粘贴哈希值自行校验对错。图片是汉化版的界面,原作者RobinKeir有个自己工具的网站就在软件标题栏的后面:http://keri.net。有兴趣的可以下载英文原版的,网速可能有点慢。2、IHasherv0.2特点:可以自行对比校验对错。缺点:没什么大缺点。看标题栏后面的网址就明白了,是m…

    2022年9月12日
    0
  • awk 字符串替换 gsub

    awk 字符串替换 gsubgsub(r,s)在整个$0中用s替代rgsub(r,s,t)在整个t中用s替代rawk-F”,”‘{str=gsub(/\t*|*$/,””,$3);ret=$1″,”$2″,”$3″,”NR;printret}’去除第三个字段的空格与制表符awk-F”\t”‘{if($3==”吉林”){gsub($3,”吉林省”,$3);pr

    2022年7月15日
    14
  • vue实现文件上传和下载_vue上传文件前端完整实例

    vue实现文件上传和下载_vue上传文件前端完整实例文件上传这里使用elementui组件库的文件上传组件1.手动上传(文件选取后需点击确认上传)action:上传地址auto-upload:是否在选取文件后立即进行上传,默认true手动上传要将其设置为falsebefore-upload:上传文件之前的钩子,参数为上传的文件,上传格式的规定要求可在此钩子函数中写(示例中规定上传格式xlsx或xls)on-success:文件上传成功时的钩子,function(response,file,fileList)ref:注册DOM对象(点

    2022年8月16日
    10
  • Java中一维数组和二维数组初始化 对象数组初始化「建议收藏」

    Java中一维数组和二维数组初始化 对象数组初始化「建议收藏」数组属于引用数据类型,在使用前必须初始化,否则会报NullPointerException(空指针异常:运行时异常)一维数组初始化:动态初始化:(声明并开辟数组)数据类型[]数组名称=new数据类型[长度]int[]data=newint[5]:声明并开辟一个长度为5的数组数组通过下标索引来获取元素,下标默认从0开始。数组下标超出数组长度,数组越界异常(运行时…

    2022年5月25日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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