软件行业走了很长一段路,在整个过程中,软件体系结构也已经发展了很多。经历了1层(单节点),2层(客户端/服务器),3层和分布式,我们在此过程中看到了一些不同的软件架构模式。
微服务面临的挑战
大多数软件公司,正从单体架构(Monolithic)过渡到微服务架构(Microservices),而微服务架构(Microservices)也正在逐步接管软件行业。单体架构虽然有很多好处,但在满足现代软件开发需求时也有很多缺点。
微服务架构使我们能够更频繁,更独立地部署应用程序,并可靠地满足现代软件应用程序开发要求。
将单体应用分解为微服务应用
微服务架构几乎解决了单体架构的所有缺点。微服务提供了故障隔离,满足应用更小,更快的部署,具备应用的可伸缩性,使得不同服务可以采用不同的开发技术,提高了开发效率,满足了以业务为中心的需求。
尽管微服务架构相对于其他架构具有许多优势,但它也面临着一系列挑战。在微服务体系结构中,它必须处理与设计分布式系统时遇到的问题。
微服务架构背后的思想是,我们将拥有多个独立的较小服务集,每个服务提供单独的业务功能,而不是拥有一个大型的单个代码库。通过这种方法,现代软件应用程序将需要几十个、甚至数百个单独服务的协同工作。
通过微服务架构,引入了网络依赖,并引发了可靠性问题。网络可靠性,延迟,带宽和网络安全性,是我们必须处理的一些与网络相关的挑战。
在服务之间实现通信也将是一项艰巨的任务。随着服务数量的增加,我们必须处理它们之间的交互。除了服务之间的通信外,我们还必须处理整个系统运行状况的监视,容错,日志记录和遥测功能,处理多点故障等等。使用微服务架构,由于我们必须处理许多服务间通信和基础网络,因此调试问题可能会更加棘手。
随着基于第三方类库和组件的引入,克服了与微服务体系结构有关的上述挑战,每个服务也都具备了这些通用功能(监视,运行状况检查,日志记录,遥测等),使得服务到服务的通信顺畅且可靠。但是,将这些功能整合到每一项服务中,这在开发和维护上都需要付出很多努力。
开发人员使用第三方类库和组件(例如Eureka,Ribbon,Hystrix)来提供这些通用功能,例如服务发现,负载均衡,断路器,日志记录和度量,遥测等。
结合了业务功能和网络相关功能的微服务
但是,使用第三方库和组件会带来一系列不同的挑战,例如:
- 紧密耦合-这些第三方库/组件的编码和配置与服务中的业务功能紧密相关。现在,应用程序代码是业务功能和这些其他库/组件配置的混合。
- 编码/配置的复杂性增加-使用的第三方库/组件,可能必须使用不同的编程和配置语言集
- 可维护性差—每当这些外部库/组件升级时,我们都必须更新应用程序代码,对其进行验证并部署这些更改
- 调试/故障排除复杂度增加-现在服务是与第三方库/组件的混合,如果出现应用故障,开发人员必须花费大量时间来了解代码并排查问题
没有服务网格体系结构的微服务
尽管微服务架构提供了很多好处,但是开发人员在面对上述挑战时也面临很多困难。这些挑战促使开发人员找到了更好的替代方案--Service Mesh(服务网格)。
微服务的解决方案
服务网格可以定义为处理微服务架构中服务间通信的专用基础结构层,从而降低了上述挑战带来的复杂性。Service Mesh使我们能够成功,高效地运行分布式微服务架构,并提供保护,连接和监视微服务的统一方法。
服务网格背后的想法非常简单。不要在服务代码中增加其他与基础架构/网络相关的细节,而让它仅关注其必须执行的业务功能。
通常,Service Mesh提供以下功能:
- 负载均衡
- 服务发现
- 健康检查
- 认证方式
- 流量管理和路由
- 断路器和故障转移
- 安全管理
- 指标收集和监控
- 故障注入
有了Service Mesh,我们不必使用任何第三方库/组件,就可以在每个微服务中提供与网络相关的通用功能,例如配置,路由,遥测,记录,断路等。Service Mesh将把那些与网络相关的通用功能抽象/外部化为一个单独的组件/层,称为“服务代理”。
服务网格将应用程序中使用第三方库/组件的复杂性解耦。
现在,开发人员可以根据与应用程序或网络相关的问题轻松排查任何问题的根本原因,从而使他们的生活变得异常便捷。借助Service Mesh架构,业务功能和与网络相关的功能之间的职责分工清晰。
具有服务代理(Sidecar)的微服务
通常,Sidecar模式用于实现服务网格体系结构。在这种模式下,我们可以在服务旁边部署服务网格代理。服务代理的Sidecar将复杂性从应用程序中抽象出来,并处理服务发现,流量管理,负载均衡,断路器等功能。
具有服务网格架构的基于微服务的解决方案
总而言之,采用基于服务网格架构的微服务,开发人员:
- 无需担心使用任何第三方库/组件来提供与网络相关的功能
- 所有服务到服务的通信将通过称为“服务代理”的组件/层,因此我们不必在每个服务中都实现它
- 将业务功能与与网络相关的功能分离
- 仅关注业务功能,而无需担心与网络相关的基础功能,让服务网格为你处理
- 无需担心服务网格的开发,因为服务网格基于开放标准,例如HTTP,TCP,RPC,gRPC等。
结论
微服务架构由于其优于其他架构模式的优势,正在积极地控制软件工程行业。随着越来越多的组织从单体架构过渡到微服务架构,作为开发人员,我们需要了解微服务架构中的挑战并找到解决方法。Service Mesh架构解决了微服务架构引入遇到的一些挑战。
现在我们知道了服务网格在微服务架构中的作用和重要性,下面让我们看一下可以在下一次开发活动中使用的服务网格产品/平台。 Linkerd, Envoy Proxy, Istio, Consul, Kuma和 Open Service Mesh(OSM)是我们可以使用的一些领先的开源的Service Mesh平台。它们中的大多数经过了大量测试,可以投入生产使用。
译文链接:https://dzone.com/articles/the-service-mesh-in-the-microservices-world