SAMIR BEHARAgit
本文将解释Service Mesh相关概念,为何云原生应用须要它,以及这项技术被社区热烈拥抱、积极采用的缘由。github
绝不夸张地说,微服务已经席卷了整个软件行业。从Monolith过渡到微服务架构,可让咱们频繁、独立而可靠地部署应用。编程
然而,在微服务架构中,一切都不是绿色的,它必须处理在设计分布式系统时遇到的相同问题。安全
然而,微服务架构不是万能的,在设计分布式系统时会遇到不少有待解决的问题。说到这里,咱们不妨首先回顾一下关于分布式计算的8大谬误——微信
在微服务体系结构中,对于网络的依赖带来了可靠性问题。随着服务数量的增长,咱们必须处理它们之间的交互,监视整个系统的健康情况,处理容错、日志记录,处理多个故障点等等。每一个微服务都须要有这些共同的功能,以便服务通讯是平滑和可靠的。可是,若是你要处理几十上百个微服务,操做难度光是听起来就有些吓人。网络
Service Mesh能够定义为在微服务体系结构中处理服务间通讯的基础结构层,它减小了与微服务体系结构相关的复杂性,并提供了许多治理功能,如 -架构
在微服务架构中,处理服务到服务的通讯是企业IT的一大挑战。大多数时候,咱们须要依赖第三方库或者组件来提供服务发现、负载均衡、断路器、监控等功能。像Netflix这样的公司,他们开发了本身的库,好比Hystrix for Circuit Breaker、Eureka for Service Discovery、Ribbon for Load balanced等,在其组织中获得了普遍的使用。负载均衡
然而,这些组件须要在应用代码中进行配置,并且语言不一样,实现方式策略也会有所不一样。在升级这些外部组件时,咱们须要更新应用、验证并部署全部改动。如此便产生了一个问题,咱们的应用代码编程了业务和这些附加配置混合体。这种紧密耦合增长了整个应用的复杂性——开发人员如今还须要了解这些组件是如何配置的,以便在遇到任何问题时可以排除故障。运维
Service Mesh适时出现,将复杂性从应用中分离了出来,并将其放入服务代理(service proxy)代为处理。这些服务代理提供了如流量控制、断路、服务发现、身份验证、监控、安全性等等功能特性。那么对于应用来讲,只须要关心业务功能的实现便可。分布式
假设在咱们的微服务体系结构中,您有5个服务相互通讯。与其在每一个微服务中构建配置、路由、遥测、日志记录、断路等常见的必要功能,不如将其抽象为一个单独的组件——这里称为“服务代理”(service proxy)。
随着Service Mesh的引入,责任的划分变得清晰,开发人员的生活也更加轻松——若是存在问题,开发人员能够根据应用程序或网络相关的缘由,轻松地肯定根源。
要实现Service Mesh,能够将代理与服务一块儿部署,该模式被称为sidecar。
Sidecars抽象了应用程序的复杂性,处理了诸如服务发现、流量管理、负载平衡、线路中断等功能。
Lyft的Envoy是目前很是流行的云原生应用开源代理。特使在每一个服务旁运行,并以平台无关的方式提供必要的特性。全部到咱们的服务的流量都经过特使代理。
而Istio是一个链接、管理和保护微服务的开放平台。它在Kubernetes社区很是流行,并被普遍采用。
在这一点上,Istio是服务网格的最佳实现之一,它使咱们可以在不深刻了解底层基础设施的状况下部署微服务。
开源PaaS Rainbond在v3.6.0版本中加入了Service Mesh开箱即用的特性,主要特色包括业务代码无入侵、跨语言&跨协议、支持主流微服务架构、经过插件式扩展来实现治理功能等。
Rainbond是一款以应用为中心的开源PaaS,由好雨基于Docker、Kubernetes等容器技术自主研发,可做为公有云或私有云环境下的应用交付平台、DevOps平台、自动化运维平台和行业云平台,或做为企业级的混合云多云管理工具、Kubernetes容器管理工具或Service Mesh微服务架构治理工具。