微服务架构会和分布式Monolith高度重合吗?

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介:

对于网络服务来说,首先,前提条件就是要有一个由100+共享库组成的企业级平台,才能确保有能力来运行网络服务,还能够让有权限的网络客户共同讨论构建更强大的微服务(Microservices)。Ben Christensen在最近举办的Microservices Practitioner Summit峰会上分享构建分布式系统经验和微服务趋势的时候如此解释网络服务的要点,尤其是在当前这种对二进制依赖比较强烈的系统正在翻倍增长的情况下,更要搞懂微服务是什么!


image

不妨在这里简单介绍一下Monolith!网上对微服务进行介绍的文章常常以Monolith作为开头,这里也不例外。原因是,知道了Monolith的不便之后才能更容易地理解微服务架构模式所具有的各种优点。

我们所开发的服务应该都是什么样子呢?通常情况下,这个服务所对应的代码由多个项目所组成,各个项目会根据自身所提供功能的不同具有一个明确的边界。在编译时,这些项目将被打包成为一个个JAR包,并最终合并在一起形成一个WAR包。接下来,我们需要将该WAR包上传到Web容器中进行解压,并重新启动服务器。在执行完这一系列操作之后,我们对服务的编译及部署就已经完成了。

由于按照Monolith组织的代码来运行的话,将只产生一个包含了所有功能的WAR包,因此在对服务的容量进行扩展的时候,我们只能选择重复地部署这些WAR包来扩展服务能力,而不是仅仅扩展出现系统瓶颈的组成。

image

但是这种扩展方式极大地浪费了资源。比如(上图):在一个服务中,某个组成的负载已经达到了90%,也就是到了不得不对服务能力进行扩容的时候了。而同一服务的其它三个组成的负载还没有到其处理能力的20%。由于Monolith服务中的各个组成是打包在同一个WAR包中的,因此通过添加一个额外的服务实例虽然可以将需要扩容的组成负载降低到了45%,但是也使得其它各组成的利用率更为低下。可以说,所有的不便都是由于Monolith服务中一个WAR包包含了该服务的所有功能所导致的。而解决该问题的方法就是微服务架构模式。

言归正传,Christensen或许对一些人来说并不陌生,他是Facebook的软件工程师。共享库是运行网络服务必不可少的重要部分,这两者结合起来就被称之为“平台”。比较常见通用的类库包含Spring和Guava,两者通常被用在路由和日志里面。所以说,最后这一系统还是得依靠那100多个类库才能把微服务运行起来。如果一个服务不能和系统进行互动的话,只能说明所有的类库都是可用的,Christensen将这种现象称之为分布式的Monolith。基本上,你在推广所使用的分布式系统的时候,会丢掉很多关于微服务架构的有价值的东西,这些有价值的东西包括“多语言编程”,用Christensen自己的话来说就是,这会让网络服务加大错失接受不同技术、组织结构以及技术解藕的可能性,这样也会阻碍团队在技术层面上的改进升级。

Don’t Repeat Yourself的字母缩写DRY对很多人来说都不陌生,尤其是对开发者。在共享代码的业务逻辑中,孤立的去部署变化条件正在被摒弃,因为这种做法会直接影响服务执行代码的效果。Christensen强调共享代码在服务边界里面是相当完美的,可是一旦泄漏的话,就会有潜在的耦合可能性。Sam Newman在他的新书《Building Microservices》里提到:

服务之间太多的耦合所带来的弊端远超多简简单单复制代码所带来的问题还要严重很多倍。

Christensen认为可替换的方案就是采用契约和协议,服务应该隐藏所有的实现细节,而只将数据契约和网络协议暴露出来。在不依赖服务实现的前提下,用户能够使用任何技术和编程语言,并以自己的速度来发展,这才是网络该做的事情。他指出,虽然在如日志记录,分布式跟踪,路由等领域没有强制的标准化需求,但还是应该启用独立的类库,这样消费者才有权选择是否使用这些网络服务。

Christensen认为,经常性犯这样低级的错误是很容易的,因为我们都知道如何使用使用共享类库,我们也常常在短期内进行优化来达到更高的产出,问题也就是在这个时候产生的。他还指出,虽然推迟解藕的成本较高,可是解决方案也是有的,动动脑经努力在刚开始的时候就把合适的工具放在合适的地方,这样才能物尽所能发挥最大效果。

在最后的问答过程中他认为,使用一个大的框架无可厚非,只要它被当作内部一个独立的服务使用就行,但如果整个系统的架构不采用的话就算了,因为这会导致一个长期的耦合。

微架构或者甚至SOA架构真正发挥所长的地方在于,根据彼此独立部署的逻辑服务,这些逻辑服务可以独立于其他服务进行扩展,而且能够实现独立的故障切换。

红帽公司中间件部门工程副总裁Mark Little博士说:“我在微服务方面担心的问题之一就是,你有一个整体式系统(monolith),假设你开始把它分解成多个服务,可是分解时很随意,到头来就会分解得过细,最后会有10个、100个甚至1000个微服务。”

“但是这些微服务又彼此高度依赖,以至于如果某一个服务出现故障,其余服务很有可能也会出现故障。这种情况下,你一无所获。你有999个服务就在那里干等着另一个服务恢复正常运行。”

