微服务和模块化

在文中,Hughson提出:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

本文转自d1net(转载)

时间: 2024-10-11 06:51:46

微服务和模块化的相关文章

[译] 模块化 vs. 微服务

本文讲的是[译] 模块化 vs. 微服务, 原文地址:Modules vs. microservices 原文作者:Sander Mak 译文出自:掘金翻译计划 译者:lsvih 校对者:steinliber,DeadLion 模块化 vs. 微服务 使用模块化系统设计原则来避免微服务的复杂性. 从单体式应用向微服务架构迁移已经是老生常谈的话题了.除了过过嘴瘾,似乎真的动手将单体式应用拆分成微服务也不是什么很困难的事.但是这种做法真的是你们团队的最佳选择吗?维护一个凌乱的单体式应用的确很伤脑筋,

微服务——分解应用以实现可部署性和可扩展性

本文描述了日渐流行的微服务架构模式.微服务背后大的理念是将大型.复杂且历时长久的应用在架构上设计为内聚的服务,这些服务能够随着时间的流逝而演化.微服务这个术语强烈建议服务应该是很小的. 社区中有些人甚至建议构建10-100代码行(LOC)的服务.但是,尽管很小的服务是我们想要的,但这不应该是主要的目标.你应该致力于将系统分解为服务,以解决下面所讨论的开发和部署问题.一些服务可能确实会很微小,但有些可能会非常大. 微服务架构的本质并不新鲜.分布式系统的理念历史非常悠久.微服务架构也很类似于SOA.

微服务(Microservices)—Martin Flower【翻译】【转载】

本文转载自:http://www.cnblogs.com/liuning8023/p/4493156.html ---------------------------------------------------------------------------- 原文是 Martin Flower 于 2014 年 3 月 25 日写的<Microservices>. 本文内容 微服务 微服务风格的特性 组件化(Componentization )与服务(Services) 围绕业务功能的组

DockOne微信分享(九十六):爱油科技基于SpringCloud的微服务实践

本文讲的是DockOne微信分享(九十六):爱油科技基于SpringCloud的微服务实践[编者的话]本次分享主要介绍了爱油科技基于Docker和Spring Cloud将整体业务微服务化的一些实践经验,主要包括: 微服务架构的分层和框架选型 服务发现和配置管理 服务集成和服务质量保证 基于领域驱动设计 实施DevOps 从单体应用到微服务 单体应用 对于单体应用来说,优点很多,例如: 小而美,结构简单易于开发实现 部署门槛低,单个Jar包或者网站打包即可部署 可快速实现多实例部署 然而随着业务

Java微服务开发指南 -- 使用WildFly Swarm构建微服务

使用WildFly Swarm构建微服务     我们最后介绍一个新的微服务框架,它构建在支持分层且可靠的JavaEE技术栈上(使用JBoss WildFly 应用服务器),WildFly Swarm是一个完全兼容WildFly应用服务器,它基于可重用的组件,这里称为元件(fractions)来组成微服务应用.组装这些元件和你使用maven或者gradle去添加依赖一样简单,你只需要声明元件,WildFly Swarm将会帮助你完成后续的工作.     应用服务器和JavaEE在企业级Java应

微服务技术栈选型,看了这个别的可以不用看了

前言 大家好,我是敖小剑,今天给大家分享的主题是"利用开源社区打造微服务生态体系". 主要内容如下: 内容分为三个大的部分: 1. 微服务的核心技术 2. 目前可选的开源微服务框架 3. 为微服务提供支撑的基础设施 需要说明的是,由于时间有限,而分享的内容数量太多,因此: 1. 内容都只是罗列,不展开具体介绍 2. 个人知识面有限,列举过程中范围覆盖不足有所遗漏是必然的 3. 部分场景我会给出一些个人建议,但是请注意这些都是我的一家之言,仅供参考 下面列出的是今天将会介绍的内容,数量非

浅谈服务治理与微服务

近期都在谈微服务,本人也正在做相关的工作,应领导要求做了一个微服务的分享,本篇文章主要来源于分享的PPT,所以有些简单,有问题可以在下面留言,大家 一起讨论. 本篇文章先简单介绍了互联网架构的演变,进而介绍了服务化,最后再介绍微服务,微服务是服务治理的升级也是互联网架构的进一步延伸. 互联网架构演变 一体架构 在计算机软件发展早期,一般桌面软件都是采用这种架构,不管是界面还是业务处理还是数据处理都放到一个包中.这种其实谈不上架构,但也可以说是很好的架构,因为它足够简单. mvc架构 但随着浏览器

DockOne微信分享(六十九):微服务选型之Modern Node.js

本文讲的是DockOne微信分享(六十九):微服务选型之Modern Node.js[编者的话]目前Node.js的发展非常快,大家可能还停留在:Node.js性能很好,Node.js里都是回调,写起来很恶心,Node.js只能做前端工具,Node.js是单线程部署会有问题,以及这样的八卦<uber用go替代Node.js重写了地理位置服务>... 可是真相呢? 在微服务盛行的今天,为什么我们要选用Node.js去构建微服务呢?本次分享将试图从以下2个方面给出答案: 被误解的Node.js:除

微服务:Java EE的掘墓人

在Java问世之初,包括IBM.BEA.Oracle在内的一些巨头公司看到了Java作为一门杰出的Web编程语言可能给他们带来的巨大商机.那么如何通过一门编程语言来赚钱呢?答案就是使用这门语言构建复杂无比的服务器,让那些大公司支付一大笔费用来购买这些服务器.于是紧接着就出现了Java EE规范.JSR规范,以及WebLogic.WebSphere等服务器中间件. 在这些服务器上面部署了大型的程序包,它们运行缓慢,消耗大量的内存.基于这些容器的开发和调试对开发人员来说简直就是噩梦,作为对他们的补偿