CN116755764B - 一种自动伸缩的无侵入式灰度发布系统 - Google Patents

一种自动伸缩的无侵入式灰度发布系统 Download PDF

Info

Publication number
CN116755764B
CN116755764B CN202311054986.6A CN202311054986A CN116755764B CN 116755764 B CN116755764 B CN 116755764B CN 202311054986 A CN202311054986 A CN 202311054986A CN 116755764 B CN116755764 B CN 116755764B
Authority
CN
China
Prior art keywords
service
gray
container
module
kubernetes
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202311054986.6A
Other languages
English (en)
Other versions
CN116755764A (zh
Inventor
张祥振
林大伟
郑斌
孙振
王洁
张楠
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shandong Inspur Digital Business Technology Co Ltd
Original Assignee
Shandong Inspur Digital Business Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shandong Inspur Digital Business Technology Co Ltd filed Critical Shandong Inspur Digital Business Technology Co Ltd
Priority to CN202311054986.6A priority Critical patent/CN116755764B/zh
Publication of CN116755764A publication Critical patent/CN116755764A/zh
Application granted granted Critical
Publication of CN116755764B publication Critical patent/CN116755764B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/51Discovery or management thereof, e.g. service location protocol [SLP] or web services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3006Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is distributed, e.g. networked systems, clusters, multiprocessor systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3051Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/2866Architectures; Arrangements
    • H04L67/30Profiles

Abstract

本发明公开了一种自动伸缩的无侵入式灰度发布系统,属于通信技术领域,要解决的技术问题为如何满足复杂系统对性能、高可用性、可定制性和无侵入性的需求,实现无入侵的灰度发布。包括灰度发布服务实例集群模块、资源监控模块和自动伸缩模块;灰度发布服务实例集群模块用于在Kubernetes集群中创建和管理服务实例;资源监控模块用于定期收集资源监控度量数据;自动伸缩模块用于支持用户对资源使用率阈值和灰度发布服务实例的自动伸缩范围进行配置;用于判断是否需要创建新的服务实例或者销毁不健康的服务实例,并与灰度发布服务实例集群模块配合、根据计算结果对服务实例集群进行伸缩。

Description

一种自动伸缩的无侵入式灰度发布系统
技术领域
本发明涉及通信技术领域,具体地说是一种自动伸缩的无侵入式灰度发布系统。
背景技术
随着软件开发业务逐渐复杂化,如何在不中断服务的情况下将新功能或版本推向生产环境,这成为一个需要解决的重要问题。灰度发布即为此提供了一种解决方案,它允许开发团队逐渐将新版本推向生产环境,从而降低了全面发布可能带来的风险。
灰度发布涉及到将请求按照一定的规则分发到新版本和旧版本的服务实例上,因此它需要处理请求路由、服务发现和负载均衡等问题。传统的解决方案通常会将这些功能集成在一个中心化的组件中,如API网关或服务网格。使用Kubernetes的Ingress进行灰度发布就是这样一种传统的解决方案,其中Ingress Controller(如NGINX IngressController、Traefik等)就扮演了中心化的组件角色。Ingress是Kubernetes中用来管理外部请求访问集群的内部服务的对象,它可以定义一组路由规则,以便外部流量可以访问到集群内部的服务。Ingress Controller则是一个负责实施Ingress资源所定义的路由规则的Pod。
这种集成式的解决方案存在如下一些问题:
(1)性能:由于所有的请求都需要经过这个中心化的组件,所以它可能成为系统的性能瓶颈和单点故障,例如,在使用Ingress进行灰度发布时,某些基于Go语言实现的Ingress Controller在处理高并发请求时,可能会由于Go的垃圾回收等因素导致性能开销较大;
(2)扩展复杂:针对性能问题,可以通过水平扩展来提高处理能力,即通过增加更多的实例来分摊流量,但这种扩展方式会增加系统的复杂性,如负载均衡、实例管理和同步等问题;
(3)灰度规则的可定制性较差:系统的中心组件通常提供一组预定义的功能,如请求路由、身份验证、限流等,而这些功能往往是固定的,无法进行深度定制;
(4)侵入性:系统的中心组件要处理所有进出的流量,并提供请求路由、身份验证、限速等功能,为了使用这些功能,应用程序往往需要进行一定的修改或配置,例如,为了实现基于标签的路由,服务可能需要在部署时添加特定的标签,这种对应用或服务的修改或配置需求,就构成了一种侵入性。
如何满足复杂系统对性能、高可用性、可定制性和无侵入性的需求,实现无入侵的灰度发布,是需要解决的技术问题。
发明内容
本发明的技术任务是针对以上不足,提供一种自动伸缩的无侵入式灰度发布系统,来解决如何满足复杂系统对性能、高可用性、可定制性和无侵入性的需求,实现无入侵的灰度发布的技术问题。
本发明一种自动伸缩的无侵入式灰度发布系统,包括服务实例集群模块、资源监控模块和自动伸缩模块;
所述服务实例集群模块用于使用Kubernetes的Deployment或StatefulSet在Kubernetes集群中创建和管理服务实例,包括执行如下:暴露资源监控度量,将容器化后的灰度环境、生产环境、灰度规则服务器以及OpenResty运行于Kubernetes集群中,通过OpenResty实现无侵入式的灰度发布服务,其中,资源监控度量包括基础资源监控度量和自定义的监控度量;
所述资源监控模块与所述服务实例集群模块交互,用于定期收集资源监控度量数据,所述资源监控度量数据包括反映系统资源使用情况的基础资源监控度量数据以及自定义的监控度量数据;
所述自动伸缩模块分别与所述资源监控模块以及所述服务实例集群模块交互,并通过API Server提供用户接口,用于通过用户接口支持用户对资源使用率阈值和灰度发布服务实例的自动伸缩范围进行配置,形成配置文件;用于基于资源监控度量数据、预配置的资源使用率阈值以及自动伸缩算法,判断是否需要创建新的服务实例或者销毁不健康的服务实例,计算出需要调整的服务实例数量,并与服务实例集群模块配合、根据计算结果对服务实例集群进行伸缩。
作为优选,通过OpenResty实现无侵入式的灰度发布服务,包括如下步骤:
HTTP请求到达OpenResty后,OpenResty中的Lua模块提取出HTTP请求中的标识,并通过调用灰度规则服务器的API将标识传送至灰度规则服务器,其中,标识包括IP地址、浏览器类型以及登录状态;
灰度规则服务器利用预配置的灰度规则判断接受的标识是否是为灰度标识,并把判断结果返回OpenResty;
OpenResty根据收到的判断结果将对应的HTTP请求路由至生产环境或者灰度环境。
作为优选,所述服务实例集群模块用于执行如下建立无侵入式灰度发布服务实例集群:
暴露应用自定义的监控度量数据:应用为在Pod内运行的应用,在应用中集成一个支持Prometheus的度量库作为客户端库,应用会通过客户端库创建一个HTTP endpoint,并在HTTP endpoint上提供应用的自定义的度量数据,度量数据的格式符合Prometheus的数据格式,Prometheus的数据采集机制会采集到应用自定义的度量数据,应用自定义的度量数据包括请求延迟、每秒查询率、请求错误率、队列长度和业务指标;
容器化:执行如下四个操作:将OpenResty服务、灰度规则管理服务、生产环境以及灰度环境容器化,即为每个服务创建一个对应的Dockerfile,Dockerfile中包含对应服务的所有依赖项和配置文件,还包括一个启动脚本,启动脚本在服务启动时动态地从环境变量或配置映射中读取配置参数;
在Kubernetes中部署应用程序:在Kubernetes中创建一个Deployment,Deployment中定义有OpenResty容器的运行参数、资源限制和创建OpenResty实例集群所需的副本数;在定义Deployment的YAML文件中,在Pod模板的元数据部分添加Prometheus的注解,Prometheus的注解用于提示Prometheus从哪个endpoint中抓取度量数据;
服务发现和负载均衡:创建一个Kubernetes Service,将流量路由到OpenResty实例,Kubernetes Service选择性提供一个稳定的网络接口,网络接口允许其他服务和客户端发现和连接到OpenResty实例;
更新灰度规则:OpenResty实例通过定时任务定期调用灰度规则服务器的API,获取最新的灰度规则,定时任务使用OpenResty的ngx.timer模块定期发送HTTP请求以调用灰度规则管理模块的API;
执行灰度规则:在OpenResty的配置文件中,配置Lua模块,配置后的Lua模块能够提取出灰度服务请求中的标识,并通过调用灰度规则服务器的API将灰度服务请求传给灰度规则服务器,OpenResty根据灰度规则服务器返回的结果来路由灰度服务请求。
作为优选,灰度发布服务实例集群包括:
Master Node,所述Master Node作为灰度发布服务实例集群的管理节点,用于管理集群内所有节点,通过主服务器向集群节点发送创建容器、部署容器以及发布容器的功能,并对来自集群外部的数据进行接受和分配;
Worker Node,所述Worker Node作为灰度发布服务实例集群的工作节点,运行于应用容器,并提供Kubernetes运行时环境;
Pod,所述Pod为Kubernetes的最小部署单元,每个Pod内包含至少一个容器,容器共享存储、网络和运行配置,在Kubernetes集群中,Pod能够在Worker Nodes上进行调度和运行,能够由包括Deployment和StatefulSet的高级API控制,以实现包括副本控制以及滚动升级的应用管理功能;
Canary Environment容器,所述Canary Environment容器作为灰度环境容器,当进行灰度发布服务时,用于部署最新版本的服务应用;
Production Environment容器,所述Production Environment容器作为生产环境容器,用于运行当前稳定版本的服务应用,当新版本的服务应用在灰度环境中经过测试并被认为稳定后,新版本的服务应用会被部署于生产环境容器中,并取代当前稳定版本的服务应用;
Canary Rules Server容器,所述Canary Rules Server容器作为灰度规则服务器容器,用于运行存储和管理灰度规则的服务,灰度规则包括决定哪些HTTP请求应该被路由到灰度环境的规则以及哪些HTTP请求应该被路由到生产环境的规则,所述灰度规则基于各种属性,包括用户的IP地址、浏览器类型以及登录状态;
OpenResty容器,所述OpenResty容器中运行有OpenResty,OpenResty被配置为一个代理服务器,用于提供如下OpenResty服务:接收到所有的进入流量,并根据灰度规则服务器提供的灰度规则、将流量路由到灰度环境容器或生产环境容器。
作为优选,所述Worker Node包括Kubelet组件、Kube-proxy组件以及ContainerRuntime,
Kubelet组件用于维护Pod的生命周期,执行包括启动容器、停止容器的任务,并与Master Node进行通信;
Kube-proxy组件实现了Kubernetes服务的网络规则,并进行连接转发;
Container Runtime组件用于负责运行容器。
作为优选,Deployment用于部署无状态的应用,StatefulSet用于部署有状态的应用。
作为优选,所述资源监控模块包括Kubelet组件、Metrics Server组件、Prometheus以及Prometheus Adapter组件,
Kubelet组件是Kubernetes集群中每个节点上的核心组件,作为一个代理服务,用于与对应节点上运行的容器进行通信,并管理容器的生命周期和资源分配,Kubelet组件用于定期收集基础资源监控度量数据,并将基础资源监控度量数据发送至Metrics Server组件,基础资源监控度量数据包括容器的CPU、内存、磁盘和网络带宽的使用情况;
Metrics Server是Kubernetes的一个组件,用于定时从每个节点的Kubelet组件收集基础资源监控度量数据,并发送至Prometheus;
Prometheus是一个独立的监控系统,在Prometheus的配置文件中,添加有scrape配置,基于scrape配置,Prometheus可以抓取带有Prometheus注解的Pod的容器的自定义的监控度量数据,Prometheus会定期从Metrics Server组件和Pod抓取资源监控度量数据,并存储于自身的时间序列数据库中,以为自动伸缩模块提供决策数据;
Prometheus Adapter用于作为连接Prometheus和Kubernetes的桥梁,实现了Kubernetes的Metrics API,允许Kubernetes查询和使用存储在Prometheus中的资源监控度量数据。
作为优选,Prometheus提供有查询接口,通过查询接口支持用户查询历史和实时的资源监控度量数据,Prometheus中配置有告警规则,当资源监控度量数据符合告警规则中定义的告警条件时触发告警。
作为优选,所述自动伸缩模块包括APIServer、HPA组件、Scale API、Deployment以及ReplicaSet,
所述APIServer提供用户接口,通过用户接口支持用户创建HPA组件,即支持用户通过YAML配置文件设置资源使用率阈值,如系统的QPS(Query Per Second,每秒查询率)、CPU的使用率和内存的使用量;设置灰度发布服务实例的自动伸缩范围(即服务实例的最大数量和最小数量),其中,灰度发布服务实例的自动伸缩范围包括服务实例的最大数量和最小数量;
HPA组件是Kubernetes中自动扩缩容的组件,用于定期从资源监控模块中获取资源监控度量数据,并将获取的资源监控度量数据与预设置的资源使用率阈值进行比较,计算出需要调整的服务实例数量,并根据计算结果、通过调用Scale API来实现伸缩;
Scale API 是 Kubernetes 提供的一种资源,用于更改 Deployment和ReplicaSet中定义的 Pod 的数量;
Deployment是一种高级控制器,用于通过定义期望的Pod副本数量和Pod模板,控制 ReplicaSet,从而实现对应用的操作,操作包括扩展、更新和滚动回滚;
一个Deployment管理一组ReplicaSet,并通过ReplicaSet管理一组Pod,Deployment通过滚动更新的方式来对灰度发布服务实例集群进行伸缩。
作为优选,Deployment通过滚动更新的方式来对灰度发布服务实例集群进行伸缩,包括如下操作:
创建一个Deployment时,Deployment控制器创建一个新的ReplicaSet,ReplicaSet的模板来自Deployment的Pod模板,副本数则来自Deployment的spec.replicas字段; ReplicaSet 控制器根据ReplicaSet 的模板和副本数、创建一组新的Pod;
当更新一个Deployment的Pod模板时,Deployment控制器创建一个新的ReplicaSet,并根据新的Pod模板创建一组新的Pod,Deployment控制器逐步将旧的ReplicaSet的副本数减少,同时将新的ReplicaSet的副本数增加,直到旧的ReplicaSet的副本数为0,新的ReplicaSet的副本数于Deployment的spec.replicas字段。
本发明的一种自动伸缩的无侵入式灰度发布系统具有以下优点:
1、通过OpenResty实现灰度发布,极大地提高了灰度发布系统的性能和可定制性,具体来说,OpenResty的事件驱动模型使其在处理高并发请求时具有出色的性能,可以有效地避免性能瓶颈的出现,另外,OpenResty通过Lua脚本提供了高度可定制的灰度规则,这意味着可以根据业务需求,实现对灰度发布过程的细粒度控制;
2、利用Kubernetes的HPA组件来实现灰度发布服务实例集群的自动伸缩,这提高了灰度发布系统的高可用性,同时也减少了服务资源的浪费;
3、实现了无侵入式灰度发布,意味着在实现灰度发布时,不需要修改现有的应用程序代码,也不需要添加任何特定的标签或者注解,大大降低了开发和维护的复杂性,让开发人员可以更加专注于业务功能的开发,而不是与平台的兼容性问题,这种无侵入式的设计,不仅提高了开发效率,而且也降低了引入错误的风险。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
下面结合附图对本发明进一步说明。
图1为本实施例一种自动伸缩的无侵入式灰度发布系统的结构框图;
图2为本实施例一种自动伸缩的无侵入式灰度发布系统中无侵入式灰度发布服务的架构框图;
图3为本实施例一种自动伸缩的无侵入式灰度发布系统中灰度发布服务实例集群的架构框图;
图4为本实施例一种自动伸缩的无侵入式灰度发布系统中资源监控模块的架构框图;
图5为本实施例一种自动伸缩的无侵入式灰度发布系统中自动伸缩模块的架构框图;
图中,OpenResty为一个基于NGINX的可伸缩的Web平台;
Kubelet为工作节点上的负责维护和管理容器的代理组件;
Deployment表示描述如何部署应用的资源对象。
具体实施方式
下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互结合。
本发明实施例提供一种自动伸缩的无侵入式灰度发布系统,用于解决如何满足复杂系统对性能、高可用性、可定制性和无侵入性的需求,实现无入侵的灰度发布的技术问题。
实施例:本发明一种自动伸缩的无侵入式灰度发布系统,包括服务实例集群模块、资源监控模块和自动伸缩模块。
服务实例集群模块用于使用Kubernetes的Deployment或StatefulSet在Kubernetes集群中创建和管理服务实例,包括执行如下:暴露资源监控度量数据,将容器化后的灰度环境、生产环境、灰度规则服务器以及OpenResty运行于Kubernetes集群中,通过OpenResty实现无侵入式的灰度发布服务,其中,资源监控度量数据包括基础资源监控度量数据和自定义的监控度量数据。
传统的中心化组件,如API(Application Programming Interface)网关或服务网格,通常需要对应用程序或服务的代码进行修改以适应其灰度发布的需求。这种情况下,中心化组件的变化直接影响到了应用程序的实现,增加了开发和维护的复杂性。
而使用OpenResty进行无侵入式灰度发布,可以将其视为一个高度可配置的代理服务器。它根据预定的规则(例如,特定的HTTP(Hypertext Transfer Protocol)头信息、Cookie值等)对进入的流量进行路由,将请求导向新版本或旧版本的服务实例。这种方式下,应用程序或服务本身并不需要了解或参与灰度发布的过程,从而实现了无侵入式的灰度发布。因此,尽管OpenResty在这个过程中扮演了"中心化组件"的角色,但它并不需要修改应用程序或服务的代码,使得这种解决方案更加灵活和易于维护。鉴于此,本实施例使用OpenResty来实现一个无侵入式的灰度发布服务。
图2为无侵入式的灰度发布服务的架构图,具体操作如下:
(1)HTTP请求到达OpenResty后,OpenResty中的Lua模块提取出HTTP请求中的标识,并通过调用灰度规则服务器的API将标识传送至灰度规则服务器,其中,标识包括IP地址、浏览器类型以及登录状态等;
(2)灰度规则服务器利用预配置的灰度规则判断接受的标识是否是为灰度标识,并把判断结果返回OpenResty;
(3)OpenResty根据收到的判断结果将对应的HTTP请求路由至生产环境或者灰度环境。
确定了灰度发布服务实例的实现技术后,本实施例利用Kubernetes来实现无侵入式灰度发布服务实例集群模块。该模块负责管理和执行灰度发布规则,并根据服务级协议SLA(Service-Level Agreement)的协议等级定义并暴露对应的基础资源监控度量和自定义的监控度量。
作为具体实施,服务实例集群模块用于执行如下建立无侵入式灰度发布服务实例集群:
(1)暴露应用自定义的监控度量数据:应用为在Pod(容器集)内运行的应用,在应用中集成一个支持Prometheus的度量库作为客户端库,应用会通过客户端库创建一个HTTPendpoint(通常是/metrics),在HTTP endpoint上提供应用的自定义的监控度量数据,监控度量数据的格式符合Prometheus的数据格式。Prometheus的数据采集机制会采集到应用自定义的监控度量数据,应用自定义的监控度量数据包括请求延迟、每秒查询率、请求错误率、队列长度和业务指标等;
(2)容器化:执行如下四个操作:将OpenResty服务、灰度规则管理服务、生产环境以及灰度环境容器化,即为每个服务创建一个对应的Dockerfile,Dockerfile中包含对应服务的所有依赖项和配置文件,还包括一个启动脚本,启动脚本在服务启动时动态地从环境变量或配置映射中读取配置参数;
(3)在Kubernetes中部署应用程序:在Kubernetes中创建一个Deployment,Deployment中定义有OpenResty容器的运行参数、资源限制和创建OpenResty实例集群所需的副本数等;在定义Deployment的YAML文件中,在Pod模板的元数据部分添加Prometheus的注解,Prometheus的注解用于提示Prometheus从哪个endpoint中抓取资源监控度量数据;
(4)服务发现和负载均衡:创建一个Kubernetes Service,将流量路由到OpenResty实例,Kubernetes Service选择性提供一个稳定的网络接口,网络接口允许其他服务和客户端发现和连接到OpenResty实例;
(5)更新灰度规则:OpenResty实例通过定时任务定期调用灰度规则服务器的API,获取最新的灰度规则,定时任务使用OpenResty的ngx.timer模块定期发送HTTP请求以调用灰度规则管理模块的API;
(6)执行灰度规则:在OpenResty的配置文件中,配置Lua模块,配置后的Lua模块能够提取出灰度服务请求中的标识,并通过调用灰度规则服务器的API将灰度服务请求传给灰度规则服务器,OpenResty根据灰度规则服务器返回的结果来路由灰度服务请求。
对应的,通过上述操作构建的灰度发布服务实例集群架构包括如下:
(1)Master Node,Master Node作为灰度发布服务实例集群的管理节点,用于管理集群内所有节点,通过主服务器向集群节点发送创建容器、部署容器以及发布容器的功能,并对来自集群外部的数据进行接受和分配;
(2)Worker Node,Worker Node作为灰度发布服务实例集群的工作节点,运行于应用容器,并提供Kubernetes运行时环境;
(3)Pod(容器集),Pod为Kubernetes的最小部署单元,每个Pod内包含至少一个容器,容器共享存储、网络和运行配置,在Kubernetes集群中,Pod能够在Worker Nodes上进行调度和运行,能够由包括Deployment和StatefulSet的高级API控制,以实现包括副本控制以及滚动升级的应用管理功能;
(4)Canary Environment容器, Canary Environment容器作为灰度环境容器,当进行灰度发布时,用于部署最新版本的服务应用;灰度环境通常被配置为只接收一部分流量(例如,根据特定的用户属性或百分比),以便可以在这个环境中测试新版本的服务应用,而不会影响所有用户;
(5)Production Environment容器,Production Environment容器作为生产环境容器,该容器接收大部分(或在没有灰度发布时接收所有)的用户流量,用于运行当前稳定版本的服务应用,当新版本的服务应用在灰度环境中经过测试并被认为稳定后,新版本的服务应用会被部署于生产环境容器中,并取代当前稳定版本的服务应用;
(6)Canary Rules Server容器, Canary Rules Server容器作为灰度规则服务器容器,用于运行存储和管理灰度规则的服务,灰度规则包括决定哪些HTTP请求应该被路由到灰度环境的规则以及哪些HTTP请求应该被路由到生产环境的规则,所述灰度规则基于各种属性,包括用户的IP地址、浏览器类型以及登录状态;
(7)OpenResty容器,OpenResty容器中运行有OpenResty,OpenResty被配置为一个代理服务器,用于提供如下服务:接收到所有的进入流量,并根据灰度规则服务器提供的灰度规则、将流量路由到灰度环境容器或生产环境容器。
其中,Worker Node包括Kubelet组件、Kube-proxy组件以及Container Runtime。Kubelet组件用于维护Pod的生命周期,执行包括启动容器、停止容器的任务,并与MasterNode进行通信;Kube-proxy组件实现了Kubernetes服务的网络规则,并进行连接转发;Container Runtime组件用于负责运行容器,例如Docker、containerd等。
资源监控模块与服务实例集群模块交互,用于基于资源监控度量定期收集资源监控度量数据,资源监控度量数据包括反映系统资源使用情况的基础资源监控度量数据以及自定义的监控度量数据。
作为具体实施,资源监控模块包括Kubelet组件、Metrics Server(集群级别的度量服务)组件、Prometheus(服务监控系统)以及Prometheus Adapter组件((将监控数据转换为KubernetesAPI对象的适配器))。
Kubelet组件是Kubernetes集群中每个节点上的核心组件,作为一个代理服务,用于与对应节点上运行的容器进行通信,并管理容器的生命周期和资源分配,Kubelet组件用于定期收集基础资源监控度量数据,例如容器的CPU(Central processing unit)、内存、磁盘和网络带宽使用情况等基础资源度量数据,并将基础资源监控度量数据发送至MetricsServer组件。
Metrics Server是Kubernetes的一个组件,用于定时从每个节点的Kubelet组件收集基础资源监控度量数据,并发送至Prometheus。
Prometheus是一个独立的监控系统,在Prometheus的配置文件中,添加有scrape配置,基于scrape配置,Prometheus可以抓取带有Prometheus注解的Pod的容器的自定义的监控度量数据。Prometheus会定期从Metrics Server组件和Pod抓取资源监控度量数据,并存储于自身的时间序列数据库中,以为自动伸缩模块提供决策数据。
Prometheus Adapter用于作为连接Prometheus和Kubernetes的桥梁,它实现了Kubernetes的Metrics API,允许Kubernetes查询和使用存储在Prometheus中的资源监控度量数据。
作为改进,Prometheus提供有查询接口,通过查询接口支持用户查询历史和实时的资源监控度量数据,Prometheus中配置有告警规则,当资源监控度量数据符合告警规则中定义的告警条件时触发告警。
通过上述组件的协同工作,资源监控模块可以有效地收集、存储和使用度量数据,以支持系统的自动伸缩和灰度发布。数据收集是一个持续循环的过程,资源监控模块会不断地收集、处理、提供度量数据,以支持自动伸缩模块做出精确的决策。
对应的,本实施例中通过如下步骤配置资源监控模块:
(1)安装Kubelet组件:在每个Kubernetes的工作节点上运行Kubelet组件,在安装Kubelet组件的过程中,配置Kubelet组件定期收集基础资源监控度量数据;
(2)安装Metrics Server组件:在Kubernetes集群中安装Metrics Server组件,Metrics Server组件自动从每个节点的Kubelet组件收集基础资源监控度量数据;
(3)安装Prometheus:在Kubernetes集群中安装Prometheus,在Prometheus的配置文件中添加一个新的scrape配置。基于新的scrape配置,Prometheus可以抓取带有Prometheus注解的Pod的容器的自定义的监控度量数据。Prometheus会定期从MetricsServer组件和Pod中抓取资源监控度量数据,并存储于自身的时间序列数据库中;
(4)安装Prometheus Adapter:在Kubernetes集群中安装Prometheus Adapter,并在Prometheus Adapter的配置文件中定义如何从Prometheus查询资源监控度量数据,包括定义资源监控度量数据的名称、查询语句以及查询的周期等,Prometheus Adapter提供一个Metrics API接口,Metrics API接口允许Kubernetes查询和使用存储在Prometheus中的资源监控度量数据。
自动伸缩模块分别与资源监控模块以及服务实例集群模块交互,并通过APIServer提供用户接口,用于通过用户接口支持用户对资源使用率阈值和灰度发布服务实例的自动伸缩范围进行配置,形成配置文件;用于基于资源监控度量数据、预配置的资源使用率阈值以及自动伸缩算法,判断是否需要创建新的服务实例或者销毁不健康的服务实例,计算出需要调整的服务实例数量,并与服务实例集群模块配合、根据计算结果对服务实例集群进行伸缩。
作为改进,自动伸缩模块包括APIServer(提供用户接口的模块)、HPA组件、ScaleAPI(更改可伸缩资源对象的大小的应用程序编程接口)、Deployment(为描述如何部署应用的资源对象)以及ReplicaSet(副本控制器)。
APIServer提供用户接口,通过用户接口支持用户创建HPA组件,即支持用户通过YAML配置文件设置资源使用率阈值,如系统的QPS(Query Per Second,每秒查询率)、CPU的使用率和内存的使用量等;设置灰度发布服务实例的自动伸缩范围(即服务实例的最大数量和最小数量)。
HPA(Horizontal Pod Autoscaler)组件是Kubernetes中自动扩缩容的组件,用于定期从资源监控模块的Prometheus Adapter中获取资源监控度量数据,并将获取的资源监控度量数据与预设置的资源使用率阈值进行比较,计算出需要调整的服务实例数量,并根据计算结果、通过调用Scale API来实现伸缩。
Scale API是Kubernetes提供的一种资源,用于更改 Deployment和ReplicaSet中定义的Pod的数量。例如,当使用Scale API更改Deployment中的Pod数量时,实际上是更改了Deployment 对象中的spec.replicas字段(表示期望的Pod数量)。一旦spec.replicas发生变化,Deployment控制器就会自动地创建或删除Pod,使得当前的Pod数量等于spec.replicas。
Deployment是一种高级控制器,用于通过定义期望的Pod副本数量和Pod模板,控制 ReplicaSet,从而实现对应用的操作,操作包括扩展、更新和滚动回滚。
一个Deployment管理一组ReplicaSet,并通过ReplicaSet管理一组Pod,Deployment通过滚动更新的方式来对灰度发布服务实例集群进行伸缩,具体操作如下:
(1)创建一个Deployment时,Deployment控制器创建一个新的ReplicaSet,ReplicaSet的模板来自Deployment的Pod模板,副本数则来自Deployment的spec.replicas字段; ReplicaSet 控制器根据ReplicaSet 的模板和副本数、创建一组新的Pod;
(2)当更新一个Deployment的Pod模板时,Deployment控制器创建一个新的ReplicaSet,并根据新的Pod模板创建一组新的Pod,Deployment控制器逐步将旧的ReplicaSet的副本数减少,同时将新的ReplicaSet的副本数增加,直到旧的ReplicaSet的副本数为 0,新的ReplicaSet的副本数等于Deployment的spec.replicas字段。
本实施例通过Kubernetes的API Server创建HPA。这需要创建一个YAML文件,其中包含参考的资源度量的使用率阈值,如系统的QPS、CPU的使用率和内存的使用量,以及服务实例的最大和最小数量。然后通过kubectl命令应用这个YAML文件。
创建完HPA后,HPA会定期从Prometheus Adapter获取设定的资源监控度量数据,并将获取的监控数据与用户设定的资源使用阈值进行比较,计算出需要调整的服务实例数量。HPA会通过Scale API来调整服务实例数量。当HPA确定需要调整服务实例数量时,它会修改对应的Deployment对象中的spec.replicas字段。Deployment则会通过滚动更新的方式控制Pod的数量。这个过程是自动的,不需要干预。
本实施例的自动伸缩的无侵入式灰度发布系统,该系统不仅能够保证服务性能和稳定性,而且能够有效地管理资源和实现灰度发布,为业务的迭代更新提供强有力的支持。
上文通过附图和优选实施例对本发明进行了详细展示和说明,然而本发明不限于这些已揭示的实施例,基于上述多个实施例本领域技术人员可以知晓,可以组合上述不同实施例中的手段得到本发明更多的实施例,这些实施例也在本发明的保护范围之内。

Claims (9)

1.一种自动伸缩的无侵入式灰度发布系统,其特征在于,包括服务实例集群模块、资源监控模块和自动伸缩模块;
所述服务实例集群模块用于使用Kubernetes的Deployment或StatefulSet在Kubernetes集群中创建和管理服务实例,包括执行如下:暴露资源监控度量数据,将容器化后的灰度环境、生产环境、灰度规则服务器以及OpenResty运行于Kubernetes集群中,通过OpenResty实现无侵入式的灰度发布服务,其中,资源监控度量数据包括基础资源监控度量数据和自定义的监控度量数据;
所述资源监控模块与所述服务实例集群模块交互,用于定期收集资源监控度量数据,所述资源监控度量数据包括反映系统资源使用情况的基础资源监控度量数据以及自定义的监控度量数据;
所述自动伸缩模块分别与所述资源监控模块以及所述服务实例集群模块交互,并通过API Server提供用户接口,用于通过用户接口支持用户对资源使用率阈值和灰度发布服务实例的自动伸缩范围进行配置,形成配置文件;用于基于资源监控度量数据、预配置的资源使用率阈值以及自动伸缩算法,判断是否需要创建新的服务实例或者销毁不健康的服务实例,计算出需要调整的服务实例数量,并与服务实例集群模块配合、根据计算结果对服务实例集群进行伸缩;
通过OpenResty实现无侵入式的灰度发布服务,包括如下步骤:
HTTP请求到达OpenResty后,OpenResty中的Lua模块提取出HTTP请求中的标识,并通过调用灰度规则服务器的API将标识传送至灰度规则服务器,其中,标识包括IP地址、浏览器类型以及登录状态;
灰度规则服务器利用预配置的灰度规则判断接受的标识是否是为灰度标识,并把判断结果返回OpenResty;
OpenResty根据收到的判断结果将对应的HTTP请求路由至生产环境或者灰度环境。
2.根据权利要求1所述的一种自动伸缩的无侵入式灰度发布系统,其特征在于,所述服务实例集群模块用于执行如下建立无侵入式灰度发布服务实例集群:
暴露应用自定义的监控度量数据:应用为在Pod内运行的应用,在应用中集成一个支持Prometheus的度量库作为客户端库,应用会通过客户端库创建一个HTTP endpoint,在HTTPendpoint上提供应用的自定义的度量数据,度量数据的格式符合Prometheus的数据格式,Prometheus的数据采集机制会采集到应用自定义的度量数据,应用自定义的度量数据包括请求延迟、每秒查询率、请求错误率、队列长度和业务指标;
容器化:执行如下四个操作:将OpenResty服务、灰度规则管理服务、生产环境以及灰度环境容器化,即为每个服务创建一个对应的Dockerfile,Dockerfile中包含对应服务的所有依赖项和配置文件,还包括一个启动脚本,启动脚本在服务启动时动态地从环境变量或配置映射中读取配置参数;
在Kubernetes中部署应用程序:在Kubernetes中创建一个Deployment, Deployment中定义有OpenResty容器的运行参数、资源限制和创建OpenResty实例集群所需的副本数;在定义Deployment的YAML文件中,在Pod模板的元数据部分添加Prometheus的注解,Prometheus的注解用于提示Prometheus从哪个endpoint中抓取度量数据;
服务发现和负载均衡:创建一个Kubernetes Service,将流量路由到OpenResty实例,Kubernetes Service选择性提供一个稳定的网络接口,网络接口允许其他服务和客户端发现和连接到OpenResty实例;
更新灰度规则:OpenResty实例通过定时任务定期调用灰度规则服务器的API,获取最新的灰度规则,定时任务使用OpenResty的ngx.timer模块定期发送HTTP请求以调用灰度规则管理模块的API;
执行灰度规则:在OpenResty的配置文件中,配置Lua模块,配置后的Lua模块能够提取出灰度服务请求中的标识,并通过调用灰度规则服务器的API将灰度服务请求传给灰度规则服务器,OpenResty根据灰度规则服务器返回的结果来路由灰度服务请求。
3.根据权利要求2所述的一种自动伸缩的无侵入式灰度发布系统,其特征在于,灰度发布服务实例集群包括:
Master Node,所述Master Node作为灰度发布服务实例集群的管理节点,用于管理集群内所有节点,通过主服务器向集群节点发送创建容器、部署容器以及发布容器的功能,并对来自集群外部的数据进行接受和分配;
Worker Node,所述Worker Node作为灰度发布服务实例集群的工作节点,运行于应用容器,并提供Kubernetes运行时环境;
Pod,所述Pod为Kubernetes的最小部署单元,每个Pod内包含至少一个容器,容器共享存储、网络和运行配置,在Kubernetes集群中,Pod能够在Worker Nodes上进行调度和运行,能够由包括Deployment和StatefulSet的高级API控制,以实现包括副本控制以及滚动升级的应用管理功能;
Canary Environment容器,所述Canary Environment容器作为灰度环境容器,当进行灰度发布服务时,用于部署最新版本的服务应用;
Production Environment容器,所述Production Environment容器作为生产环境容器,用于运行当前稳定版本的服务应用,当新版本的服务应用在灰度环境中经过测试并被认为稳定后,新版本的服务应用会被部署于生产环境容器中,并取代当前稳定版本的服务应用;
Canary Rules Server容器,所述Canary Rules Server容器作为灰度规则服务器容器,用于运行存储和管理灰度规则的服务,灰度规则包括决定哪些HTTP请求应该被路由到灰度环境的规则以及哪些HTTP请求应该被路由到生产环境的规则,所述灰度规则基于各种属性,包括用户的IP地址、浏览器类型以及登录状态;
OpenResty容器,所述OpenResty容器中运行有OpenResty,OpenResty被配置为一个代理服务器,用于提供如下OpenResty服务:接收到所有的进入流量,并根据灰度规则服务器提供的灰度规则、将流量路由到灰度环境容器或生产环境容器。
4.根据权利要求3所述的一种自动伸缩的无侵入式灰度发布系统,其特征在于,所述Worker Node包括Kubelet组件、Kube-proxy组件以及Container Runtime,
Kubelet组件用于维护Pod的生命周期,执行包括启动容器、停止容器的任务,并与Master Node进行通信;
Kube-proxy组件实现了Kubernetes服务的网络规则,并进行连接转发;
Container Runtime组件用于负责运行容器。
5.根据权利要求1所述的一种自动伸缩的无侵入式灰度发布系统,其特征在于,Deployment用于部署无状态的应用,StatefulSet用于部署有状态的应用。
6.根据权利要求1所述的一种自动伸缩的无侵入式灰度发布系统,其特征在于,所述资源监控模块包括Kubelet组件、Metrics Server组件、Prometheus以及Prometheus Adapter组件,
Kubelet组件是Kubernetes集群中每个节点上的核心组件,作为一个代理服务,用于与对应节点上运行的容器进行通信,并管理容器的生命周期和资源分配,Kubelet组件用于定期收集基础资源监控度量数据,并将基础资源监控度量数据发送至Metrics Server组件,基础资源监控度量数据包括容器的CPU、内存、磁盘和网络带宽的使用情况;
Metrics Server是Kubernetes的一个组件,用于定时从每个节点的Kubelet组件收集基础资源监控度量数据,并发送至Prometheus;
Prometheus是一个独立的监控系统,在Prometheus的配置文件中,添加有scrape配置,基于scrape配置,Prometheus用于抓取带有Prometheus注解的Pod的容器的自定义的监控度量数据,Prometheus会定期从Metrics Server组件和Pod抓取资源监控度量数据,并存储于自身的时间序列数据库中,以为自动伸缩模块提供决策数据;
Prometheus Adapter用于作为连接Prometheus和Kubernetes的桥梁,实现了Kubernetes的Metrics API,允许Kubernetes查询和使用存储在Prometheus中的资源监控度量数据。
7.根据权利要求6所述的一种自动伸缩的无侵入式灰度发布系统,其特征在于,Prometheus提供有查询接口,通过查询接口支持用户查询历史和实时的资源监控度量数据,Prometheus中配置有告警规则,当资源监控度量数据符合告警规则中定义的告警条件时触发告警。
8.根据权利要求1-7任一项所述的一种自动伸缩的无侵入式灰度发布系统,其特征在于,所述自动伸缩模块包括APIServer、HPA组件、Scale API、Deployment以及ReplicaSet,
所述APIServer提供用户接口,通过用户接口支持用户创建HPA组件,即支持用户对资源使用率阈值和灰度发布服务实例的自动伸缩范围进行配置,其中,灰度发布服务实例的自动伸缩范围包括服务实例的最大数量和最小数量;
HPA组件是Kubernetes中自动扩缩容的组件,用于定期从资源监控模块中获取资源监控度量数据,并将获取的资源监控度量数据与预设置的资源使用率阈值进行比较,计算出需要调整的服务实例数量,并根据计算结果、通过调用Scale API来实现伸缩;
Scale API 是 Kubernetes 提供的一种资源,用于更改 Deployment和ReplicaSet中定义的 Pod 的数量;
Deployment是一种高级控制器,用于通过定义期望的Pod副本数量和Pod模板,控制ReplicaSet,从而实现对应用的操作,操作包括扩展、更新和滚动回滚;
一个Deployment管理一组ReplicaSet,并通过ReplicaSet管理一组Pod,Deployment通过滚动更新的方式来对灰度发布服务实例集群进行伸缩。
9.根据权利要求8所述的一种自动伸缩的无侵入式灰度发布系统,其特征在于,Deployment通过滚动更新的方式来对灰度发布服务实例集群进行伸缩,包括如下操作:
创建一个Deployment时,Deployment控制器创建一个新的ReplicaSet,ReplicaSet的模板来自Deployment的Pod模板,副本数则来自Deployment的spec.replicas字段;ReplicaSet 控制器根据ReplicaSet 的模板和副本数、创建一组新的Pod;
当更新一个Deployment的Pod模板时,Deployment控制器创建一个新的ReplicaSet,并根据新的Pod模板创建一组新的Pod,Deployment控制器逐步将旧的ReplicaSet的副本数减少,同时将新的ReplicaSet的副本数增加,直到旧的ReplicaSet的副本数为0,新的ReplicaSet的副本数等于Deployment的spec.replicas字段。
CN202311054986.6A 2023-08-22 2023-08-22 一种自动伸缩的无侵入式灰度发布系统 Active CN116755764B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311054986.6A CN116755764B (zh) 2023-08-22 2023-08-22 一种自动伸缩的无侵入式灰度发布系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311054986.6A CN116755764B (zh) 2023-08-22 2023-08-22 一种自动伸缩的无侵入式灰度发布系统

Publications (2)

Publication Number Publication Date
CN116755764A CN116755764A (zh) 2023-09-15
CN116755764B true CN116755764B (zh) 2023-11-17

Family

ID=87961342

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311054986.6A Active CN116755764B (zh) 2023-08-22 2023-08-22 一种自动伸缩的无侵入式灰度发布系统

Country Status (1)

Country Link
CN (1) CN116755764B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116991432B (zh) * 2023-09-27 2023-12-26 厦门她趣信息技术有限公司 一种基于微服务的一体化发布管理平台

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109067862A (zh) * 2018-07-23 2018-12-21 北京邮电大学 API Gateway自动伸缩的方法与装置
CN112653579A (zh) * 2020-12-16 2021-04-13 中国人寿保险股份有限公司 一种基于OpenResty的灰度发布方法及相关设备
CN113867782A (zh) * 2021-09-30 2021-12-31 平安普惠企业管理有限公司 灰度发布方法、装置、计算机设备和存储介质
WO2022037612A1 (zh) * 2020-08-20 2022-02-24 第四范式(北京)技术有限公司 提供应用构建服务的方法及应用构建平台、应用部署方法和系统
CN114615135A (zh) * 2022-02-18 2022-06-10 佐朋数科(深圳)信息技术有限责任公司 一种前端灰度发布方法、系统及存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109067862A (zh) * 2018-07-23 2018-12-21 北京邮电大学 API Gateway自动伸缩的方法与装置
WO2022037612A1 (zh) * 2020-08-20 2022-02-24 第四范式(北京)技术有限公司 提供应用构建服务的方法及应用构建平台、应用部署方法和系统
CN112653579A (zh) * 2020-12-16 2021-04-13 中国人寿保险股份有限公司 一种基于OpenResty的灰度发布方法及相关设备
CN113867782A (zh) * 2021-09-30 2021-12-31 平安普惠企业管理有限公司 灰度发布方法、装置、计算机设备和存储介质
CN114615135A (zh) * 2022-02-18 2022-06-10 佐朋数科(深圳)信息技术有限责任公司 一种前端灰度发布方法、系统及存储介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Prediction of Information Talent Demand Based on the Grayscale Prediction Model and the BP Neural Network;Sun, C et al.;Mobile information systems;全文 *
证券公司技术中台的发展与应用;王伟强;;金融电子化(第11期);全文 *

Also Published As

Publication number Publication date
CN116755764A (zh) 2023-09-15

Similar Documents

Publication Publication Date Title
CN116755764B (zh) 一种自动伸缩的无侵入式灰度发布系统
JP3916652B2 (ja) リソース割り当てシステム、方法及びプログラム
CN111541746B (zh) 面向用户需求变化的多版本并存的微服务自适应方法
JP2005174201A (ja) リソース割り当てシステム、方法及びプログラム
CN103430150A (zh) 在云计算系统中创建资源的技术
JP2005174201A6 (ja) リソース割り当てシステム、方法及びプログラム
CN113868081A (zh) 一种用于电网物联管理平台的边缘计算框架及其工作方法
CN112804362B (zh) 分散数据微服务自动化运维体系
CN104508625A (zh) 用于监视云资源的抽象模型
CN110658794A (zh) 一种制造执行系统
CN111984505B (zh) 一种运维数据采集装置及采集方法
Yoon et al. Management of iot sensor data using a fog computing node
CN116346948A (zh) 一种基于微服务的多协议规约转换方法及系统
CN109858817A (zh) 一种工作流管理系统及方法
CN106886452B (zh) 一种简化云化系统任务调度的方法
CN114138501B (zh) 用于现场安全监控的边缘智能服务的处理方法和装置
CN115987872A (zh) 一种基于资源路由的云系统
CN112019362A (zh) 数据传输方法、装置、服务器、终端、系统及存储介质
JP4104011B2 (ja) トラヒック制御システム、及び、トラヒック制御処理実行方法
JP5809743B2 (ja) 分散システムにおける異種システムデータ提供方法
CN114500530A (zh) 一种民用边缘信息系统自动调整方法
KR20090065308A (ko) 무선 센서 네트워크의 동적 재구성방법 및 그 시스템
CN110896358A (zh) 一种nfv中资源数据的动态更新方法和装置
CN116541133B (zh) 容器应用的纳管方法、其装置及电子设备
EP4329383A1 (en) Method and system for optimizing energy consumption of a wireless device with limited energy resources

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant