大赛介绍

2022 第三届云原生编程应战赛,是由阿里云、Intel 主办,云原生运用渠道、天池联合承办的云原生尖端品牌赛事。

自 2015 年开端,大赛现已成功举办了七届,并从 2020 年开端晋级为首届云原生编程应战赛,共招引了超过 36000 支队伍,覆盖 10 余个国家和地区。

本届大赛将继续深度探索服务网格、边际容器、Serverless 三大热门技能领域,为热爱技能的年轻人供给一个应战世界级技能问题的舞台,期望用技能为全社会发明更大价值。大家赶快报名参赛吧!

丰盛奖励等你来报名!

  • 分割510,000 元现金大奖
  • 三大热门赛道任意挑选
  • 邀请小伙伴报名兑换精美礼品
  • 完成 Serverless 场景体验领阿里云背包

以下赛道可任选 1 个或悉数扫码报名:

赛道 1(服务网格)

2022 云原生编程挑战赛启动!导师解析服务网格赛题

赛道 2(边际容器)

2022 云原生编程挑战赛启动!导师解析服务网格赛题

赛道3(Serverless)

2022 云原生编程挑战赛启动!导师解析服务网格赛题

更多内容尽在大赛官网,欢迎扫码了解:

2022 云原生编程挑战赛启动!导师解析服务网格赛题

赛题布景

容器作为云原生运用的交付物,既处理了环境一致性的问题,又可以更细粒度的约束运用资源。跟着微服务和 DevOps 的流行,容器作为微服务的载体得以广泛运用;而Kubernetes 作为一种容器编排调度工具,处理了分布式运用程序的布置和调度问题。

在服务网格技能出现之前,可以运用 SpringCloud、Netflix OSS 等,经过在运用程序中集成 SDK,编程的方法来办理运用程序中的流量。可是这一般会有编程语言约束,而且在 SDK 晋级的时候,需求修正代码并重新上线运用,会增大人力负担。服务网格技能使得流量办理变得对运用程序通明,使这部分功能从运用程序中转移到了渠道层,成为了云原生基础设施。以 Istio 为首的服务网格技能,正在被越来越多的企业所瞩目。Istio 运用 Sidecar 借助 iptables 技能完成流量阻拦,可以处理一切运用的出入口流量,以完成流量办理、观测、加密等才能。要了解更多有关服务网格 Istio 的基础知识,可以参考 Istio 官方网站。

可将服务网格 Istio 的流量办理过程简略理解为如下的模型:

2022 云原生编程挑战赛启动!导师解析服务网格赛题

在一个 Kubernetes 集群中,开发/运维人员将供给服务的容器(事务容器)以 Pod 的形式布置在集群中、并对外供给服务(一个 Pod 是一个或一组一起布置的容器,是可以在 Kubernetes 集群中创建和办理的最小布置单位)。Istio 在此之上进行了额定的工作,为用户供给了非侵入式的流量办理/可观测/加密等才能。具体来说,服务网格 Istio 为每个事务容器注入了一个 Sidecar,该 Sidecar 是一个 Envoy 运用的容器;并经过设定 iptables 规矩阻拦一切事务容器的入向和出向流量。这样,每个 Pod 中就多出了一个 Envoy 容器(Sidecar),用于供给服务网格的非侵入式才能。

经过为每个运用注入 Sidecar,服务网格可以感知和操控集群中每个服务的入向和出向流量,然后可以经过装备不同的规矩,在 Sidecar 层面完成流量转发负载均衡、流量灰度、流量加密等才能;一起事务容器的代码完全不需求修正,也感知不到 Sidecar 对流量的阻拦,下降了服务的运维本钱,因而压服务网格供给的才能是非侵入式的。对于来自集群外的恳求,Istio 则会独自布置一个 Envoy 容器在集群中、作为网关运用,然后完成对一切的流量都具有阻拦和办理的才能。

理解了服务网格的根本概念后,咱们再来关注赛题期望处理的问题。

服务网格供给的非侵入式流量办理才能尽管极大地下降了容器化运用的运维本钱,但现在引入网格技能也会带来功能丢失和资源占用添加的缺陷:

1、功能丢失

在典型状况下,引入服务网格技能之后会导致 QPS(每秒查询数)下降 ,以及恳求推迟添加 。其间的原因可以大致分为以下几个方面(包括但不限于):

