服务网格(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 条评论
登录 后参与评论

相关文章

来自专栏Java架构沉思录

深入浅出Unix IO模型

在介绍Unix IO模型之前,我们先来说说什么是IO。根据维基百科的定义,IO的指的是输入输出,通常指数据在内部存储器和外部存储器或其他周边设备之间的输入和输出...

1042
来自专栏13blog.site

短信发送接口被恶意访问的网络攻击事件(三)定位恶意IP的日志分析脚本

作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载。 前言 承接前文《短...

3425
来自专栏乐沙弥的世界

Oracle AWR特性描述

AWR是Automatic Workload Repository的简称,中文叫着自动工作量资料档案库。既然是仓库,又是保存负载数据,所以保存的是数据库性能相关...

731
来自专栏Linyb极客之路

灰度发布方案

灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产...

9012
来自专栏ATYUN订阅号

RNN示例项目从开发到部署(三):在AWS上部署深度学习模型

虽然我很喜欢为自己建立数据科学和编程项目,但我同样乐于与世界上的任何人在线分享它。幸好,我们以使用AWS(Amazon Web Services),这样我们可以...

1203
来自专栏重庆的技术分享区

TensorFlow版本-如何更新?(踩坑版)

2.1K4
来自专栏机器之心

教程 | 一步步从零开始:使用PyCharm和SSH搭建远程TensorFlow开发环境

选自Medium 作者:Erik Hallström 机器之心编译 参与:机器之心编辑部 一般而言,大型的神经网络对硬件能力有着较高的需求——往往需要强劲的 G...

7686
来自专栏腾讯移动品质中心TMQ的专栏

GT3.1简化您的App性能测试(2)——原理讲解,溯本求源

GT3.1的版本更新,带来了全面的维度分析。那么这些功能是如何实现的呢?本章GT君将详细的从CUP维度、内存维度、流量维度、流畅度维度为大家讲解这些功能的作用和...

5476
来自专栏企鹅号快讯

可编程逻辑控制器PLC

PLC代表可编程逻辑控制器。它们基本上用于控制工业中的自动化系统。它们是最先进和最简单的控制系统之一,现在正在大规模地取代硬连线逻辑继电器。 ? 在详细介绍PL...

2237
来自专栏Java技术分享

redis是个单线程的程序,为什么会这么快呢?

纯内存数据库,如果只是简单的 key-value,内存不是瓶颈。一般情况下,hash 查找可以达到每秒数百万次的数量级。 瓶颈在于网络 IO 上。 根据你测的的...

47110

扫码关注云+社区