热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Istio实践手册|服务网格框架对比

istio,实践,手册,服

作者:xcbeyond

博客:https://xcbeyond.cn/ 公众号:程序猿技术大咖

《Istio 实践手册》,从服务网格概念出发,将逐步渗透到 Istio 具体细节中来,旨在帮助 Istio 学习者、使用者快速掌握相关知识点,可作为 Istio 学习、实践手册,建议收藏!(不断更新中……)

当前,业界主要有以下主要几种 Service Mesh 框架,下面进行详细的说明及对比。

1、Linkerd

Linkerd 是 Buoyant 公司 2016 年率先开源的高性能网络代理,是业界的第一款 Service Mesh 框架。其主要用于解决分布式环境中服务之间通信面临的一些问题,如网络不可靠、不安全、延迟丢包等问题。

Linkerd 使用 Scala 语言编写,运行于 JVM,底层于 Twitter 的 Finagle 库,并对其做了相应的扩展。最主要的是 Linkerd 具有快速、轻量级、高性能等特点,每秒以最小的延迟及负载处理万级请求,易于水平扩展。除此之外,还有以下功能:

  • 支持多平台:可运行于多种平台,比如 KubernetesDC/OSDocker,甚至虚拟机或物理机。

  • 无缝集成多种服务发现工具。

  • 支持多协议,如 gRPCHTTP/1.xHTTP/2,甚至可通过 linkerd-tcp 支持 TCP 协议。

  • 支持与第三方分布式追踪系统 Zipkin 集成。

  • 灵活性、扩展性高,可通过其提供的接口开发自定义插件。

目前,LinkerdLinkerd2并行开发,其情况如下:

  • LinkerdLinkerd使用Scala语言编写,运行于JVM,底层基于 Twitter 的Finagle库,并对其做了相应的扩展。

  • Linkerd2:使用Go语言和Rust语言完全重写了Linkerd,专门用于Kubernetes

Linkerd 本身是数据平面,负责将数据路由到目标服务,同时保证数据在分布式环境中传输是安全、可靠、快速的。另外,Linkerd还包括控制平面组件Namerd,通过控制平面Namerd实现中心化管理和存储路由规则、中心化管理服务发现配置、支持运行时动态路由以及暴露Namerd API管理接口。

 

  • 控制平面

是在Kubernetes特定命名空间中运行的一组服务。这些服务可以完成各种事情:聚集遥测数据,提供面向用户的 API,向数据平面代理提供控制数据等。

由以下部分组成:

  • Controller:由public-api容器组成,该容器为CLIdashboard提供接口 API。

    Destination:数据平面中的每个代理都使用此组件来查找将请求发送到哪里。还用于获取服务配置信息,如:路由指标,重试和超时等。

    Identity:该组件提供了证书的颁发,接受来自代理的 CSRs 并返回正确身份签名的证书。这些证书由代理在启动时获取,并且必须在代理准备就绪之前发出。随后,它们可用于Linkerd代理之间的任何连接以实现mTLS

    Proxy Injector:是一个注入程序,每次创建一个pod时,它都会接收一个webhook请求。该注入程序检查资源以查找特定于Linkerd的注释(linkerd.io/inject: enabled)。当存在该注释时,注入器将更改容器的规范,并添加 initContainer包含代理本身的以及附属工具。

    Service Profile Validator:用于在保存新服务配置文件之前先对其进行验证。

    Tap:从CLIdashboard接收请求,以实时监视请求和响应。

  • 数据平面

由轻量级代理组成,这些代理作为sidecar容器与服务代码的每个实例一起部署。为了将服务“添加”到Linkerd服务网格,必须重新部署该服务的Pod,以在每个 Pod 中包含数据平面代理。

2、Envoy

Linkerd一样,Envoy也是一款高性能的网络代理,于 2016 年 10 月份有 Lyft 公司开源,为云原生应用而设计,可作为边界入口,处理外部流量,此外,也作为内部服务间通信代理,实现服务间可靠通信。Envoy的实现借鉴现有生产级代理及负载均衡器,如NginxHAProxy、硬件负载均衡器及云负载均衡器的实践经验,同时基于C++编写及 Lyft 公司生产实践证明,Envoy性能非常优秀、稳定。

