解密最受欢迎的开源 Serverless 框架:流量篇

这篇具有很好参考价值的文章主要介绍了解密最受欢迎的开源 Serverless 框架:流量篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

解密最受欢迎的开源 Serverless 框架:流量篇,云栖号技术分享,开源,serverless,云原生,云计算,阿里云

对于 web 应用来说,通过请求流量的并发数、qps、rt 等指标,可以很好的衡量当前的 web 服务质量。Knative 中提供了基于请求驱动的 Serverless 能力,包括多版本管理流量,流量访问,基于流量的弹性以及监控等。本文从流量角度出发,为您解密 Knative 相关的能力。

Knative 是一款基于 Kubernetes 的开源 Serverless 应用编排框架,其目标是制定云原生、跨平台的 Serverless 应用编排标准。Knative 主要功能包括基于请求的自动弹性、缩容到 0、多版本管理、基于流量的灰度发布、函数部署以及事件驱动等。

流量管理

如何做蓝绿发布

我们首先看一下,在 K8s 中如果要做基于流量的蓝绿发布需要怎么做?

解密最受欢迎的开源 Serverless 框架:流量篇,云栖号技术分享,开源,serverless,云原生,云计算,阿里云

首先需要创建对应的 K8s Service 与 Deployment,如果需要弹性,则还需要配置 HPA,然后在流量灰度发布时,要创建新的版本。以上图为例,创始版本是 v1,要想实现流量灰度发布,我们需要创建一个新的版本 v2。创建 v2 时,要创建对应的 Service、Deployment、HPA。创建完之后通过 Ingress 设置对应的流量比例,最终实现流量灰度发布的功能。显然,在 K8s 要做基于流量的蓝绿发布,需要管理多种资源,并且随着版本的迭代,管理起来会更加复杂。

而在 Knative 做到基于流量的灰度发布,只需要面向 Knative Service 一个资源对象,调整流量比例即可。

解密最受欢迎的开源 Serverless 框架:流量篇,云栖号技术分享,开源,serverless,云原生,云计算,阿里云

Knative 提供了 Serverless 应用模型的抽象:Service。Knative Service 中包含两部分配置,一部分用于配置工作负载,叫做 Configuration,每次 Configuration 内容更新都会创建一个新的 Revision。另一部分 Route 主要负责 Knative 的流量管理。可以这样理解:Knative Revision

解密最受欢迎的开源 Serverless 框架:流量篇,云栖号技术分享,开源,serverless,云原生,云计算,阿里云

Ingress + Service + Deployment + 弹性(HPA) 。一个 Knative Service 流量配置示例如下:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: example-service
  namespace: default
spec:
...
  traffic:
  - percent: 0
    revisionName: example-service-1
    tag: staging
  - percent: 40
    revisionName: example-service-2
  - percent: 60
    revisionName: example-service-3

不同的 revision 版本之间只需要配置对应的流量比例,即可进行流量的蓝绿发布。而回滚到原版本的操作亦是如此,只需要将新版本的流量切回到 0,原版本设置为 100 即可。

指定 tag 进行版本验证

在实际发布新版本上线时,对于新版本我们往往需要在切入生产流量之前验证这个版本是否有问题,但这时候新版本流量为 0,如果进行验证呢?Knative 中提供了 tag 机制可以做到。也就是对某个版本打上 tag,然后 Knative 会自动生成改 tag 的访问地址。

例如,上面的 example-service-1 版本中设置了 staging 的 tag,就会创建一个 http://staging-example-service.default.example.com 的访问地址。通过这个访问地址就可以直接验证 example-service-1 版本,而不用担心线上流量访问该版本,做到了指定版本验证的能力。

Revision 版本的 GC 策略

Knative Service 每次修改就会创建新的版本,而随着迭代的加速,必然会导致很多历史版本,那么对历史版本如何清理呢?Knative 中提供了版本自动清理能力。可以通过 config-gc 配置 GC 策略。这里的参数说明一下:

  • retain-since-create-time:表示 revision 从创建时间开始多长时间保留,默认是 48 小时。
  • retain-since-last-active-time:表示从最后一次活跃状态(表示被 route 引用,即使 traffic 配置为 0,只要被引用也就表示活跃)开始多长时间保留,默认是 15 小时。
  • min-non-active-revisions:最少非活跃的版本数,默认是 20 个版本数。
  • max-non-active-revisions:最大非活跃的版本数,默认是 1000 版本数。