最后,Little认为,那些开始使用微服务的人应该找出未能实现其功能的软件,而不是就因为使用年限而把那些旧软件挑出来。

本文转自d1net(转载)

相关文章
|
11天前
|
API 数据库 开发者
构建高效可靠的微服务架构:后端开发的新范式
【4月更文挑战第8天】 随着现代软件开发的复杂性日益增加,传统的单体应用架构面临着可扩展性、维护性和敏捷性的挑战。为了解决这些问题,微服务架构应运而生,并迅速成为后端开发领域的一股清流。本文将深入探讨微服务架构的设计原则、实施策略及其带来的优势与挑战,为后端开发者提供一种全新视角,以实现更加灵活、高效和稳定的系统构建。
18 0
|
9天前
|
Kubernetes 安全 Java
构建高效微服务架构:从理论到实践
【4月更文挑战第9天】 在当今快速迭代与竞争激烈的软件市场中,微服务架构以其灵活性、可扩展性及容错性,成为众多企业转型的首选。本文将深入探讨如何从零开始构建一个高效的微服务系统,覆盖从概念理解、设计原则、技术选型到部署维护的各个阶段。通过实际案例分析与最佳实践分享,旨在为后端工程师提供一套全面的微服务构建指南,帮助读者在面对复杂系统设计时能够做出明智的决策,并提升系统的可靠性与维护效率。
|
1天前
|
机器学习/深度学习 运维 Prometheus
探索微服务架构下的系统监控策略
【4月更文挑战第18天】在当今快速迭代和持续部署盛行的软件工程实践中,微服务架构因其灵活性和可扩展性受到企业青睐。然而,随着服务的细粒度拆分和网络通信的增加,传统的监控手段已不再适用。本文将探讨在微服务环境中实施有效系统监控的策略,包括日志聚合、性能指标收集、分布式追踪以及异常检测等关键技术实践,旨在为读者提供构建稳定、可靠且易于维护的微服务系统的参考指南。
6 0
|
2天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【4月更文挑战第17天】Spring Cloud是Java微服务治理的首选框架,整合了Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(熔断器)、Zuul(API网关)和Config Server(配置中心)。通过Eureka实现服务注册与发现,Ribbon提供负载均衡,Hystrix实现熔断保护,Zuul作为API网关,Config Server集中管理配置。理解并运用Spring Cloud进行微服务治理是现代Java开发者的关键技能。
|
3天前
|
监控 JavaScript 安全
构建微服务架构下的API网关
【4月更文挑战第15天】在微服务架构中,API网关扮演着至关重要的角色。它作为系统的唯一入口,不仅负责请求的路由、负载均衡和认证授权,还涉及到监控、日志记录和服务熔断等关键功能。本文将探讨如何构建一个高效且可靠的API网关,涵盖其设计原则、核心组件以及实现策略,旨在为后端开发人员提供一套实用的指导方案。
18 4
|
4天前
|
监控 负载均衡 API
构建高性能微服务架构:后端开发的最佳实践
【4月更文挑战第14天】 在当今快速发展的软件开发领域,微服务架构已成为构建可扩展、灵活且容错的系统的首选方法。本文深入探讨了后端开发人员在设计和维护高性能微服务时需要遵循的一系列最佳实践。我们将从服务划分原则、容器化部署、API网关使用、负载均衡、服务监控与故障恢复等方面展开讨论,并结合实际案例分析如何优化微服务性能及可靠性。通过本文的阅读,读者将获得实施高效微服务架构的实用知识与策略。
|
6天前
|
运维 监控 自动驾驶
构建可扩展的应用程序:Apollo与微服务架构的完美结合
构建可扩展的应用程序:Apollo与微服务架构的完美结合
30 10
|
13天前
|
运维 负载均衡 网络协议
探索微服务架构下的服务发现机制
【4月更文挑战第6天】 随着现代软件工程的发展,微服务架构因其灵活性、可扩展性而日益受到重视。在此架构模式下,服务发现成为了确保系统高可用性和弹性的关键组件。本文将深入探讨微服务环境中服务发现的核心概念、实现方式以及面临的挑战,旨在为开发者提供一套明晰的服务发现指南和实践建议。
|
17天前
|
负载均衡 网络协议 Java
构建高效可扩展的微服务架构:利用Spring Cloud实现服务发现与负载均衡
本文将探讨如何利用Spring Cloud技术实现微服务架构中的服务发现与负载均衡,通过注册中心来管理服务的注册与发现,并通过负载均衡策略实现请求的分发,从而构建高效可扩展的微服务系统。
|
17天前
|
消息中间件 安全 API
构建高效微服务架构:策略与实践
【4月更文挑战第1天】在数字化转型的浪潮中,微服务架构已成为企业追求敏捷、可扩展和灵活部署的重要技术手段。本文将深入探讨如何通过合理的设计原则和先进的技术栈,构建一个高效的微服务系统。我们将剖析微服务设计的核心要点,包括服务的划分、通信机制、数据一致性以及安全性问题,并结合案例分析,展示如何在现实世界中应用这些策略以提升系统的可靠性和性能。