【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

微服务和模块化

  • 2017-06-01
  • 本文字数:1490 字

    阅读完需:约 5 分钟

正如近一年以来在“微服务专题”中所讨论的,有多种原因促使开发人员选择微服务,也存在多个理由让开发人员避免使用微服务。最近, Gene Hughson 针对作家 Simon Brown 所提出的一个观点撰写了一篇文章,指出模块化的改进可能并非一个选择微服务的原因

在文中,Hughson 提出:

我相信,如果无法正确地构建单体应用(Monolith),那么这时试图强制采用分布式架构进行模块化,这实际上可能会导致损害。

事实上,对此问题 InfoQ 曾在 2014 年进行过一次讨论,其中 Brown 和 Hughson 探讨了微服务以及“大杂烩”(Big Ball of Mud)这一比喻。当时 Brown 给出了这样的说法:

如果你正在构建的单体应用系统已成了一个大杂烩,或许你应该思考一下,你是否对软件架构给予了足够的关注?你是否真正地理解了什么是软件中的核心结构抽象?软件的接口和职责是否清晰?如果你没有做到这些,那么为什么认为如果能迁移到微服务架构就会有所裨益?当然,对服务做物理分隔会强制性地规避一些捷径。但是在单体应用中,也可以实现同样的组件间分隔。

Hughson 将使用微服务做构建比作为冰山,一眼看上去所显现出来的部分,要远小于位于水下的部分:

如果一个开发团队不能或是不愿意去遵循设计的指导原则(例如,模块化需求),这时额外地添加复杂性可能并非是所需的解决方案。将应用分布化,会使应用更不易于“意外地”纠缠于各种关注中,但并不会杜绝该问题的发生。

Gene 借助于 Brown 的另一篇推文对最后一点做了说明:

Hughson 进而返回到对开发团队不能或是不愿意遵循设计指导原则的评论上,他继续指出:

我的观点是,增加“意外地”破坏模块化的困难度并不会解决前面提及的两组人员所面对的问题,即不能遵循设计指导原则的开发团队,以及不愿意遵循设计指导原则的开发团队。这颇具讽刺意味,那些并没有理解模块化必要性的人,可能无论各种障碍都会在他们的“解决方案”中颇具创造性。同理,对那些不愿意采用模块化的人同样适用。

Hughson 提出,分布式(微服务天生就是分布式的)作为一种实现模块化的手段,并不适用于目标。他认为,关注不应局限于应用架构上,也应同样地适用于应用数据。

一个具有纪律的单体应用团队,可以在单体应用数据架构中维护模块化。而试图共享一个单体应用数据架构的多个独立团队,可能会遇到严重的治理开销问题,也可能会完全地破坏模块化。

Christian Posta 在去年就指出了为什么应用中的数据管理会成为迁移到微服务时的最难部分。 InfoQ 当时就对此进行了报道

要对一个相当复杂的企业领域构建微服务,我们需要找到该领域中不同职责间的界限。在每个界限上创建一个针对该职责设计的、并表示了该职责的领域模型。进而,每个界限的数据模型被同一界限的领域模型所驱动。使用 DDD 就可以发现这些界限,并对每个界限创建一个“受限场景”(bounded context),这样每个场景可转变为一个微服务。

该文章的一条评论指出,这可能会需要一定形式的治理。对此,Hughson 持赞同态度:

消极措施不足以解决问题,无论是结构性的(“让我们将组件分布化,以免人们破坏模块性”)还是过程性的(例如,“要有纪律”)。治理在应用层(在我看来,即应用架构原则)及以上层是完全有必要的,它有助于实现对竞争利益的协调,并监督设计以免在黑暗的小巷中徘徊。请记住,这可能是由于误解、缺乏经验、不符合规范甚至设计不一致而导致的。需要有人监控所发生的情况,以及同样重要的发生原因。

总而言之,在 Hughson 看来,构建需要独立管理、扩展和部署组件的应用时,微服务的确可以发挥自身的作用。理解到这一点是很重要的。但是,也需要很好地理解为什么要选取沿微服务这条路走下去。