apiVersion: v1
kind: ConfigMap
metadata:
  name: config-gc
  namespace: knative-serving
  labels:
    app.kubernetes.io/name: knative-serving
    app.kubernetes.io/component: controller
    app.kubernetes.io/version: "1.8.2"
data:
  _example: |
    # ---------------------------------------
    # Garbage Collector Settings
    # ---------------------------------------
    # Duration since creation before considering a revision for GC or "disabled".
    retain-since-create-time: "48h"
    # Duration since active before considering a revision for GC or "disabled".
    retain-since-last-active-time: "15h"
    # Minimum number of non-active revisions to retain.
    min-non-active-revisions: "20"
    # Maximum number of non-active revisions to retain
    # or "disabled" to disable any maximum limit.
    max-non-active-revisions: "1000"

例如,如果要配置立即回收 inactive revision,可以这样配置:

min-non-active-revisions: "0"
max-non-active-revisions: "0"
retain-since-create-time: "disabled"
retain-since-last-active-time: "disabled"

例如,如果要配置只保留 10 个 inactive revision,可以这样配置:

retain-since-create-time: "disabled"
retain-since-last-active-time: "disabled"
max-non-active-revisions: "10"

流量访问

多网关支持

为了满足不同场景的诉求,我们提供了多样化的网关能力,包括 ALB、MSE、ASM 以及 Kourier 网关。

ALB

阿里云应用型负载均衡 ALB(Application Load Balancer) 之上提供更为强大的 Ingress 流量管理方式,提供全托管免运维的方式,并且提供自动弹性能力。

解密最受欢迎的开源 Serverless 框架:流量篇,云栖号技术分享,开源,serverless,云原生,云计算,阿里云

配置 ALB 网关,只需要在 config-network 进行如下设置

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-network
  namespace: knative-serving
  labels:
    app.kubernetes.io/name: knative-serving
    app.kubernetes.io/component: networking
    app.kubernetes.io/version: "1.8.2"
data:
  ingress.class: "alb.ingress.networking.knative.dev"
  ...

微服务网关 MSE

MSE 云原生网关是兼容 K8s Ingress 标准的下一代网关产品,将传统的流量网关和微服务网关功能合并。Knative 结合 MSE 网关支持基于请求的精准自动弹性(mpa),支持精准控制单个 Pod 请求并发处理数。

解密最受欢迎的开源 Serverless 框架:流量篇,云栖号技术分享,开源,serverless,云原生,云计算,阿里云

配置 MSE 网关,只需要在 config-network 进行如下设置:

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-network
  namespace: knative-serving
  labels:
    app.kubernetes.io/name: knative-serving
    app.kubernetes.io/component: networking
    app.kubernetes.io/version: "1.8.2"
data:
  ingress.class: "mse.ingress.networking.knative.dev"
  ...

服务网格 ASM(Istio)

阿里云服务网格(简称 ASM)是一个统一管理微服务应用流量、兼容 Istio 的托管式平台。通过流量控制、网格观测以及服务间通信安全等功能,服务网格 ASM 可以全方位地简化服务治理。

解密最受欢迎的开源 Serverless 框架:流量篇,云栖号技术分享,开源,serverless,云原生,云计算,阿里云

Knative 天然支持与 Istio 的集成,因此只需要在 config-network 配置 istio.ingress.networking.knative.dev 即可:

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-network
  namespace: knative-serving
  labels:
    app.kubernetes.io/name: knative-serving
    app.kubernetes.io/component: networking
    app.kubernetes.io/version: "1.8.2"
data:
  ingress.class: "istio.ingress.networking.knative.dev"
  ...

Kourier

Kourier 是一个基于 Envoy 架构实现的轻量级网关,提供 Knative Revisions 流量分发,支持 gRPC 服务、超时和重试、TLS 证书和外部认证授权等功能。

解密最受欢迎的开源 Serverless 框架:流量篇,云栖号技术分享,开源,serverless,云原生,云计算,阿里云

只需要在 config-network 配置 kourier.ingress.networking.knative.dev 即可:

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-network
  namespace: knative-serving
  labels:
    app.kubernetes.io/name: knative-serving
    app.kubernetes.io/component: networking
    app.kubernetes.io/version: "1.8.2"
