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

相关文章

来自专栏企鹅号快讯

分布式架构的套路No.74

今天小蕉跟大伙一起聊聊分布式系统的架构的套路。在开始说套路之前,大家先思考一个问题,为什么要进行分布式架构? 大多数的开发者大多数的系统可能从来没接触过分布式系...

3579
来自专栏云计算认知升级

【腾讯云的1001种玩法】十分钟轻松搞定云架构:CDN的命中率是什么

十分钟轻松搞定云架构,这节课中我们来深入了解什么是CDN 的命中率,CDN为什么能帮你省下钱?又如何省下更多的钱?

6230
来自专栏java一日一条

大型分布式网站架构技术总结

本文是学习大型分布式网站架构的技术总结。对架构一个高性能,高可用,可伸缩,可扩展的分布式网站进行了概要性描述,并给出一个架构参考。一部分为读书笔记,一部分是个人...

502
来自专栏云计算

现代网络负载平衡和代理介绍

原文地址:https://blog.envoyproxy.io/introduction-to-modern-network-load-balancing-an...

2074
来自专栏微信公众号:Java团长

Java微服务框架选型(Dubbo 和 Spring Cloud?)

微服务(Microservices)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微...

1843
来自专栏北京马哥教育

一个开发眼中的运维

马哥linux运维 | 最专业的linux培训机构 ---- 在云计算时代,开发和运维的结合变得越来越重要。在DIFF论坛第一期,前新浪SAE运维主管,郑志勇...

2937
来自专栏京东技术

如何用“二八原理”对微服务做系统梳理,找出黄金流程

1803
来自专栏即时通讯技术

快速理解高性能HTTP服务端的负载均衡技术原理

在一个典型的高并发、大用户量的Web互联网系统的架构设计中,对HTTP集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案。HTTP负载均衡的本质上是将W...

611
来自专栏大魏分享(微信公众号:david-share)

软件负载均衡的探究与实现

软负载方案介绍 谈到负载均衡,目前业内全球最出名的应该是F5,国内深信服在这方面知名度也很高。硬件厂商的负载均衡方案有其优势,这点毋庸置疑。那么,负载相对较低的...

3323
来自专栏PHP技术

大型分布式网站架构技术总结

原文出处: ITFLY8 本文是学习大型分布式网站架构的技术总结。对架构一个高性能,高可用,可伸缩,可扩展的分布式网站进行了概要性描述,并给出一个架构参考。一...

3357

扫码关注云+社区