【服务网格架构】Envoy架构概览(10):热启动,动态配置,初始化,排水,脚本

简介: 【服务网格架构】Envoy架构概览(10):热启动,动态配置,初始化,排水,脚本

热启动

易于操作是特使的主要目标之一。除了强大的统计数据和本地管理界面之外,Envoy还具有“热”或“实时”重启的能力。这意味着Envoy可以完全重新加载自己(代码和配置)而不会丢失任何连接。热启动功能具有以下通用架构:


  • 统计和一些锁保存在共享内存区域。这意味着在重启过程中,仪表将在两个过程中保持一致。
  • 两个活动进程使用基本的RPC协议通过unix域套接字相互通信。
  • 新进程完全初始化自己(加载配置,执行初始服务发现和健康检查阶段等),然后再请求旧进程的侦听套接字的副本。新流程开始监听,然后告诉旧流程开始排水。
  • 在排水阶段,旧的进程试图正常关闭现有的连接。如何完成取决于配置的过滤器。排水时间可通过 - 排水时间选项进行配置,并且随着排水时间的增加,排水更加积极。
  • 排水顺序后,新的特使进程告诉旧的特使进程关闭自己。这一次可以通过--parent-shutdown-time-s选项来配置。
  • 特使的热启动支持被设计成即使新的特使进程和旧的特使进程在不同的容器内运行,它也能正常工作。进程之间的通信仅使用unix域套接字进行。
  • 源代码发行版中包含以Python编写的示例重启器/父进程。这个父进程可用于标准的进程控制工具,如monit / runit /等。

动态配置


特使的架构使得不同类型的配置管理方法成为可能。部署中采用的方法将取决于实现者的需求。完全静态的配置可以实现简单的部署。更复杂的部署可以递增地添加更复杂的动态配置,缺点是实现者必须提供一个或多个基于外部REST的配置提供者API。本文档概述了当前可用的选项。


  • 顶级配置参考。
  • 参考配置。
  • Envoy v2 API概述。

完全静态

在完全静态配置中,实现者提供了一组侦听器(和过滤器链),集群以及可选的HTTP路由配置。动态主机发现只能通过基于DNS的服务发现来实现。配置重新加载必须通过内置的热启动机制进行。


虽然简单,但可以使用静态配置和优雅的热重启来创建相当复杂的部署。


仅限SDS / EDS

服务发现服务(SDS)API提供了一种更高级的机制,Envoy可以通过该机制发现上游群集的成员。SDS已在v2 API中重命名为Endpoint Discovery Service(EDS)。在静态配置的基础上,SDS允许Envoy部署避开DNS的限制(响应中的最大记录等),并消耗更多用于负载平衡和路由的信息(例如,金丝雀状态,区域等)。


SDS / EDS和CDS

群集发现服务(CDS)API层上Envoy可以发现路由期间使用的上游群集的机制。Envoy将优雅地添加,更新和删除由API指定的集群。这个API允许实现者构建一个拓扑,在这个拓扑中,Envoy在初始配置时不需要知道所有的上游集群。通常,在与CDS一起进行HTTP路由(但没有路由发现服务)时,实现者将利用路由器将请求转发到HTTP请求标头中指定的集群的能力。


虽然可以通过指定完全静态集群来使用没有SDS / EDS的CDS,但我们建议仍然使用SDS / EDS API来通过CDS指定集群。在内部,更新集群定义时,操作是优雅的。但是,所有现有的连接池将被排空并重新连接。SDS / EDS不受此限制。当通过SDS / EDS添加和删除主机时,群集中的现有主机不受影响。


SDS / EDS,CDS和RDS

路由发现服务(RDS)API层,Envoy可以在运行时发现HTTP连接管理器过滤器的整个路由配置。路由配置将优雅地交换,而不会影响现有的请求。该API与SDS / EDS和CDS一起使用时,允许执行者构建复杂的路由拓扑(流量转移,蓝/绿部署等),除了获取新的Envoy二进制文件外,不需要任何特使重启。


SDS / EDS,CDS,RDS和LDS

侦听器发现服务(LDS)在Envoy可以在运行时发现整个侦听器的机制上分层。这包括所有的过滤器堆栈,直到并包含嵌入式参考RDS的HTTP过滤器。在混合中添加LDS可以使Envoy的几乎所有方面都能够进行动态配置。只有非常少见的配置更改(管理员,跟踪驱动程序等)或二进制更新时才需要热启动。


初始化


Envoy在启动时如何初始化是复杂的。本节将从高层次解释流程的工作原理。以下所有情况都发生在任何听众开始收听并接受新连接之前。


  • 在启动过程中,集群管理器会经历多阶段初始化,首先初始化静态/ DNS集群,然后是预定义的SDS集群。然后,如果适用,它将初始化CDS,等待一个响应(或失败),并执行CDS提供的集群的相同主/次初始化。
  • 如果群集使用主动健康检查,特使也做一个活跃的HC轮。
  • 集群管理器初始化完成后,RDS和LDS将初始化(如果适用)。在LDS / RDS请求至少有一个响应(或失败)之前,服务器不会开始接受连接。
  • 如果LDS本身返回需要RDS响应的侦听器,则Envoy会进一步等待,直到收到RDS响应(或失败)。请注意,这个过程通过LDS发生在每个未来的收听者身上,并被称为收听者变暖。
  • 在所有先前的步骤发生之后,听众开始接受新的连接。该流程确保在热启动期间,新流程完全能够在旧流程开始排放之前接受并处理新的连接。


排水