data:
  ingress.class: "kourier.ingress.networking.knative.dev"
  ...

上述网关总的来说,ALB 专注与应用负载均衡,云原生网关 MSE 专注于微服务场景,而 ASM 提供了服务网格(Istio)的能力,用户可以结合自身的业务场景选择相应的云产品网关产品,当然如果用户仅需基础的网关能力,也可以选择 Kourier。

选择适合自己的 Knative 网关请参考:https://help.aliyun.com/zh/ack/serverless-kubernetes/user-guide/select-a-gateway-for-knative

多协议支持

Knative 支持多种访问协议:HTTP、gRPC 以及 WebSocket。一个 Knative gRPC 服务配置示例如下:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-grpc
spec:
  template:
    metadata:
      annotations:
        autoscaling.knative.dev/class: kpa.autoscaling.knative.dev
    spec:
      containers:
      - image: docker.io/moul/grpcbin # 该镜像是一个用于测试gRPC的工具,它通过提供gRPC服务来响应请求。
        env:
        - name: TARGET
          value: "Knative"
        ports:
        - containerPort: 9000
          name: h2c
          protocol: TCP

gRPC 服务在 Knative 服务中 port 字段下的 name 设置为 h2c。

此外,为了满足单个服务同时暴露 HTTP 和 gRPC 的诉求,我们也扩展了 Knative 能力,支持同时配置 HTTP 和 gRPC 服务暴露,配置示例如下:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-grpc
  annotations:
    knative.alibabacloud.com/grpc: grpcbin.GRPCBin
spec:
  template:
    metadata:
      annotations:
        autoscaling.knative.dev/class: kpa.autoscaling.knative.dev
    spec:
      containers:
      - image: docker.io/moul/grpcbin
        args:
        - '--production=true'
        env:
        - name: TARGET
          value: "Knative"
        ports:
        - containerPort: 80
          name: http1
          protocol: TCP
        - containerPort: 9000
          name: h2c
          protocol: TCP

自定义域名

在 Knative 中,可以对单独的 Knative Service 自定义域名,也支持全景的域名后缀配置,此外也支持自定义 path。

为单独服务自定义域名

如果想自定义单个 Service 的域名,可以使用 DomainMapping。DomainMapping 配置模版如下:

apiVersion: serving.knative.dev/v1alpha1
kind: DomainMapping
metadata:
  name: <domain-name>
  namespace: <namespace>
spec:
  ref:
    name: <service-name>
    kind: Service
    apiVersion: serving.knative.dev/v1
  tls:
    secretName: <cert-secret>
  • <domain-name> 设置服务域名
  • <namespace> 设置命名空间,与服务所在的命名空间一致
  • <service-name> 目标服务名称
  • <cert-secret>(可选)证书 secret 名称

自定义全局域名后缀

可以通过修改 config-domain,配置全局域名后缀。如使用 http://mydomain.com 替换掉 http://example.com。修改配置如下即可:

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-domain
  namespace: knative-serving
data:
  mydomain.com: ""

自定义 Path

此外,可以通过 http://knative.aliyun.com/serving-ingress 注解,配置自定义的路由 Path,示例如下:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: coffee-mydomain
  annotations:
    knative.aliyun.com/serving-ingress: cafe.mydomain.com/coffee
spec:
  template:
    metadata:
    spec:
      containers:
        - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc

流量弹性

Knative 提供基于流量请求的自动扩缩容 KPA(Knative Pod Autoscaler)能力。实现原理是:Knative Serving 会为每个 Pod 注入一个名为 queue-proxy 的 QUEUE 代理容器,该容器负责向 Autoscaler 报告业务容器的并发指标。Autoscaler 接收到这些指标之后,会根据并发请求数及相应的算法,调整 Deployment 的 Pod 数量,从而实现自动扩缩容。

解密最受欢迎的开源 Serverless 框架:流量篇,云栖号技术分享,开源,serverless,云原生,云计算,阿里云

Knative Pod Autoscaler(KPA)基于每个 Pod 的平均请求数(或并发数)进行自动扩缩容,Knative 默认使用基于并发数的自动弹性,每个 Pod 的最大并发数为 100。此外,Knative 还提供了目标使用率(target-utilization-percentage)的概念,用于指定自动扩缩容的目标使用率。

基于并发数弹性为例,Pod 数计算方式如为:Pod 数=并发请求总数/(Pod 最大并发数*目标使用率)。

