微服务和模块化

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介:

在文中,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(转载)

相关文章
|
Kubernetes Cloud Native 开发者
Dapr和Rainbond集成,实现云原生BaaS和模块化微服务开发
Dapr 是一个开源的分布式应用运行时,帮助开发者构建松耦合的分布式应用程序,具有良好的可扩展性和可维护性。Rainbond 是一款企业级的云原生应用管理平台,提供了丰富的功能和工具,方便开发者管理和部署应用。
Dapr和Rainbond集成,实现云原生BaaS和模块化微服务开发
|
微服务
SpringCloud - 微服务之多模块化(二)
SpringCloud - 微服务之多模块化(二)
245 0
SpringCloud - 微服务之多模块化(二)
|
微服务
SpringCloud - 微服务之多模块化(一)
SpringCloud - 微服务之多模块化(一)
674 0
SpringCloud - 微服务之多模块化(一)
|
微服务
SpringCloud - 微服务之多模块化(三)
SpringCloud - 微服务之多模块化(三)
128 0
|
2月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
2月前
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
|
3月前
|
Kubernetes Cloud Native Docker
云原生之旅:从容器到微服务的架构演变
【8月更文挑战第29天】在数字化时代的浪潮下,云原生技术以其灵活性、可扩展性和弹性管理成为企业数字化转型的关键。本文将通过浅显易懂的语言和生动的比喻,带领读者了解云原生的基本概念,探索容器化技术的奥秘,并深入微服务架构的世界。我们将一起见证代码如何转化为现实中的服务,实现快速迭代和高效部署。无论你是初学者还是有经验的开发者,这篇文章都会为你打开一扇通往云原生世界的大门。
|
3月前
|
负载均衡 应用服务中间件 持续交付
微服务架构下的Web服务器部署
【8月更文第28天】随着互联网应用的不断发展,传统的单体应用架构逐渐显露出其局限性,特别是在可扩展性和维护性方面。为了解决这些问题,微服务架构应运而生。微服务架构通过将应用程序分解成一系列小型、独立的服务来提高系统的灵活性和可维护性。本文将探讨如何在微服务架构中有效部署和管理Web服务器实例,并提供一些实际的代码示例。
97 0
|
22天前
|
Kubernetes 安全 微服务
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
42 8
|
26天前
|
消息中间件 负载均衡 Cloud Native
云原生之旅:从容器到微服务的架构演变
在数字化转型的风潮中,云原生技术以其灵活性、可扩展性和弹性而备受青睐。本文将通过一个虚拟的故事,讲述一个企业如何逐步拥抱云原生,实现从传统架构向容器化和微服务架构的转变,以及这一过程中遇到的挑战和解决方案。我们将以浅显易懂的方式,探讨云原生的核心概念,并通过实际代码示例,展示如何在云平台上部署和管理微服务。