1) Istio 设计之初的方针便是经过协议转发的方法服务于服务间流量,让服务网格尽或许对运用程序通明,然后运用了 IPtables 绑架流量。实践过程中咱们发现,因为 IPtables conntrack 模块所固有的问题,跟着网格规划的扩展,Istio 的功能问题开端显现。运用 iptables 的技能带来的对出入口恳求的阻拦,造成许多的功能丢失,这对一些功能要求高的场景有明显的影响。

2)Istio操控平面默许会监听和处理Kubernetes集群中一切命名空间中的一切资源, 这对于必定规划的集群来说, 在服务发现、装备推送等方面都存在必定的功能影响。

3)跟着对服务之前的数据传输、数据真实性、完整性和隐私性越来越注重, 零信任安全变得愈加重要。要完成零信任,可以运用 mTLS 为您的服务发出的每个恳求供给加密。但是, 运用 mTLS 完成的加密地道添加了微服务到微服务的推迟时间。

2、资源占用

在服务网格的 Sidecar 形式中,每个事务容器的 Pod 都会剩余注入一个 Envoy 容器。在处理和转发阻拦的恳求流量时,Envoy 容器必定会耗费集群中的 CPU 与内存资源。这导致当集群中服务规划持续增长时,这些剩余的Envoy容器将耗费不可忽视的集群资源。

赛题的方针便是针对上述两个缺陷对服务网格进行优化。赛题将会模拟一个资源有限的 Kubernetes 集群环境;期望经过动态地为每个 Sidecar(Envoy 容器)分配其所能运用的 CPU 及内存资源、对网格自身运用优化装备、以及敞开依据英特尔Multi-Buffer 特性的 TLS 通讯优化等手段,在资源有限的环境下尽或许进步网格内运用的功能体现。

赛题解析

对于本次赛题的主题:服务网格内运用的功能与服务网格 Sidecar 资源占用的优化,赛题给出了三个不同的视点作为入手点。三个视点彼此之间比较独立,参赛者可以挑选不同的视点来施行不同的优化手段,以到达最大的优化效果。

1、合理分配 Sidecar 的资源上限

如上所述,在服务网格中,每个 Pod 都会注入一个 Sidecar 署理(Envoy 容器),这些 Sidecar 署理不可防止地需求耗费必定的 CPU 和内存资源。因为进出 Pod 的一切流量都由 Sidecar 署理,Sidecar 对恳求的转发和处理功能对网格中运用的功能(体现在拜访推迟和 QPS)将会造成较大的影响;而 Sidecar 署理处理恳求的功能又与为其分配的 CPU 与内存资源量上限成正比,因而为 Sidecar 分配较多的 CPU 和内存资源将可以有用优化网格内运用的功能。

但是,盲目为 Sidecar 分配许多资源会迅速将集群内的资源总量耗尽,终究导致 Pod 无法创建等问题;所以如何将有限的集群资源进行合理分配、进步网格全体功能是一个网格优化的重要入手点。运用注解或大局装备的机制,服务网格 Istio 可以针对性地为每个服务指定为其 Sidecar 分配的 CPU 和内存资源上限。在本赛题中,咱们对这一机制进行了封装,参赛者只需求回来指定格局的回来值,就可以为评测环境中的每个服务设定分配的 CPU 和内存资源上限;运用这一机制合理地分配 Sidecar 的资源上限是完本钱赛题的重要手段。

在本赛题中,测评时将运用一个资源有限的 Kubernetes 集群 + 服务网格环境作为评测环境,参赛者的程序将被告知每个时段可分配给 Sidecar 的 CPU 和内存资源总量(CPU 以核为单位、内存以 Byte 为单位),并可以挑选核算并回来分配给每个服务的 Sidecar 的资源上限。一起,赛题的评测将分为多轮进行,每一轮都会向参赛者的程序传入网格内运用在上一轮评测中、发送恳求发生的拜访日志以及每个容器的均匀资源耗费。参赛者程序无法得知实际布置在集群中的服务以及服务之间的调用联系等状况。在这个优化方向中,赛题旨在期望参赛者完成一种自适应的动态集群资源调度机制,可以依据拜访网格内运用过程中发生的日志、CPU 内存方针这些可观测数据,赶快调整分配给每个服务 Sidecar 的资源上限,使网格的资源运用功率到达最大。