例如,如果服务中 Pod 最大并发数设置为 10,目标使用率设置为 0.7,此时如果接收到了 100 个并发请求,则 Autoscaler 就会创建 15 个 Pod(即 100/(0.7*10)≈15)。

此外当请求为 0 时,支持 Pod 数自动缩容到 0 。

具体 Knative 弹性介绍详见:《解密最受欢迎的开源 Serverless 框架弹性技术实现》

流量监控

Knative 如何采集流量指标,关键还是 queue-proxy。queue-proxy 除了用于流量弹性之外,还提供 Promethues 指标暴露,如请求数,并发数,响应时长等。其端口说明如下:


• 8012:queue-proxy 代理的 http 端口,流量的入口都会到 8012
• 8013:http2 端口,用于 grpc 流量的转发
• 8022:queue-proxy 管理端口,如健康检查
• 9090: queue-proxy 的监控端口,暴露指标供 autoscaler 采集,用于 kpa 扩缩容
• 9091:prometheus 应用监控指标(请求数,响应时长等)
• USER_PORT,是用户配置的容器端口,即业务实际暴露的服务端口,在 ksvc container port 配置的

解密最受欢迎的开源 Serverless 框架:流量篇,云栖号技术分享,开源,serverless,云原生,云计算,阿里云

通过 Prometheus 采集到的关键指标如下:

解密最受欢迎的开源 Serverless 框架:流量篇,云栖号技术分享,开源,serverless,云原生,云计算,阿里云

此外 Knative 提供了 grafana 大盘:https://github.com/knative-extensions/monitoring/tree/main/grafana

阿里云容器服务 Knative 集成了该 grafana大盘, 提供了开箱即用的可观测能力,通过大盘可以查看请求数、请求成功率、Pod 扩缩容趋势以及请求响应延迟等。Overview:可以查看 Knative 的请求量、请求成功率、4xx(客户端错误)、5xx(服务器端错误)和 Pod 扩缩容趋势的监控数据。

解密最受欢迎的开源 Serverless 框架:流量篇,云栖号技术分享,开源,serverless,云原生,云计算,阿里云

大盘数据的纵轴 ops/sec 表示每秒处理请求数。

Response Time:可以查看 Knative 的响应延迟数据,包括 P50、P90、P95 和 P99。

解密最受欢迎的开源 Serverless 框架:流量篇,云栖号技术分享,开源,serverless,云原生,云计算,阿里云

Autoscaler:可以查看 Knative 的请求并发数的详细数据。

解密最受欢迎的开源 Serverless 框架:流量篇,云栖号技术分享,开源,serverless,云原生,云计算,阿里云

Resource Usages:可以查看 Knative 的资源使用量情况,包括 CPU 和内存。

解密最受欢迎的开源 Serverless 框架:流量篇,云栖号技术分享,开源,serverless,云原生,云计算,阿里云

基于这些指标,我们可以很容易计算出 1 个请求的资源使用量。

小结

本文介绍了 Knative 流量管理、流量访问、基于流量的弹性以及监控,并且我们提供了丰富的云产品网关能力,适用于不同的业务场景。可以看到基于 Knative,可以轻松做到基于流量的按需使用、自动弹性的 Severless 能力。

作者:元毅

原文链接

本文为阿里云原创内容,未经允许不得转载。文章来源地址https://www.toymoban.com/news/detail-830817.html

