GTLC全球技术领导力峰会·上海站,首批讲师正式上线! 了解详情
写点什么

实体服务增加了系统复杂性

2018 年 7 月 15 日

独立软件顾问 Tareq Abedrabbo 认为,实体服务是一种微服务反模式。主要是因为实体服务形成了浅模块,接口和功能之间的关系比较复杂。

实体服务是在定义了系统实体(或名词)之后才开始建模的。例如,帐户服务、订单服务和客户服务。通常,它们具有 CRUD 风格的接口,用于操作这些实体。

因为采用了这种 CRUD 的方法,实体服务往往不包含任何有意义的业务功能。相反,它们是浅模块,并不真正提供任何复杂或有用的抽象。因此,为了实现功能需求,最终会在这些服务之间引入耦合:

从概念上看,实体服务是小型的“浅”服务。除了操作或暴露内部状态之外,它们所作的事情很少。因此,通常需要将它们组合起来使用,因此从这个意义上讲,它们并非真正解耦或独立的。

当复杂的查询需要访问多个数据源时,它们不是实体服务,并且通常会作为单独的服务或视图。

良好的抽象最小化或隐藏不必要的细节,从而简化了我们对系统的思考方式。相比实体服务给我们带来的复杂性,它们的价值微不足道。

Abedrabbo 说,这些浅实体服务最终将形成一个高度耦合的组件集群。这会导致运营负担,因为他们必须部署、扩展和监控更多的组件。这种高度耦合也可能导致具有挑战性的发布流程,为了交付一个单独的功能,不得不部署大量的微服务。

它还会造成单点故障,服务之间相互依赖,如果其中有一个发生故障,可能会导致整个系统崩溃。

Abedrabbo 还解释说,实体服务带来了概念上的复杂性,因为我们无法立即得知它们是如何组合在一起的。服务组合可以发生在系统中的任何地方,并且通常不是很直观。

这种模式还很容易导致发生突破性变更:

更巧妙的是,实体服务和浅服务通常不会在它们公开的接口和它们实现的功能之间提供有意义的中间层。因此,客户端不知不觉地与这些服务的实现细节相耦合,一直到数据库。在这种情况下,由于接口和实现之间缺少中间层,服务实现者很难在不破坏所有内容的情况下修改或优化系统。

Abedrabbo 总结说,没有一种完美的方法可以将系统分解为微服务,不过他建议了一些最佳实践。包括基于业务需求驱动的设计、有效地隐藏信息,以及避免在微服务之间共享上下文。在进行分解时还应该避免创建单点故障,允许系统的各个部分独立扩展,并通过将其保持在单个微服务边界内来轻松实现新功能。

查看英文原文 Entity Services Increase Complexity

2018 年 7 月 15 日 12:58462
用户头像

发布了 731 篇内容, 共 368.9 次阅读, 收获喜欢 1861 次。

关注

评论

发布
暂无评论
发现更多内容

读书时,如何提炼文章架构形成思维导图

dd多了个多

读书笔记 读书感悟

《深度工作》学习笔记(4)

石云升

学习 读书笔记 习惯 专注 深度工作

架构训练营第九周作业

张锐

秒杀系统的挑战和应对方案

2流程序员

LeetCode题解:189. 旋转数组,3次翻转,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

湾区金科沙龙,华青融天技术总监吴伟平详解旁路式应用性能监控

DT极客

一位区块链产品经理讲述“区块链”的通知 重点方向包括区块链安全

CECBC区块链专委会

物联网 区块链技术 联盟链

企业BI智能大屏,除了页面炫酷,还能带来什么?

力软.net/java开发平台

企业信息化 BI 数据可视化

1.8w字 | 初中级前端 JavaScript 自测清单 - 2

pingan8787

Java 前端 web前端

第九周作业

andy

极客大学

应用开发基础知识-文件系统

superman

文件系统

Kafka集群缩容实战

大数据学徒

大数据 kafka 运维 Big Data

微服务架构下的核心话题 (一):微服务架构下各类项目的顺势崛起

xcbeyond

架构 微服务

总结

chenzt

大厂的人才衡量标准

池建强

人才标准

我是如何写读书笔记的

dd多了个多

读书笔记

前端面试vue部分(1)——谈谈你对MVVM的理解

dd多了个多

Vue 前端 Web 前端面试

前端面试 vue 部分 (2)——Vue是如何实现双向绑定的

dd多了个多

Vue Web 前端开发 前端面试

消息队列面试热点一锅端

yes的练级攻略

kafka RocketMQ 面试题 消息队列

起伏激荡的以太网,抱上这条大腿才能乘风破浪

脑极体

架构师训练营第九章作业

叮叮董董

Java 垃圾回收

dongge

汇丰坠落:世间已无「日不落」

钛禾产业观察

汇丰 财经

作业1

chenzt

读书,区分一二三四手知识

dd多了个多

读书笔记

JVM 垃圾回收原理

周冬辉

架构师训练营第9周

大丁💸💵💴💶🚀🐟

第九周总结

andy

什么是零代码?零代码开发可以带来的好处

代码制造者

可视化 零代码 编程效率

百度安全研究院:区块链智能合约介绍

百度安全

比特币 区块链 智能合约 以太坊

垃圾回收

Mr.Monkey

DNSPod与开源应用专场

DNSPod与开源应用专场

实体服务增加了系统复杂性-InfoQ