需求留意的是,为保证每个 Sidecar 能正常发动,为每个 Sidecar 分配的 CPU 和内存资源也是有下限的。具体来说,为 Sidecar 分配的 CPU 资源不能少于 0.1 核,分配的内存资源不得少于 128Mi(128000000Byte),否则将导致 Sidecar 无法发动,参赛者将得到 0 分。

2、Sidecar 装备调优

服务网格 Istio 中布置的每个 Sidecar 及网关都是一个 Envoy 运用。Envoy 是一个运转于7层网络协议的署理,其与 Nginx 的严重差异之一就在于 Envoy 的装备可以经过 xDS 协议来完成动态变更。服务网格正是运用这一点,拟定了 VirtualService、DestinationRule 等一系列自定义资源。网格用户编写并运用这些自定义资源后,由网格的操控面将这些自定义资源翻译成 Envoy 的装备,并经过 xDS API 进行动态下发,改变网关及 Sidecar 的装备及与其相关的恳求处理行为。

除根本的 VirtualService、DestinationRule 等资源外,服务网格 Istio 还拟定了 Sidecar 和 EnvoyFilter 两种自定义资源。其间 Sidecar 资源可以为每个服务的 Sidecar 独自声明其进出流量的特点,不只可以精简每个 Envoy 的装备,下降内存占用,还可以有用下降操控面对 Sidecar 的装备推送频率,削减资源耗费。而 EnvoyFilter 资源则答运用户直接修正 Envoy 的原始装备,可以有用修正和运用 Envoy 的各种已知才能。

赛题为参赛者封装了向服务网格中运用 Sidecar 与 EnvoyFilter 两种资源的机制,参赛者的程序可以挑选回来这两种资源的 YAML 字符串、并由赛题方协助运用于服务网格中。运用 Sidecar 与 EnvoyFilter 资源调整 Envoy 装备也是网格优化的重要入手点之一。在这个优化方向中,赛题旨在鼓舞参赛者活跃运用服务网格 Istio 及 7 层署理 Envoy 的各项装备和才能,发挥发明性供给可以下降服务网格的资源耗费与进步功能的有用装备。

此优化方向需求对服务网格 Istio 的 Sidecar 与 EnvoyFilter 资源的编写有必定了解。有关 Isito 的 Sidecar 资源,可以参考:

istio.io/latest/docs…

有关 Istio 的 EnvoyFilter 资源,可以参考:

istio.io/latest/docs…

本赛题的评测环境中运用的服务网格的 Istio 版别为 1.12,参赛者在编写 EnvoyFilter 时需留意遵从 Envoy 的 v3 API 进行编写。

3、渠道特性调优

服务网格内的运用及 Sidecar 终究实际都运转于实际的机器节点之上。而咱们相同可以运用机器的渠道特性优化网格内运用的功能体现。在本赛题的评测环境中,Sidecar 之间默许都运用 mTLS 进行通讯,这是服务网格供给的安全特性之一。Sidecar 之间的 mTLS 通讯在进步了集群内运用的安全性的一起,却也会显著下降网格内运用拜访的功能体现(因为 mTLS 完成的加密地道添加了微服务到微服务的推迟时间)。

在上述场景中,可以运用英特尔Multi-Buffer 加解密技能、运用 Intel CPU AVX-512 指令一起处理多个独立的缓冲区,即可以在一个履行周期内一起履行多个加解密的操作,成倍的进步加解密的履行功率,然后进步网格内运用间通讯的功能体现。Multi-Buffer 技能不需求额定的硬件,只需求 CPU 包含特定的指令集。

现在阿里云在 Ice Lake 处理器中现已包含了最新的 AVX-512 指令集。本赛题的评测环境依据阿里云服务网格 ASM。作为业界首个全保管 Istio 兼容的阿里云服务网格产品 ASM,一开端从架构上就保持了与社区、业界趋势的一致性。ASM 产品是依据社区 Istio 定制完成的,在保管的操控面侧供给了用于支撑精细化的流量办理和安全办理的组件才能。在本赛题中,服务网格 ASM 运转于支持 AVX-512 指令集的英特尔Ice Lake 处理器的 ECS 节点之上,并现已集成了英特尔Multi-Buffer 加解密技能。赛题方现已协助参赛者封装了这一技能,参赛者的程序只需求回来 Multi-Buffer 特性敞开的标志,就可以马上启用评测环境中服务网格的 Multi-Buffer 集成技能,进步网格内运用功能。在这个优化方向中,赛题旨在让参赛者活跃运用服务网格与机器渠道硬件特性的结合,体会软硬结合带来的网格功能体现进步。

