共计 2785 个字符,预计需要花费 7 分钟才能阅读完成。
前言
随着云计算的倒退、云原生时代的降临,企业数字化转型过程不断深入,利用开发也越来越多地基于微服务化模式,疾速迭代的能力使得利用开发更高效、更灵便。同时,也不得不面临利用版本疾速降级所带来的的微小挑战。传统的公布形式是通过新版本全量替换旧版本,这种模式存在停机工夫较长的问题,业务端的压力愈发显著。同时,在新版本公布时,如果间接将应用程序从以后版本全量降级到新版本,危险存在的可能性和严重性也不容忽视。传统公布形式存在如下一些典型的弊病:
- 影响用户体验:如果新版本存在性能或性能问题,那么,所有新版本服务实例都会存在同样问题,从而影响所有用户的应用。
- 影响服务可用性:全量公布个别须要做停机降级(要么同时都为新版本,要么同时都为老版本),导致业务中断,影响服务可用性。
所以,尽可能升高公布对业务造成的影响就变得越来越重要,“业务无感知”的灰度公布策略就公众的视线中。
灰度公布概述
灰度公布,是一种软件部署策略。惯例做法是将新版本的应用程序投入生产环境,保留以后版本,并将一小部分流量重定向到新版本中。在此过程中,所有发送到新版本的申请都将被监测,确认新版本可用后,将逐步将越来越多的流量疏导到新版本中。
通过灰度公布,有助于辨认可能存在的潜在谬误、性能问题或其余问题,以便在全面部署之前及时解决这些问题,从而极大地缩小对更宽广用户的应用影响,进步用户体验和满意度,减速迭代速度。
可观测性对于灰度公布的胜利十分重要,可能为团队提供实时的服务运行状态的数据反对,从而更好地观测和剖析新版本的性能、稳定性和用户反馈等指标,更快地发现和解决问题,进步公布的成功率和用户体验。
可观测性在灰度公布的应用价值
在灰度公布过程中,须要对公布的新版本具备评估剖析能力,包含对新版本的性能、稳定性和用户反馈等指标进行剖析。可观测性能够帮忙团队更好地观测和剖析这些指标,从而更快地发现和解决问题。具体来说,可观测性能够帮忙团队实现以下指标:
- 监控应用程序的性能和稳定性:通过监控应用程序的指标,例如响应工夫、错误率、CPU 使用率等,能够及时发现性能和稳定性问题,并采取相应的措施。
- 实现疾速故障排除:通过可观测性工具,能够疾速定位和解决问题,缩小对用户的影响。
- 反对数据驱动的决策:通过可观测性工具,能够收集和剖析大量的数据,为团队提供数据反对,反对数据驱动的决策。
因而,可观测性对于灰度公布的胜利十分重要,可能帮忙团队更好地监控和剖析新版本的性能、稳定性和用户反馈等指标,从而更快地发现和解决问题,进步公布的成功率和用户体验。
可观测性在灰度公布中的利用
要评估灰度公布中不同版本的性能及故障,须要收集和剖析运行数据。通过观测云的 one agent 数据采集和标签化能力,可能疾速、不便地采集不同服务版本中的运行数据,从而加以分析后,对新版本做出评估。
4.1 测试环境利用部署阐明
测试环境中的所有服务是部署在 K8s 中。部署构造如下图所示:
前端 Web 页面申请通过 Gateway 网关拜访后端的 Auth 和 System 服务,前端 Web 是 Vue 开发的,后端服务是 Java 开发。
4.2 服务版本公布阐明
测试将通过对 System 服务进行灰度公布。公布示意图阐明如下:
4.3 服务链路的接入和数据标签化
4.3.1 服务链路的接入配置阐明
在接入 Java 利用 APM 时,须要应用到 dd-java-agent.jar 包。在 Kubernetes 的环境中,为了不侵入利用的镜像,罕用的形式是在部署利用的 yaml 中应用 initContainers,利用雷同 Pod 中的容器共享存储的形式来应用 dd-java-agent.jar。
观测云提供 DataKit Operator 的形式向非凡 Pod 提供注入 dd-lib 文件和 environment,这种形式能够更不便、更快捷地接入利用链路。
4.3.2 标签化阐明
标签能够帮忙对数据进行分类和组织,通过对服务运行的监控数据打标签,咱们能够更好地理解数据的起源、类型、状态等信息,从而更好地进行数据分析。这里,咱们就是通过对 System 服务公布的不同版本打上对应的标签,来实现后续对不同版本运行状况进行观测和剖析。
该文中的测试环境中,在服务对应 pod 部署的 yaml 文件中,原始运行服务的版本通过 -Ddd.tag 参数,打上版本为 version:v1.0 的标签。如下图所示:
对新公布的服务版本通过 -Ddd.tag 参数,打上版本为 v2.0 的标签。如下图所示:
通过上述的标签配置,服务对应的所有链路中都会带有对应的版本信息。对应成果如下图所示:
在服务运行的过程中,能够通过对不同版本进行分组来做实时比照观测和剖析。
4.4 对服务灰度公布的观测和剖析
通过比照新旧两个版本的 QPS、服务执行耗时、服务错误率等指标数据进行实时监测,能够帮忙疾速发现问题和异样。
4.4.1 看板感知能力
首先,能够通过观测云的「场景」性能,配置针对相干服务灰度公布的观测看板。如下图所示:
通过看板,咱们可能实时感知两个服务版本在运行过程中的状态,包含对应的申请数据量、服务错误率、以及服务的响应工夫等要害指标。
4.4.2 服务运行状态剖析
4.4.2.1 申请数量剖析
通过「服务申请数」图表,咱们可能清晰晓得不同服务版本上的申请量。同时,当新版本做全量切换后,也能够通过该视图来观测全副申请流量是否路由到了正确的服务版本上。
4.4.2.2 服务性能剖析
从上图的性能指标中(P75、P90 和 P99),可能直观看到 System 服务的新版本 v2.0 比起 v1.0 存在显著的响应工夫长的问题。为了进一步剖析该问题,咱们能够通过在对应图表上做进一步的下钻,去查看链路的执行详细情况。如下图所示:
当跳转到「链路」详情页后,能够看到在对应时间段链路的耗时信息。这里也能够通过「持续时间」排序来找到耗时比拟长的链路。如下图所示:
点开其中「执行工夫」较长的链路,关上服务执行的「火焰图」详情,如下图所示:
从「火焰图」中,能清晰地看到 v2.0 版本中的 SysRoleController.list 这个调用耗费了比拟长的工夫为 6.04 秒。尽管,该办法调用了 MySQL,然而,从图中能够看到 MySQL 自身执行比拟快。所以,问题点并不在数据库侧,须要对代码做进一步剖析。
这里将不再做进一步的剖析。因为为了模仿性能问题,在 v2.0 的相干代码中简略加了 5s 的 sleep,整体执行工夫也和下面的火焰图对得上。
4.4.2.3 服务错误率剖析
通过看板中的「服务错误率」图表,能够感知同一服务的不同版本在运行过程的谬误产生状况。对错误率较高的服务版本,同样能够通过图表的下钻能力去查看对应谬误的链路状况。如下图所示:
通过链路的详情页面,能够查看更进一步的执行错误信息。如下图所示:
不仅如此,也能够在链路详情中关联利用日志、主机资源应用、网络和 JVM 运行状况等数据做关联剖析,进步问题定位和根因溯源的效率。