Envoy 既可用作独立代理层运行,也可作为Service Mesh架构中数据平面层,因此通常Envoy跟服务运行在一起,将应用的网络功能抽象化,Envoy提供通用网络功能,实现平台及语言无法性。除此之外,还有以下功能:

  • 优先支持HTTP/2gRPC,同时支持Websocket和 TCP 代理。

  • API 驱动的配置管理方式,支持动态管理、更新配置以及无连接和请求丢失的热重启功能。

  • L3/L4层过滤器形成Envoy核心的连接管理功能。

  • 通过与多种指标收集工具及分布式追踪系统集成,实现运行时指标收集、分布式追踪,提供整个系统及服务的运行时可见性。

  • 内存资源使用率低,SidecarEnvoy最常用的部署模式。

3、Istio

Istio 是由GoogleIBMLyft发起的开源的Service Mesh框架。该项目在 2017 年推出,并在 2018 年 7 月发布了 1.0 版本。

IstioService Mesh目前的实现的典型代表,如果Sidecar是整个Service Mesh的数据面,那么Istio主要在控制面上做了更多的改进,Istio使用Envoy作为Sidecar,控制面相关全部使用Golang编写,性能上有了很大的提升。

Istio 首先是一个服务网格,但是Istio又不仅仅是服务网格:在 LinkerdEnvoy 这样的典型服务网格之上,Istio提供了一个完整的解决方案,为整个服务网格提供行为洞察和操作控制,以满足微服务应用程序的多样化需求。

Istio 在服务网络中统一提供了许多关键功能:

  • 流量管理:控制服务之间的流量和 API 调用的流向,使得调用更可靠,并使网络在恶劣情况下更加健壮。

  • 可观察性:了解服务之间的依赖关系,以及它们之间流量的本质和流向,从而提供快速识别问题的能力。

  • 策略执行:将组织策略应用于服务之间的互动,确保访问策略得以执行,资源在消费者之间良好分配。策略的更改是通过配置网格而不是修改应用程序代码。

  • 服务身份和安全:为网格中的服务提供可验证身份,并提供保护服务流量的能力,使其可以在不同可信度的网络上流转。

  • 除此之外,Istio针对可扩展性进行了设计,以满足不同的部署需要。

  • 平台支持:Istio旨在在各种环境中运行,包括跨云, 预置,KubernetesMesos等。最初专注于Kubernetes,但很快将支持其他环境。

  • 集成和定制:策略执行组件可以扩展和定制,以便与现有的ACL,日志,监控,配额,审核等解决方案集成。

这些功能极大的减少了应用程序代码,底层平台和策略之间的耦合,使微服务更容易实现。

 

Istio 架构图中各个子模块功能如下:

  • Envoy:负责各个应用服务之间通信。

  • Pilot:管理和配置Envoy,提供服务发现、负载均衡和智能路由,保证弹性服务(服务超时次数、重试、熔断策略)。

  • Mixer:信息监控检查。

  • Istio-Auth:提供服务和服务、用户和服务之间的认证服务,实现访问控制,解决是谁访问的是哪个 API 的问题。

其中,图中的通信代理组件为Envoy,这是Istio原生引入的,但Linkerd也能够集成对接Istio

4、Conduit

Conduit 于 2017 年 12 月发布,作为由 Buoyant 继Linkerd后赞助的另外一个开源项目,作为Linkerd面向Kubernetes的独立版本。Conduit旨在彻底简化用户在Kubernetes使用服务网格的复杂度,提高用户体验,而不是像Linkerd一样针对各种平台进行优化。

Conduit 的主要目标是轻量级、高性能、安全并且非常容易理解和使用。同LinkerdIstioConduit也包含数据平面和控制平面,其中数据平面由Rust语言开发,使得Conduit使用极少的内存资源,而控制平面由Go语言开发。Conduit依然支持Service Mesh要求的功能,而且还包括以下功能:

  • 超级轻量级和极快的性能。

  • 专注于支持Kubernetes平台,提高运行在Kubernetes平台上服务的可靠性、可见性及安全性。

  • 支持gRPCHTTP/2HTTP/1.x请求及所有 TCP 流量。

