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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本篇是《SpringCloud 应用在 Kubernetes 上的最佳实践 》系列内容的第十一篇。

前言

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

高可用体系介绍

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

1.png
2.png


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

为何要进行容量评估

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

3.png


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

4.png

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

如何进行性能测试

阿里巴巴全链路压测从2013年到现在也已经是第7个年头了,在这7年中间我们不断的积累、总结、优化进步,进行这样一种大规模的项目活动,离不开有效的流程把控及分工管理。关于全链路压测的前期准备,这边将不做赘述,有兴趣的同学可以参考文章《独家揭秘 | 阿里巴巴是如何做全链路压测的?》。以下将重点介绍压测执行阶段操作。
进行全链路压测之前,单应用会进行内部压测,以便能提升全链路压测的效率,即解决内部问题之后再解决联动问题。故以下将分别介绍Spring Cloud应用的压测以及全链路压测分别如何执行。

单应用压测Spring Cloud应用

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

5.png


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

6.png

全链路压测

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

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

在PTS上压测

上述压测场景的实施,均可以在PTS上操作实现,且配置不同的压测量级数据,来进行多轮压测,并观察其系统表现。压测不应该是一次性的操作,而应该是反复的、多轮验证的操作。以下以峰值脉冲为例,介绍如何在PTS上实施压测。
首先是场景的构建。PTS提供了丰富的创建场景方式,包括JSON、JMX、YAML脚本的导入,纯交互0编码UI创建、云端录制器录制结果导入、完美兼容JMeter脚本等。下图作为示例:

7.png


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

8.png


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

9.png


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

在EDAS上压测Spring Cloud应用

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

10.png

结尾

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

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

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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
8月前
|
存储 Java Nacos
Spring Cloud+Nacos+KMS 动态配置最佳实践
本文讲述了 Spring Cloud 应用中结合 Nacos 实现了运行期配置动态更新的功能,以及在此基础上结合 KMS 在不改动代码的情况下对应用使用的敏感配置进行保护,解决将配置迁移到 Nacos 中可能存在的数据安全顾虑,并对其底层工作原理做了简单介绍。
1115 121
|
7月前
|
Kubernetes 容灾 调度
阿里云 ACK 高可用稳定性最佳实践
本文整理自2024云栖大会刘佳旭的演讲,主题为《ACK高可用稳定性最佳实践》。文章探讨了云原生高可用架构的重要性,通过Kubernetes的高可用案例分析,介绍了ACK在单集群高可用架构设计、产品能力和最佳实践方面的方法,包括控制面和数据面的高可用策略、工作负载高可用配置、企业版容器镜像服务高可用配置等内容,旨在帮助企业构建更加可靠和高效的应用运行环境。
|
8月前
|
Kubernetes 关系型数据库 MySQL
Kubernetes入门:搭建高可用微服务架构
【10月更文挑战第25天】在快速发展的云计算时代,微服务架构因其灵活性和可扩展性备受青睐。本文通过一个案例分析,展示了如何使用Kubernetes将传统Java Web应用迁移到Kubernetes平台并改造成微服务架构。通过定义Kubernetes服务、创建MySQL的Deployment/RC、改造Web应用以及部署Web应用,最终实现了高可用的微服务架构。Kubernetes不仅提供了服务发现和负载均衡的能力,还通过各种资源管理工具,提升了系统的可扩展性和容错性。
312 3
|
10月前
|
Kubernetes 负载均衡 前端开发
二进制部署Kubernetes 1.23.15版本高可用集群实战
使用二进制文件部署Kubernetes 1.23.15版本高可用集群的详细教程,涵盖了从环境准备到网络插件部署的完整流程。
349 4
二进制部署Kubernetes 1.23.15版本高可用集群实战
|
9月前
|
Kubernetes Cloud Native 微服务
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
297 1
|
10月前
|
负载均衡 Java 对象存储
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
130 2
|
10月前
|
Kubernetes 负载均衡 应用服务中间件
kubeadm快速构建K8S1.28.1高可用集群
关于如何使用kubeadm快速构建Kubernetes 1.28.1高可用集群的详细教程。
276 3
|
11月前
|
Kubernetes 持续交付 Docker
SpringCloud + K8S:容器化持续交付的强大组合
【8月更文挑战第22天】在当今快速迭代的软件开发环境中,如何高效、可靠地部署和管理微服务架构应用成为了技术团队面临的重大挑战。SpringCloud与Kubernetes(K8S)的结合,为微服务架构的容器化持续交付提供了强大的解决方案,极大地提升了应用的可扩展性、灵活性和可维护性。本文将从技术角度深入探讨这一组合的优势及其在工作学习中的实践应用。
502 3
|
11月前
|
Kubernetes 负载均衡 监控
在K8S中,apiserver的高可用是如何实现的?
在K8S中,apiserver的高可用是如何实现的?
|
11月前
|
存储 Kubernetes API
在K8S中,各组件是如何实现高可用的?
在K8S中,各组件是如何实现高可用的?

相关产品

  • 容器服务Kubernetes版