查看英文原文 Microservices and Modularity

2017-06-01 19:005924
用户头像

发布了 227 篇内容, 共 71.0 次阅读, 收获喜欢 27 次。

关注

评论

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

ubuntu创建自定义开机服务

百度搜索:蓝易云

Linux ubuntu 运维 云服务器 systemd

最新版VMware Fusion Pro 13 虚拟机 13.5.1激活密钥分享

Rose

VM虚拟机 VM密钥 虚拟机软件 VMware Fusion Pro破解版

一端开发、多端部署,多操作系统”争艳“背景下的开发思路

Speedoooo

混合开发 多端能力服务统一 混合开发框架 Hybird App

JavaScript 的新数组分组方法

伤感汤姆布利柏

科技创新引领零售商品部降本增效的未来

第七在线

已解决org.springframework.dao.ConcurrencyFailureException并发失败异常的正确解决方法,亲测有效!!!

小明Java问道之路

GitHub 斩获 8300 星,小红书爆火开源 InstantID 要开直播了!

小红书技术REDtech

开源 AI AIGC AI写真 instantID

一款高温型霍尔效应传感器

攻城狮Wayne

SPSS 打开提示“服务器登录:本地计算机”的解决办法

Rose

谷歌发布世界模型,能生成可交互虚拟世界;华为发布全球首个 5.5G 智能核心网丨 RTE 开发者日报 Vol.152

声网

低代码开发如何助力企业实现员工赋能

快乐非自愿限量之名

低代码 项目开发 企业赋能

英特尔边缘平台亮相MWC 2024,模块化设计引领行业创新

E科讯

在哥伦布的凯旋港,为全球智能化造一艘云船

脑极体

云计算 AI

HTTP/1.1协议中的响应报文

百度搜索:蓝易云

云计算 Linux 运维 HTTP 运维web

远超 IVF_FLAT、HNSW,ScaNN 索引算法赢在哪?

Zilliz

Milvus scann fastscan

内置AI加速器,第五代英特尔至强打造更可靠性能和更出色能效

E科讯

敏捷开发最佳实践:工具维度实践案例之落地工具提升研发质量

PingCode

敏捷 敏捷开发

ubuntu22安装和部署Kettle8.2

百度搜索:蓝易云

云计算 ubuntu 运维 kettle 云服务器

2023 re:Invent AI 生成产品体验,从 Bedrock 到 Amazon Q

亚马逊云科技 (Amazon Web Services)

生成式人工智能

Tapdata 正式登陆 Google Cloud Marketplace,面向全球用户提供专业的实时数据服务

tapdata

数据转换 数据同步工具

如何使用ETLCloud拉通金蝶云

RestCloud

数据同步 ETL 金蝶云

【架构笔记1】剃刀思维-如无必要,勿增实体

文思源想

软件架构设计 文思架构笔记 设计感悟

什么是数据同步利器DataX,如何使用?

快乐非自愿限量之名

大数据 数据同步

释放创新潜能!英特尔携广泛生态伙伴赋能5G核心网

E科讯

如何通过快速且安全的API基础设施策略为工程师赋能并提升效率,同时避免影子IT

Gingxing

kong API网关 Kong 网关 消息网关 Kong Gateway

这个酸爽的过程,只有我们自己知道

开放签开源电子签章

开源 电子合同 电子签章

思维导图真有效?亲测5款好用的AI思维导图软件!

彭宏豪95

思维导图 在线白板 协同办公 AIGC 效率软件

PHP“牵手”淘宝代采系统,跨境淘宝代买系统

tbapi

淘宝代购系统 淘宝代购集运系统 淘宝代采系统 海外代购系统 跨境外贸系统

深入理解 Java 修饰符与封装:访问权限、行为控制与数据隐藏

小万哥

Java 程序人生 编程语言 软件工程 后端开发

微服务和模块化_DevOps & 平台工程_Mark Little_InfoQ精选文章