Conduit 以极简主义架构,以零配置理念为中心,旨在减少用户与Conduit的交互,实现开箱即用。

5、对比总结

下面对上述各种 Service Mesh 框架进行简单的比较汇总,见下表所示:

 

 

 

上述任何一个 Service Mesh 框架都能够满足您的基本需求。

到⽬前为⽌,Istio 具有这几个服务⽹格框架中最多的功能和灵活性,灵活性意味着复杂性,因此需要团队更为充⾜的准备。

如果只想使⽤基本的 Service Mesh 治理功能,Linkerd 可能是最佳选择。如果您想⽀持同时包含 Kubernetes 和 VM 的异构环境,并且不需要 Istio 的复杂性,那么 Conduit 可能是您的最佳选择,⽬前 Istio 也提供了同时包含 Kubernetes 和 VM 的异构环境的⽀持。

 

下篇预告:将正式踏进 Istio 的征程,从 Istio 的整体架构谈起,一同目睹 Istio 中都有哪些组件及如何实现的。

 


推荐阅读
  • 本文介绍了如何解决 ChinaASP.Upload 错误 '80040002',即必须添加版权信息的问题,并提供了详细的步骤和注意事项。 ... [详细]
  • ArcBlock 发布 ABT 节点 1.0.31 版本更新
    2020年11月9日,ArcBlock 区块链基础平台发布了 ABT 节点开发平台的1.0.31版本更新,此次更新带来了多项功能增强与性能优化。 ... [详细]
  • 在测试软件或进行系统维护时,有时会遇到电脑蓝屏的情况,即便使用了沙盒环境也无法完全避免。本文将详细介绍常见的蓝屏错误代码及其解决方案,帮助用户快速定位并解决问题。 ... [详细]
  • Fiddler 安装与配置指南
    本文详细介绍了Fiddler的安装步骤及配置方法,旨在帮助用户顺利抓取用户Token。文章还涵盖了一些常见问题的解决方案,以确保安装过程顺利。 ... [详细]
  • 搭建个人博客:WordPress安装详解
    计划建立个人博客来分享生活与工作的见解和经验,选择WordPress是因为它专为博客设计,功能强大且易于使用。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • 精选10款Python框架助力并行与分布式机器学习
    随着神经网络模型的不断深化和复杂化,训练这些模型变得愈发具有挑战性,不仅需要处理大量的权重,还必须克服内存限制等问题。本文将介绍10款优秀的Python框架,帮助开发者高效地实现分布式和并行化的深度学习模型训练。 ... [详细]
  • 在尝试使用 Android 发送 SOAP 请求时遇到错误,服务器返回 '无法处理请求' 的信息,并指出某个值不能为 null。本文探讨了可能的原因及解决方案。 ... [详细]
  • 本文介绍了如何在两个Oracle数据库(假设为数据库A和数据库B)之间设置DBLink,以便能够从数据库A中直接访问和操作数据库B中的数据。文章详细描述了创建DBLink前的必要准备步骤以及具体的创建方法。 ... [详细]
  • 本文介绍了一个使用Spring框架和Quartz调度器实现每周定时调用Web服务获取数据的小项目。通过详细配置Spring XML文件,展示了如何设置定时任务以及解决可能遇到的自动注入问题。 ... [详细]
  • 本文详细介绍了 Java 中 org.w3c.dom.Node 类的 isEqualNode() 方法的功能、参数及返回值,并通过多个实际代码示例来展示其具体应用。此方法用于检测两个节点是否相等,而不仅仅是判断它们是否为同一个对象。 ... [详细]
  • JavaScript 实现图片文件转Base64编码的方法
    本文详细介绍了如何使用JavaScript将用户通过文件输入控件选择的图片文件转换为Base64编码字符串,适用于Web前端开发中图片上传前的预处理。 ... [详细]
  • Python Requests模块中的身份验证机制
    随着Web服务的发展,身份验证成为了确保数据安全的重要环节。本文将详细介绍如何利用Python的Requests库实现不同类型的HTTP身份验证,包括基本身份验证、摘要式身份验证以及OAuth 1认证等。 ... [详细]
author-avatar
卖砖头的小男孩
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有