在过去的一年里,服务网格技术获得了极大的兴趣。尽管服务网格的概念并不新鲜,但是实现细节对某些人来说却是新鲜的。HashiCorp Consul是一个开源工具,提供服务发现、健康检查、负载均衡和全局分布的键值存储。这些特性使Consul可以作为服务网格理想的控制平面。这篇文章讨论了一些关于采用服务网格的基本原则,以及Consul如何类似Istio, Linkerd和Envoy当作项目的控制平面。

在深入研究服务网格之前,了解基本原则和在考虑服务网格等技术时可用的选项是有帮助的。

哑管道或智能网络

“哑管道”设计注重简单性,并假设网络是“哑”的。这个设计框架可以用端到端原则来最好地解释。它指出,通信或网络特性应该尽可能地接近应用程序,因此应用程序最终要做大量的繁重工作(重试、回退、断路、请求路由等)。因此,在每个应用程序中都可能存在重复的代码来重新实现这些特性。通常情况下,负载均衡器用于在应用程序之外实现这种功能。这使得网络操作简单,易于推理。

“智能网络”设计在重试、回退、断路、负载平衡等方面采取了一种带外的方式。它提供了基于网络的这些特性的实现,因此多个应用程序可以从这些特性中获益,而应用程序的实现工作很少甚至没有。这基本上是服务网格所采用的方法。遥测、流量控制、服务发现和网络策略控制等功能也可以直接提供。然而,服务网格成为了应用程序的隐式依赖关系,因此很难对整个系统进行推理。例如,请求重试行为可能在应用程序源代码和网络配置中都指定。

控制与数据平面分离

与联网类似,服务网格通常由控制平面和数据平面组成。这将性能敏感的数据路径与系统的其他部分分隔开来。

控制平面负责决定在何处发送流量和配置数据平面。此外,它还负责网络策略执行和向数据平面提供服务发现数据等功能。由于控制平面是服务网格的一个重要组成部分,它必须是高度可用和分布式的。

数据平面提供了从应用程序转发请求的能力,由于是数据路径,因此得名。数据平面还可以提供更复杂的特性,比如健康检查、负载均衡、断路、超时和重试、身份验证和授权。数据平面处于从一个应用程序到另一个应用程序的数据流的关键路径,因此需要高吞吐量和低延迟。

协议感知

协议感知是设计数据平面时要考虑的另一个重要因素。数据平面可能在OSI模型的不同层实现,可能知道也可能不知道协议。

让我们以四层协议—传输层为例。第4层协议的两个常见示例是TCP和UDP。TCP用于大多数常见协议,如HTTP、SSH、SMTP和大多数数据库。UDP用于延迟敏感的应用程序,如VOIP、视频会议和对等协议。使用此层的数据平面可以认为是“普遍”兼容的,因为它使用TCP/UDP等较低级别的协议来执行请求转发。这个数据平面可以提供高性能,因为转发是在不考虑数据包内容的情况下进行的。这种方法的一个缺点是很难提供复杂的或请求敏感的特性。

现在让我们以七层协议—应用层为例。使用此层的数据平面具有应用程序感知,可以使用附加信息来执行复杂的路由决策。例如,通过解析HTTP请求,可以使用请求路径或请求头等请求内容来更改路由和转发行为。这种方法的一个缺点是,由于正在检查包的内容,因此它可能产生较低的性能。另一个挑战是应用层协议的多样性。虽然HTTP很常见,但是有无数其他的协议被使用。

Consul 作为控制平面

Consul提供了许多功能,使其成为一个理想的控制平面。Consul的体系结构确保了它的高可用性,并支持多数据中心拓扑。Consul的主要目标之一是提供服务发现,它可以与哑管道和智能网络方法一起工作。在Dumb Pipe设计中,Consul可以提供一流的DNS接口,应用程序可以使用它来发现其他应用程序并直接通信,而无需使用中间数据平面或服务网格。此外,这些应用程序可以使用Consul的键值存储来存储重试、超时和断路设置,并在需要时请求它们。

在智能网络设计用例中,Consul可以通过配置数据平面的API提供服务发现和健康检查信息。Consul K/V存储也可以用于持久状态,比如网络策略。在之前的一篇博客文章中,我们探讨了Consul如何用于负载均衡,当查看在微服务体系结构中Consul负载均衡的常见策略时,这可能是一个很好的解读。

Consul如何配合服务网格?

服务网格的目标是为服务通信提供服务,并提供一些更高级别的特性,如可观察性、策略执行、重试、备份和安全性。它由一个控制平面,一个(典型的)附带可以提供诸如政策实施等的适配器的7层数据平面组成。Consul可以用作控制平面,而数据平面有很多选择,包括项目Envoy,Linkerd,NGINX,HAProxy,Traefikand,Fabio。

让我们以Istio为例。Istio是一个连接、管理和保护微服务的平台。Istio的控制平面由导航仪、混合器和Istio-auth组成。

Pilot旨在抽象特定于平台的服务发现机制,并提供数据平面(Envoy)可使用的标准数据格式。由于Consul提供了丰富的服务发现API,因此可以将Pilot配置为使用该数据来发现在数据中心中运行的服务。在Consul旁边安装Istio的说明可以在https://istio.io/docs/setup/consul/找到。

mix的目标是成为Istio的策略执行组件。它将策略决策从应用程序转移到操作人员可以管理的配置中。Consul有一个键值存储,可用于存储操作符定义的策略,混合器可以与Consul接口,并在服务网格中执行这些策略。

