速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

微服务和模块化

  • 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:006256
用户头像

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

关注

评论

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

设备管理|锂电材料工厂混合设备的维护与保养

PreMaint

设备管理 新能源行业 锂电材料工厂

NineData核心技术揭秘

NineData

数据库 备份恢复 备份策略 数据源 备份 & 恢复

LiteOS-A内核中的procfs文件系统分析

OpenHarmony开发者

OpenHarmony

AngularJS进阶(三十三)书海拾贝之简介AngularJS中使用factory和service的方法

No Silver Bullet

service AngularJS 12月月更 factory

CTPN+CRNN算法端到端实现文字识别的实战开发

华为云开发者联盟

人工智能 华为云 文字识别 12 月 PK 榜

云边协同下的统一应用管理: 基于 OpenYurt 和 KubeVela 的解决方案

阿里巴巴云原生

阿里云 开源 云原生 KubeVela openyurt

【DBA100人】网联客CEO隋海峰:把握好职业生涯最重要的两个5年

OceanBase 数据库

数据库 oceanbase

IPQ8074 Qualcomm Embedded Board Offers MU-MIMO 802.11ax WiFI 6//industrial wifi6 moudle

wallysSK

IPQ8074 ip8072

百度爱番番基于图技术、流式计算的实时CDP建设实践

NebulaGraph

数据库 flink 流计算 图数据库

软件测试 | 版本控制神器GitHub的基本使用与踩坑

测试人

GitHub 软件测试 自动化测试 测试开发

教你如何进行数仓字符串、二进制、十六进制互转

华为云开发者联盟

数据库 后端 字符串 华为云 12 月 PK 榜

阿里国际站-唤端技术的探索与演进

阿里技术

前端 用户增长

免费试用的云管平台哪里有?可以试用多久?

行云管家

云计算 云管平台 云管理 自动化运维

区块链“入局”证券市场,未来前景有多大?

旺链科技

区块链 产业区块链 证券行业 12 月 PK 榜

Idea居然还有比Navicat、Datagrid工具还好用、还快的插件,效率又可提升一倍了

非喵鱼

Java MySQL redis IDEA 12 月 PK 榜

得物云原生全链路追踪Trace2.0-采集篇

得物技术

架构 云原生 APM Trace OpenTelemetry

PCB制造常用的13种测试方法,你掌握了几种?

华秋PCB

测试 PCB PCB设计

chatGPT辣么火,你却不会注册!

程序员小毕

Java 程序员 程序员人生 后端 摸鱼

KAFKA EAGLE 监控MRS kafka之操作实践

华为云开发者联盟

开发 华为云 12 月 PK 榜

容量测试解决了什么问题?

老张

性能测试 容量测试 容量保障

Linux平台用什么HA软件好?咨询电话多少?

行云管家

高可用 HA软件

模块一 实战营作业

peter

「架构实战营」

ZBC登录iZUMi Finance双挖池APY高达189%,极致通缩的典范

西柚子

2 小时开发《点球射门游戏》,动画演示思路(下),代码已开源

非喵鱼

Java 开源 游戏 12 月 PK 榜 世界杯足球游戏

MYSQL-INNODB索引构成详解

京东科技开发者

MySQL innodb 索引 B+树 InnoDB存储引擎

大幅优化《英雄联盟》游戏体验,英特尔显卡驱动更新

科技之家

借用FinClip把小程序游戏运行到自有App中

Onegun

小游戏 小游戏开发 微信小游戏

软硬协同:基于倚天的视频云编码性能升级

阿里云CloudImagine

云计算 视频云

AngularJS进阶(三十二)书海拾贝之特殊的ng-src和ng-href

No Silver Bullet

AngularJS 12月月更 启动过程

我把Idea给改了,看看有没有你常用的功能,没有,你告诉我,我给你造了

非喵鱼

Java 开源 IDEA springboot 12 月 PK 榜

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