服务网格(Service Mesh)及其工具选项概述

原文作者:Twain Taylor

原文地址:https://dzone.com/articles/an-overview-of-the-service-mesh-and-its-tooling-op


为了使应用程序最佳运行,应用程序堆栈的每个部分都需要进行优化和现代化。容器和容器编排工具等技术已经为堆栈的基础结构层带来了这种现代化。随着应用程序以更分布式的方式构建和部署,代码的部署方式正在发生变化。微服务体系结构引入了这种分散的软件交付方法。

但是,在基础设施和代码之间,需要无缝运行的层是网络层。在现代集装箱化应用中,很多关注点集中在基础设施,代码的打包和部署上,但传统上没有那么关注网络。

随着服务网格的出现,这一点已经发生了变化。

什么是服务网格?

以前的网络通信很简单。网络将消息从客户端传送到服务器,然后传回。您可以很容易地跟踪路由消息、跨网络的几个接触点,以及容易调试延迟问题和错误。它只需要一个像Nagios那样的监控工具。

在一个容器化的应用程序中,每个应用程序都由松散耦合的微服务组成。每个微服务由多个容器组成,或者在Kubernetes中由多个容器组成。现在每个请求都涉及多个服务,而且更糟糕的是,每个服务都是动态的。在系统更改和部署时,容器将自动创建和销毁。

但是,这些服务之间的通信需要无缝地进行,而这就是服务网格的工作。

服务网格是处理微服务之间的东西通信的服务之间的通信层。服务网格在微服务中很重要的原因是,分布式应用之间的通信比使用单一组件要复杂得多。

尽管它很复杂,但微服务体系结构在性能、对每个服务的控制、系统对变化的适应能力以及整个网络的可见性方面都具有优势。这些优点使得忍受更复杂系统的管理开销是值得的。

服务网格使微服务管理网络变得更容易。

服务网格的作用

服务网格的最基本的职责是处理核心的网络任务,比如负载平衡和服务发现。除此之外,服务网格还引入了一些高级策略,如线路中断和故障诱导,这有助于提供云本机应用程序所需的网络性能。

在一个复杂的微服务系统中,失败很常见,但重要的是网络能够重新路由,重试,主动失败并报告这些失败。

服务网格中的负载平衡

负载均衡在云本机应用程序中是动态的,因为所有活动部件都可以具有不同的性能。服务网格中的负载均衡器在发送请求之前需要考虑单个实例的健康状况。它可以阻止或绕开不健康实例的流量,并帮助避免紧急情况并提供更可靠的服务。

负载均衡器可以积极地轮询服务发现部分,检查健康的实例,也可以被动地响应失败的请求,并仅根据性能切断对实例的通信量。

除此之外,服务网格中的负载均衡使用算法来决定如何通过网络路由流量。过去,路由很简单,使用循环法或随机路由等方法。而现在,通过服务网格,负载平衡算法现在要考虑延迟和后端实例的可变负载。

服务网格中的服务发现

服务发现是在创建新实例时识别新实例并保存从网络中删除的实例记录的过程。此记录对于负载均衡的功能至关重要,因为请求仅由健康可用的后端实例处理。。

在动态微服务应用程序中,服务发现应该自动发生。这是通过让负责启动和停止系统的工具报告每个事件来完成的。在Kubernetes中,ReplicationController负责实例生命周期。

Sidecar代理

传统上,负载均衡器位于客户机和服务器之间,但现在,高级服务网格将sidecar代理附加到客户端库。这确保每个客户机都能平等地访问负载均衡器。此外,它避免了单点故障,这是传统负载均衡器的最大缺点。

Sidecar代理已经成为实现分布式系统的服务网格的首选方式。

监视服务网格

可见性是成功实现云本机应用程序联网的关键,而服务网格具有多种启用监控的方式。它提供了网络性能指标的组合,如延迟,带宽和正常运行时间监控。它对栈的每一层(主机、容器、容器和集群)都这样做,并为帮助进行故障排除的事件提供详细的日志记录。

分布式跟踪是可见性的关键因素; 它会在每个请求通过网络时为每个请求提供一个ID,并显示每个请求在通过网络时所经历的路径。使用此功能,您可以知道网络的哪些部分或哪些实例较慢或无响应,并了解需要修复的内容。

随着微服务应用程序的复杂性增加,在实例上重现错误并不容易。您需要强大的监视工具来理解请求的路径并识别所有的问题区域(将有不止一个)。

服务网格工具

今天最重要的两种网格工具是LinkerdIstio。Linkerd是第一个采用服务网格方式进行网络连接的工具,并在许多生产工作负载中得到广泛采用。虽然在一年后发布了Istio,但是现在已经添加了一个额外的管理层来分配网络。

Istio将其他服务网格工具视为数据平面,将其自身视为数据平面和控制平面的组合。Istio使用另一种与Linkerd相似的流行工具Envoy作为其数据平面。不过,这些工具之间有很多兼容性,因为Istio也可以使用Linkerd作为其数据平面。Istio带来的是高级的基于策略的管理和抽象层,它为网络带来了更强大的分布式方法。

采取不同的途径,Buoyant 最近宣布了专门研究Kubernetes的Conduit。它提供了一个轻量级,更简单的替代更多功能的Linkerd。它为功能更丰富的Linkerd提供了一个轻量级的、更简单的替代方案。理想情况下,这是为那些在Kubernetes工作的组织提供的,并且想要一个快速的方法来开始,并在之后轻松的管理。

安全性是网络的关键,利用基于策略的安全性的工具之一是Project Calico。Calico不像monoliths那样依赖于整个应用程序的外围防火墙,而是帮助在微服务应用程序中围绕每个服务创建微防火墙。然后,它为您提供细粒度的管理控制,以执行将每个服务与其他服务隔离的安全策略。这样,即使一个服务被破坏了,其他的服务仍然完好无损。

当我们从monoliths迁移到微服务时,如何管理应用程序网络将是成功的关键。与传统的网络模型相比,服务网格是一种更好的选择,理解它应该是现代云本机应用程序的基础。。

本文的版权归 阿小庆 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4868
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3145
来自专栏杨龙飞前端

scrollto 到指定位置

2514
来自专栏魂祭心

原 canvas绘制clock

4084
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

2968
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2577
来自专栏Golang语言社区

【Golang语言社区】GO1.9 map并发安全测试

var m sync.Map //全局 func maintest() { // 第一个 YongHuomap := make(map[st...

4708
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2536
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4025
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2645

扫码关注云+社区