解题思路

赛题在“网格 Sidecar 功能与资源占用优化”这一大出题下为参赛者供给了三个具体的优化方向,而不同的优化方向之间彼此是比较独立的。因而,解题的思路也分为三个部分进行论述。

1、合理分配 Sidecar 的资源上限

这一方向可说是本次赛题中最为根本的优化方向,也估计会是大部分参赛者都挑选参与的一个优化方向。尽管优化服务网格涉及到许多复杂的概念,但具体到 Sidecar 资源上限分配这一方向上,其实问题笼统后会比较简略:在服务网格中有若干服务(每个服务都由一个或几个具体的 Pod 来供给服务),服务之间有着不知道的调用联系,参赛者的方针是为每个服务的 Sidecar 都指定分配的 CPU 和内存资源上限,终究使得网格内运用拜访的功能(QPS 和时延两项方针)得到最大限度的优化。在调整资源分配的过程中,分配的一切资源量(CPU 和内存)各有一个总的上限。于是,此优化方向自身就可以变成一个典型的方针优化问题;其间变量便是为每个 Sidecar 分配的 CPU 和内存上限,而优化方针则是系统全体的 QPS 和时延。

参赛者的中心方针是供给一套动态调优的算法,经过调整分配给 Sidecar 的 CPU、内存资源值,使得屡次迭代中方针系统的 QPS 到达最大、时延最小,而分配的系统资源总量又不至于太多(因为评分时也会对分配资源过多的状况进行酌情扣分)。

在调优过程中,参赛者可以考虑以下因素对调优的影响:

(1)Sidecar 资源量和功能的联系建模

可以必定的是,分配给 Sidecar 的 CPU 和内存资源量与 Sidecar 处理和转发恳求的功能呈正比。分配的资源越多,Sidecar 的功能越高,网格内运用的拜访延时、QPS 也将得到优化。不过,在为 Sidecar 分配的资源上限到达必定程度时,网格内运用的拜访功能将会反而受制于服务自身处理恳求的功能,功能优化将会呈现边际效应。

在设定为每个 Sidecar 分配的资源值时,因为资源总量存在上限,且分配过多的资源在评分上存在赏罚,因而建模 Sidecar 的 CPU 和内存资源上限与转发功能的联系、防止分配冗余的资源是比较重要的。在每轮的评测过程中,评测方都会运用 Prometheus 搜集 Kubernetes 集群内部每个容器(包括事务容器和 Sidecar 容器)均匀运用的 CPU 和内存资源值,可以运用来建模这一联系,辅导分配合适的 CPU 和内存资源。

(2)调整资源分配的迭代算法

参赛者不能事前 hack 环境中具体运转的服务以及服务间的调用联系,在优化过程中仅有可以获知的便是 Sidecar 发生的拜访日志以及每个容器的资源占用等可观测数据。但是赛题的评测是分多轮进行的,在每一轮都会将上一轮测验发生的可观测数据传回给参赛者的程序。也便是说,参赛者的程序可以收到来自上一轮的分配成果造成的反应。依据此,参赛者可以考虑构建有用的迭代算法,竭尽或许少的轮数迅速将程序的输出迭代至最大优化方针。

(3)有用运用一切数据

在评测的每一轮,参赛者的程序都会收到上一轮测验中每个容器的均匀资源运用量计算,这是来自服务运转环境的最直观反应。不过,每个服务的 Sidecar 容器所发生的的拜访日志包含着更多的信息量。因为 Sidecar 阻拦署理一切恳求,网格中服务间互相拜访的每一条恳求都会对应发生一条 Sidecar 日志。日志中包括了该条恳求的推迟、协议、时间点、发送恳求大小、恳求来源与方针等信息。若可以有用运用,剖析服务间调用的形式以及服务间的具体调用链联系,将有助于更快、更好地决议计划为每个服务的 Sidecar 分配的 CPU 和内存资源量。

2、Sidecar 装备调优

此优化方向比较自在,旨在鼓舞参赛者的发明性,动手编写对网格优化有协助的 Sidecar 及 EnvoyFilter。留意:在本次测评中,运用的服务网格 ASM 版别为 Istio 1.12 的兼容版别,参赛者在编写 Sidecar 或 EnvoyFilter 时,请必须留意需求供给可以兼容 1.12 版别 Istio 的 Sidecar 或 EnvoyFilter YAML。否则,评测过程中服务会无法发动,参赛者将得到 0 分。建议参赛者测验在本地装置服务网格 Istio 先行进行测验、测验好后再将生成 Sidecar/EnvoyFilter 的逻辑写到程序里,避免浪费名贵的提交时机。可参照下方链接来测验装置服务网格 Istio 进行测验:

