SpringCloud 应用在 Kubernetes 上的最佳实践 —— 高可用(容量评估)

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
注册配置 MSE Nacos/ZooKeeper,182元/月
简介: 本文是《SpringCloud 应用在 Kubernetes 上的最佳实践》系列文章的第 11 篇,从前面两期开始我们进入到了高可用专题,分别介绍了流量防护和故障演练相关内容。本文将从另一个视角介绍如何保障业务高可用性:即业务准备阶段,提前进行线上的瓶颈定位和容量评估,以便更低成本、更高效/真实的发现系统瓶颈点,做到最精确的容量评估。

头图.png

作者 | 牛兔

导读:本文是《SpringCloud 应用在 Kubernetes 上的最佳实践》系列文章的第 11 篇,从前面两期开始我们进入到了高可用专题,分别介绍了流量防护和故障演练相关内容。本文将从另一个视角介绍如何保障业务高可用性:即业务准备阶段,提前进行线上的瓶颈定位和容量评估,以便更低成本、更高效/真实的发现系统瓶颈点,做到最精确的容量评估。

高可用体系介绍

首先来介绍下高可用体系,应用生命周期的高可用都有哪些策略、分别可以实现什么能力呢?

1.png

2.png

从上图示意中可以看出,应用生命周期的整个过程中,都有相应的高可用策略,如前面 2 篇文章介绍的流量防护即为线上运行时的线上管控相关策略,混沌工程即为系统演练的相关策略,而全链路压测即为规划阶段的重要策略,其包括线上压测(即环境选择)、容量规划(即压测实施)、弹性伸缩(即生态内联动)。

以下将重点介绍容量评估的重要性,以及如何实施压测来实现容量评估。

为何要进行容量评估?

关于容量评估的重要性及必要性已经是个老生常谈的问题了,分别从技术角度和业务战略角度总结如下:

3.png

容量评估的目的自然是解决容量问题,如新业务上线前的准备,大型营销活动的准备等等。大型活动中洪峰流量引起的系统表现不确定性,是最经典的适用场景。一个理想的营销活动周期应该是有如下闭环流程:

4.png

性能测试是容量评估的核心手段,性能测试之后通过客户端-应用系统-基础负载一系列的监控分析,最终可得出瓶颈点位于何处、应如何有针对性地优化。上图可以看出,性能测试通过真实、高效的压测方式进行容量评估/瓶颈定位&解决,最终来保障活动稳定进行。

如何进行性能测试?

阿里巴巴全链路压测从 2013 年到现在也已经是第 7 个年头了,在这 7 年间我们不断积累、总结、优化进步,进行这样一种大规模的项目活动,离不开有效的流程把控及分工管理。关于全链路压测的前期准备,这边将不做赘述,有兴趣的同学可以参考文章《独家揭秘 | 阿里怎么做 双11 全链路压测?》。以下将重点介绍压测执行阶段操作。

进行全链路压测之前,单应用会进行内部压测,以便能提升全链路压测的效率,即解决内部问题之后再解决联动问题。故以下将分别介绍 Spring Cloud 应用的压测以及全链路压测分别如何执行。

1. 单应用压测 Spring Cloud 应用

单应用的压测不少开发者会选择开源 JMeter 进行压测,甚至还会进行自建平台以便实现高并发能力。这两者都不推荐,他们都有较为明显的劣势。阿里云性能测试服务(PTS Performance Testing Service)提供了云端压测服务,其完美兼容了 JMeter,只需把脚本上传上来即可发起压测。

5.png

同时,目前 PTS 上已经支持直接进行微服务压测,不需要自己设置进行插件管理和升级,只需直接在 PTS 中选择对应的集群等信息,即可快速发起压测。

6.png

2. 全链路压测

如前面介绍性能压测流程中所属,整个全链路压测包括的前期事宜较多,如环境选择与改造、数据准备、安全策略等,这部分内容在此不做赘述,有兴趣的可以查阅《Performance Test Together》主题相关介绍。本处主要介绍全链路压测的实施:即配置与线上业务模型一样的业务场景,从公网发起真实流量进行多维度和场景的压测,验证容量能力和瓶颈问题的定位。

一般正式压测会按照压测计划,执行多种压测策略。淘宝的 双11 大促压测,一般包含这样几步:

  • 峰值脉冲:即完全模拟 0 点大促目标峰值流量,进行大促态压测,观察系统表现;
  • 系统摸高:取消限流降级保护功能,抬高当前压测值(前提是当前的目标压测值已经达到,则可以进行摸高测试),观察系统的极限值是多少,可进行多轮提升压力值压测,直到系统出现异常为止。简化摸高测试的提升信息;
  • 限流降级验证:顾名思义,即验证限流降级保护功能是否正常,修改限流降级的作用与验证方法,更简化,(AHAS 引入)商业化产品AHAS(应用高可用服务,Application High Availability Service)提供了全面的限流降级能力,可进行全链路的降级保护;
  • 破坏性测试:这个主要是为了验证预案的有效性,类似于容灾演练时的预案执行演练。即为持续保持大促态压测,并验证预案的有效性,观察执行预案之后对系统的影响。修改破坏性测试的内容。