到了这里,关于解密最受欢迎的开源 Serverless 框架:流量篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 50个最受欢迎的大数据面试问题

    大数据时代才刚刚开始。随着越来越多的公司倾向于大数据来运营他们的业务,对人才的需求空前高涨。这对您意味着什么?如果您想在任何大数据岗位上工作,它只会转化为更好的机会。您可以选择成为数据分析师,数据科学家,数据库管理员,大数据工程师,Hadoop大数据

    2023年04月14日
    浏览(39)
  • NineData已支持「最受欢迎数据库」PostgreSQL

    根据在 Stack Overflow 发布的 2023 开发者调研报告中显示,PostgreSQL 以 45% vs 41% 的受欢迎比率战胜 MySQL,成为新的最受欢迎的数据库。NineData 也在近期支持了 PostgreSQL,用户可以在 NineData 平台上进行创建数据库/Schema、管理用户与角色、导出数据、执行 SQL 等操作。另外,NineData

    2024年02月15日
    浏览(55)
  • 2023 年 10 个最受欢迎的 Linux 发行版

    动动发财的小手,点个赞吧! 在 本文 [1] 中,我们将根据 Distrowatch 的使用统计数据和市场份额,按降序排列截至 2023 年 5 月 18 日的前 10 个最受欢迎的 Linux 发行版。 Deepin(原名Deepin、Linux Deepin、Hiweed GNU/Linux)是从Debian衍生出来的面向Linux桌面的操作系统,支持笔记本、台式

    2024年02月16日
    浏览(33)
  • Linux | 人生苦短,我用Vim【最受欢迎的编辑器】

    Vim 是从 vi 发展出来的一个文本编辑器。 代码补全、编译及错误跳转 等方便编程的功能特别丰富,在程序员中被广泛使用,和【Emacs】并列成为类Unix系统用户最喜欢的文本编辑器 对于vim来说,不同的是vim是vi的 升级版本 ,它不仅兼容vi的所有指令,而且 还有一些新的特性在

    2024年01月19日
    浏览(37)
  • 开源 Serverless 框架 Laf 性能优化实践

    Laf 是一个完全开源的 Serverless 框架,Laf 的 Node.js 运行时容器 (以下简称为 Runtime ) 是 Laf 的 函数执行环境 ,依托于 Express.js 框架。采用容器进程常驻的方式,每一个应用对应于一个或多个容器 (弹性伸缩下),底层使用了 Node.js 的 vm 模块,使用 MongoDB 的 watch() 方法来监听函数

    2024年02月04日
    浏览(40)
  • 数据分析实战丨基于pygal与requests分析GitHub最受欢迎的Python库

    本期内容: 基于pygal与requests分析GitHub最受欢迎的30个Python库 实验环境: python requests pygal 下载地址:https://download.csdn.net/download/m0_68111267/88719839 在现实的应用中,我们经常会使用爬虫分析网络数据,本期博主将用pygal+requests简单对github最受欢迎的30个python库做可视化分析(以

    2024年02月01日
    浏览(35)
  • (DTU数据集、Tanks and Temples 数据集、ETH3D 数据集、BlendedMVS数据集 ) 深度学习三维重建MVS论文中最受欢迎的大型数据集

    近几年,在MVS类论文中使用最为广泛的大型数据集分别是DTU数据集、Tanks and Temples 数据集、ETH3D 数据集 、数据集。 对于基于学习的MVS训练,深度图是必不可少的,而评估是基于点云的。对基于平面扫描的多视图立体视觉技术的深度学习中,如果一个数据集不包含地面真实摄

    2024年02月05日
    浏览(37)
  • 漏洞攻击中怎么去做最全面覆盖的sql注入漏洞攻击?表信息是如何泄露的?预编译就一定安全?最受欢迎的十款SQL注入工具配置及使用

    漏洞攻击中怎么去做最全面覆盖的sql注入漏洞攻击?表信息是如何泄露的?预编译就一定安全?最受欢迎的十款SQL注入工具配置及使用。 SQL注入是因为后台SQL语句拼接了用户的输入,而且Web应用程序对用户输入数据的合法性没有判断和过滤,前端传入后端的参数是攻击者可控

    2024年01月24日
    浏览(43)
  • 加解密在开源SpringBoot/SpringCloud微服务框架的最佳实践

    前期内容导读: Java开源RSA/AES/SHA1/PGP/SM2/SM3/SM4加密算法介绍 Java开源AES/SM4/3DES对称加密算法介绍及其实现 Java开源AES/SM4/3DES对称加密算法的验证说明 Java开源RSA/SM2非对称加密算法对比介绍 Java开源RSA非对称加密算法实现 Java开源SM2非对称加密算法实现 Java开源接口微服务代码框架

    2024年02月09日
    浏览(42)
  • 共赴开源路,共筑新丰碑!2022云栖大会龙蜥操作系统峰会圆满落幕!

    72  小时融合、开放、硬核的数字创新大会 60+ 场数字技术、产业与生态峰会和论坛 40000  平米智能科技大展,全链路元宇宙体验 1000+ 项最热科技新品发布 ...... 2022 年 11 月 3-5 日,云栖大会龙蜥操作系统峰会各路大咖云集,1 场主论坛,3 场 Workshop 专场,来自统信软件、移动

    2024年02月11日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包