istio.io/latest/zh/d…

(1)编写 Sidecar(Sidecar 资源)

此处所说的 Sidecar 是指 Sidecar 资源,是服务网格拟定的一种自定义资源。以下将此 Sidecar 与作为服务 Sidecar 的 Envoy 容器别离论述为 Sidecar 资源和 Sidecar 署理。

Sidecar 资源可以声明每个服务的 Sidecar 署理的出入向流量特点。默许状况下,服务网格 Istio 操控面会将 Kubernetes 集群中一切服务的信息都下发给每个服务的 Sidecar 署理。不过,经过编写 Sidecar 资源,网格将会依据 Sidecar 资源装备中描述的流量特点、对服务信息及相关装备进行挑选性下发。因而,编写 Sidecar 资源将具有削减 Sidecar 署理内存占用及优化装备推送过程资源占用的成效。

比如,在供给给参赛者的示例程序中,就默许供给了一个 Sidecar 资源的 YAML:

apiVersion: networking.istio.io/v1alpha3
kind: Sidecar
metadata:
  name: default
spec:
  egress:
  - hosts:
    - "./*"
    - "istio-system/*"

该 YAML 声明晰 default 命名空间下的一切 Sidecar 署理的出向流量都只或许发送到本命名空间或 istio-system 命名空间内的服务,然后可以在 Sidecar 署理的装备中排除其它命名空间内的服务。

参赛者完全有才能进行进一步的优化。比如说在拜访日志中就隐含着服务之间的调用联系(仅仅需求必定的解析),参赛者可以设法实时剖析服务的调用链,并依据调用链信息生成自定义的 Sidecar 资源、运用到服务网格中以优化 Sidecar 署理的资源占用。

(2)编写 EnvoyFilter

EnvoyFilter 的才能非常自在,其本质实际便是编写原始的 Envoy 运用装备后直接合并到现有的 Envoy 运用的装备之中。因而,参赛者完全可以发挥发明力,对网格中的 Sidecar 署理装备进行任何或许的变更、以协助自己进行功能优化。比如说,参赛者可以测验修正 http 协议装备下的某些参数或删除某些过滤器、优化恳求处理的功能体现。又比如,参赛者可以添加日志中输出的字段来为自己的程序供给愈加丰富的信息。

例如,下方的 EnvoyFilter 在日志中添加了新的字段 envoy_lua。

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
spec:
  configPatches:
    - applyTo: NETWORK_FILTER
      match:
        context: ANY
        listener:
          filterChain:
            filter:
              name: envoy.filters.network.http_connection_manager
        proxy:
          proxyVersion: ^1.12.*
      patch:
        operation: MERGE
        value:
          typed_config:
            '@type': >-
              type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
            access_log:
              - name: envoy.access_loggers.file
                typed_config:
                  '@type': >-
                    type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog
                  path: /dev/stdout
                  log_format:
                    json_format:
                      envoy_lua: '%DYNAMIC_METADATA(envoy.lua)%'

尽管 EnvoyFilter 的自在度非常高,但自在度的价值是很有或许因为错误的 EnvoyFilter 装备的导致集群中的服务无法发动。在这种状况下参赛者会得到 0 分,因而请谨慎运用。

3、渠道特性调优

此方向旨在期望参赛者可以有用运用服务网格 ASM 与英特尔Multi-Buffer 加解密技能的软硬结合特性来进一步进步网格功能体现。

实际上,服务网格 ASM 已将硬件特性集成的部分进行了封装,参赛者只需传达给测评程序敞开此特性即可对网格进行优化。对此,赛题方的评价是此处无需考虑太多,开就完事了,期望每个参赛者都可以感受到软硬结合的强大才能。

总结

本文从赛题布景、赛题解析和解题思路的视点,对本届竞赛标题进行了剖析,介绍了在三个方向下服务网格的优化思路。期望对即将参与竞赛的同学们能有所协助。在此预祝各位参赛选手能获得优异的成果,进军复赛和总决赛,咱们在决赛辩论等你。

点击此处,当即报名!