排水是Envoy试图优雅地脱离各种事件的连接的过程。排水发生在下列时间:


  • 服务器已通过健康检查/失败管理端点进行手动健康检查失败。有关更多信息,请参阅运行状况检查过滤器体系结
  • 服务器正在热启动。
  • 个别听众正在通过LDS进行修改或删除。

每个配置的监听器都有一个drain_type设置,用于控制何时发生排空。目前支持的值是:


默认

特使将听取上述所有三种情况(管理员流失,热启动和LDS更新/删除)的响应。这是默认设置。

modify_only

特使只会响应上述第二和第三种情况(热启动和LDS更新/删除)而排斥监听者。如果Envoy同时拥有入口和出口监听器,则此设置很有用。可能需要在出口监听器上设置modify_only,以便在尝试进行受控关闭时依靠入口监听器耗尽来执行完整的服务器耗尽时,它们只在修改期间耗尽。

请注意,虽然排水是每个听众的概念,但它必须在网络过滤器级别上得到支持。目前唯一支持正常排水的过滤器是HTTP连接管理器,Redis和Mongo。


脚本

Envoy支持实验性的Lua脚本作为专用HTTP过滤器的一部分。

相关文章
|
人工智能 缓存 自然语言处理
Bolt DIY架构揭秘:从模型初始化到响应生成的技术之旅
在使用Bolt DIY或类似的AI对话应用时,你是否曾好奇过从输入提示词到获得回答的整个过程是如何运作的?当你点击发送按钮那一刻,背后究竟发生了什么?本文将揭开这一过程的神秘面纱,深入浅出地解析AI对话系统的核心技术架构。
496 5
|
运维 Kubernetes 网络协议
基于虚拟服务配置的渐进式迁移实践:Istio集群至ASM集群的平滑切换
本文介绍了从Istio+k8s环境迁移到阿里云ASM+ACK环境的渐进式方法,通过配置虚拟服务和入口服务实现新老集群间的服务调用与流量转发,确保业务连续性与平滑迁移
1048 132
|
敏捷开发 运维 监控
探索微服务架构下的服务网格
【5月更文挑战第29天】 在现代软件开发的复杂多变环境中,微服务架构已成为构建分布式系统的热门选择。随着其应用的广泛化,服务网格(Service Mesh)这一概念应运而生并迅速崛起,它旨在提供一种透明且高效的方式来管理服务间的通信。本文将深入探讨服务网格的核心组件、运作机制以及如何通过服务网格优化微服务架构。我们还将讨论服务网格引入的挑战与克服这些挑战的策略,为采用微服务的企业提供指导和见解。
|
缓存 Kubernetes 容灾
如何基于服务网格构建高可用架构
分享如何利用服务网格构建更强更全面的高可用架构
|
自然语言处理 监控 Cloud Native
探索微服务架构中的服务网格Service Mesh
【10月更文挑战第7天】服务网格(Service Mesh)是微服务架构中的关键组件,通过在每个服务实例旁部署Sidecar代理,实现服务间通信的管理、监控和安全增强。本文介绍了服务网格的基本概念、核心组件、优势及实施步骤,探讨了其在现代开发中的应用,并提供了实战技巧。
|
运维 负载均衡 监控
探索微服务架构下的服务网格(Service Mesh)实践之路
【8月更文挑战第30天】 在当今日益复杂的分布式系统中,微服务架构已成为众多企业解决系统扩展与维护难题的利器。然而,随着服务的不断增多和网络交互的复杂性提升,传统的微服务管理方式开始显得力不从心。服务网格(Service Mesh)作为一种新兴的解决方案,旨在通过提供应用层的网络基础设施来简化服务间通讯,并增强系统的可观察性和安全性。本文将分享我在采用服务网格技术过程中的经验与思考,探讨如何在现代云原生环境中有效地实施服务网格,以及它给开发和运维带来的变革。
|
设计模式 存储 人工智能
深度解析Unity游戏开发:从零构建可扩展与可维护的游戏架构,让你的游戏项目在模块化设计、脚本对象运用及状态模式处理中焕发新生,实现高效迭代与团队协作的完美平衡之路
【9月更文挑战第1天】游戏开发中的架构设计是项目成功的关键。良好的架构能提升开发效率并确保项目的长期可维护性和可扩展性。在使用Unity引擎时,合理的架构尤为重要。本文探讨了如何在Unity中实现可扩展且易维护的游戏架构,包括模块化设计、使用脚本对象管理数据、应用设计模式(如状态模式)及采用MVC/MVVM架构模式。通过这些方法,可以显著提高开发效率和游戏质量。例如,模块化设计将游戏拆分为独立模块。
1178 3
|
敏捷开发 运维 Cloud Native
云原生架构的演进之路:从容器化到服务网格
在数字化转型的浪潮中,云原生技术以其灵活性、可扩展性和弹性成为企业IT架构的新宠。本文将探讨云原生技术的演进路径,特别是容器化技术和服务网格的发展,以及它们如何共同推动现代应用的开发和部署。通过分析实际案例,我们揭示了云原生技术如何助力企业实现敏捷开发和高效运维,同时指出了未来云原生技术的发展趋势。
|
Kubernetes Cloud Native 持续交付
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
|
Kubernetes Cloud Native Docker
云原生架构的演进:从容器化到服务网格
本文深入探讨了云原生技术从最初的容器化技术,如Docker和Kubernetes,发展到现代的服务网格架构,如Istio。文章将通过分析云原生技术的演进路径,揭示其在处理微服务复杂性、流量管理和安全性方面的优势。我们将通过具体案例展示服务网格如何优化分布式系统的性能,并预测未来云原生技术的发展趋势。
249 2