3. 在 PTS 上压测

上述压测场景的实施,均可以在 PTS 上操作实现,且配置不同的压测量级数据,来进行多轮压测,并观察其系统表现。压测不应该是一次性的操作,而应该是反复的、多轮验证的操作。以下以峰值脉冲为例,介绍如何在 PTS 上实施压测。

首先是场景的构建。PTS 提供了丰富的创建场景方式,包括 JSON、JMX、YAML 脚本的导入,纯交互 0 编码 UI 创建、云端录制器录制结果导入、完美兼容 JMeter 脚本等。下图作为示例:

7.png

业务场景构建完成之后,以 PTS 自研原生引擎(即纯交互 UI 编排模型)为例,提供了丰富的压力来源定制化能力,可实现多地域/运营商的来源定制,更真实地模拟真实流量情况。

8.png

同时,可通过 SLA + 定时任务能力,实现“无人值守”压测,对核心业务链路进行周期性的性能摸顶。

9.png

压测结束后,PTS 提供了可下载的压测报告,有详细统计数据及趋势图数据,采样日志以及添加了的监控数据,可快速进行问题方向的定位于分析。

4. 在 EDAS 上压测 Spring Cloud 应用

EDAS 的微服务治理能力,同时打通了与 PTS 服务的相应的压测能力,进入到服务查询页面之后点击压测按钮即可开始在 PTS 的性能测试,如下图:

10.png

结尾

本文简单介绍了下业务高可用体系的相关策略,容量评估的重要性以及核心手段-性能测试的实施方式,同时在 Spring Cloud 下的快速应用。此外,PTS 还提供了更多功能:

  • 全链路压测的流量隔离改造
  • JMeter 的环境管理及本地化插件
  • 压测过程中,云上业务的架构监控
  • JMeter 的高级流量定制
  • ......

以性能压测为主线,进行应用系统规划期的容量验证,并以压测数据结果为参考,通过应用高可用服务 AHAS 中流量防护进行从网关到应用多维度的系统防护,以此来实现业务系统上线后的高可用性。后续 PTS 和 AHAS 会提供更多的智能化功能,来更好地帮助实现线上业务在各种极端场景下的连续性。

相关文章推荐:

课程推荐

去年,CNCF 与 阿里云联合发布了《云原生技术公开课》已经成为了 Kubernetes 开发者的一门“必修课”。今天,阿里云再次集结多位具有丰富云原生实践经验的技术专家,正式推出《云原生技术实践公开课》。课程内容由浅入深,专注讲解“ 落地实践”。还为学习者打造了真实、可操作的实验场景,方便验证学习成果,也为之后的实践应用打下坚实基础。点击链接查看课程:https://developer.aliyun.com/learning/roadmap/cloudnative2020

阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的公众号。”

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
9月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
针对本地存储和 PVC 这两种容器存储使用方式,我们对 ACK 的容器存储监控功能进行了全新升级。此次更新完善了对集群中不同存储类型的监控能力,不仅对之前已有的监控大盘进行了优化,还针对不同的云存储类型,上线了全新的监控大盘,确保用户能够更好地理解和管理容器业务应用的存储资源。
568 276
|
8月前
|
Kubernetes 持续交付 开发工具
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
231 2
|
7月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
161 0
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
|
8月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
121 1
|
8月前
|
Kubernetes 持续交付 开发工具
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
|
9月前
|
存储 监控 对象存储
ACK容器监控存储全面更新:让您的应用运行更稳定、更透明
介绍升级之后的ACK容器监控体系,包括各大盘界面展示和概要介绍。
|
8月前
|
运维 分布式计算 Kubernetes
ACK One多集群Service帮助大批量应用跨集群无缝迁移
ACK One多集群Service可以帮助您,在无需关注服务间的依赖,和最小化迁移风险的前提下,完成跨集群无缝迁移大批量应用。
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
7月前
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
|
8月前
|
人工智能 SpringCloudAlibaba 自然语言处理
SpringCloud Alibaba AI整合DeepSeek落地AI项目实战
在现代软件开发领域,微服务架构因其灵活性、可扩展性和模块化特性而受到广泛欢迎。微服务架构通过将大型应用程序拆分为多个小型、独立的服务,每个服务运行在其独立的进程中,服务与服务间通过轻量级通信机制(通常是HTTP API)进行通信。这种架构模式有助于提升系统的可维护性、可扩展性和开发效率。
2314 2