Istio-Auth旨在提供服务,以服务于使用相互TLS的终端用户身份验证,并为网格中运行的每个服务提供身份验证。在HashiCorp中,我们还构建了具有PKI秘密后端的Vault,该后端可用于动态生成证书。Istio-Auth可以使用这个特性向数据平面提供证书,数据平面将强制执行服务到服务通信的相互TLS。

结论

Consul提供了许多功能,使其作为服务网格理想的控制平面。这篇文章详细介绍了在查看服务网格时应该考虑的一些基本原则,并展示了Consul如何可以用来驱动服务网格。

对Consul的功能感兴趣,如服务发现,关键价值存储等?首先查看https://www.consul.io/downloads.html。

Consul和服务网格的智能网络相关推荐

  1. 学习搭建 Consul 服务发现与服务网格-有丰富的示例和图片

    第一部分:Consul 基础 1,Consul 介绍 官网文档描述:Consul 是一个网络工具,提供功能齐全的服务网格和服务发现. 它可以做什么:自动化网络配置,发现服务并启用跨任何云或运行时的安全 ...

  2. Kubernetes 上的服务网格技术大比较: Istio, Linkerd 和 Consul

    云原生应用通常是由一组运行在容器中的分布式微服务架构起来的.目前越来越多的容器应用都是基于 Kubernetes 的,Kubernetes 已经成为了容器编排的事实标准. 大多数采用了微服务架构的公司 ...

  3. 服务网格——什么是服务网格?(概念原理1)

    目录 什么是服务网格? 服务网格的特点 理解服务网格 服务网格如何工作? 为何使用服务网格? 服务网格全景图 参考 什么是服务网格? Service mesh 又译作 "服务网格" ...

  4. 低复杂度 - 服务网格的下一站

    译者: 作为一个曾经在新造车公司的基础架构团队任职,为支持公司的"互联网基因"和"数字化转型"落地了云原生基础设施平台,并在尝试采用服务网格未成的我来说,看到这 ...

  5. 阿里云专家详解 2020 服务网格发展趋势

    作者 | 王夕宁 阿里巴巴高级技术专家 关注"阿里巴巴云原生"公众号,参与文末留言互动,即有机会获得赠书福利! 本文摘自于由阿里云高级技术专家王夕宁撰写的<Istio 服务网 ...

  6. 阿里云服务网格 ASM 发布新功能:提供更精细化的服务治理能力

    简介:服务网格作为服务间通信的基础设施层,吸引了越来越多的用户使用.阿里云服务网格 ASM 将继续为开发者带来便利.9月1日,阿里云服务网格( ASM )产品经理问思为大家解读近期 ASM 发布的一些 ...

  7. 微服务的下一步,离不开服务网格

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 软件行业走了很长一段路,在整个过程中,软件体系结构也已经发展了很多.经历了 ...

  8. 深度剖析Service Mesh服务网格新生代Istio

    作者简介:敖小剑,十五年软件开发经验,微服务专家,专注于基础架构,Cloud Native拥护者,敏捷实践者.曾在亚信.爱立信.唯品会和ppmoney任职, 现任数人云资深架构师,本文由数人云独家授权 ...

  9. 赛题解析|初赛赛道三:服务网格控制面分治体系构建

    首届云原生编程挑战赛正在报名中,初赛共有三个赛道,题目如下: 赛道一:实现一个分布式统计和过滤的链路追踪 赛道二:实现规模化容器静态布局和动态迁移 赛道三:服务网格控制面分治体系构建 立即报名(报名时 ...

最新文章

  1. vmoptions默认配置_AndroidStudio基本配置
  2. matlab 数据降维和重构_核主成分分析(Kernel PCA, KPCA)的MATLAB 实现
  3. Ocelot简易教程(二)之快速开始2
  4. 《设计模式详解》行为型模式 - 模板方法模式
  5. 打开TestFlight并链接到具体的应用下载界面
  6. 坦克大战(Python)附思维导图、代码、图片音频资源
  7. 电商产品设计:购物车管理
  8. 二进制的转换(二进制、八进制、十进制、十六进制)
  9. 中国电信5G技术引言
  10. 69 Three.js 导入Collada(.dae)格式的模型
  11. 说说铁道部12306
  12. srm供应商关系管理系统
  13. android 记事本提醒,Android 日历+记事本+提醒 源码
  14. 来到公司一星期的感受
  15. 自由液面的土石坝平面渗流分析
  16. 基于JAVA英语学习网站设计与实现计算机毕业设计源码+数据库+lw文档+系统+部署
  17. 微信中点击链接或扫描二维码跳转外部浏览器的API接口
  18. dedecms怎么改php版本_一键建站系列教程(宝塔面板+DeDeCMS)
  19. 【示波器专题】示波器最基本的电压测量和时间测量
  20. MPI分布式内存编程(一)

热门文章

  1. ros使用QT插件开发
  2. 面向对象程序设计第三次作业
  3. 【Java数据结构】线性表
  4. vim的代码折叠:设置默认代码不折叠
  5. Linux configure 参数解释,程序的这装,卸载
  6. WSS 3.0 在默认的情况下不存在IRM的protector.
  7. WSUS部署中...
  8. vlc rtsp流 转 http播放视频
  9. 缺少glibc指定版本的解决方案
  10. 网站维护:Linux服务器查看外网访问IP指令汇总