乐趣区

关于云原生-cloud-native:Spring-Cloud-应用在-Kubernetes-上的最佳实践-高可用混沌工程

作者 | 穹谷

导读:从上篇开始,咱们进入到了高可用的章节,上篇提到的熔断能力,是历年保障大促当天早晨整个零碎不被洪峰流量打垮的法宝。本文将重点介绍为什么咱们要做混沌工程以及如何应用 ChaoBlade 工具和 AHAS 平台疾速施行混沌工程。

前言

从上篇开始,咱们进入到了高可用的章节,上篇提到的熔断能力,是历年保障大促当天早晨整个零碎不被洪峰流量打垮的法宝,本篇介绍的措施与熔断有不一样的中央,一个是线上洪峰来长期的保护措施,它更多的是流量低峰或者在专门的演练环境中,针对可能遇见的各类故障,采取演练的伎俩,来窥探对业务的影响;它的次要目标是让咱们本人更加理解本人业务零碎的薄弱环节,以便来隔靴搔痒加强零碎的高可用能力。

为什么须要混沌工程?

任何一个零碎都会有未曾可知的故障呈现,拿古代工艺曾经很好的磁盘来说,有统计数据的磁盘最低的年故障率都可达到 0.39%。即使是这么底层基础设施,也会有这么高的不确定性。

尤其当下大部分的服务状态都是分布式架构,在分布式系统架构下,服务间的依赖日益简单,更很难评估单个服务故障对整个零碎的影响;并且申请链路长,监控告警的不欠缺导致发现问题、定位问题难度增大;同时业务和技术迭代快,如何继续保障系统的稳定性和高可用性受到很大的挑战。

1. 云原生零碎挑战更大

谈到云原生,能够说云原生是一个理念,次要蕴含的技术有云设施、容器、微服务、服务网格、Serverless 等技术。云设施指私有云、专有云和混合云等,是云原生零碎的基础设施,根底施行的故障可能对整个下层业务零碎造成很大影响,所以说云设施的稳定性是十分重要的。

容器服务的挑战 能够分两大类:一类是面向 K8s 服务提供商,服务是否稳固;另一类是面向用户,配置的扩缩容规定是否无效,实现的 CRD 是否正确,容器编排是否正当等问题。

分布式服务的挑战 次要是复杂性,单个服务的故障很难判断对整个零碎的影响;service mesh,sidecar 的服务路由、负载平衡等性能的有效性,还有 sidecar 容器自身的可用性。

一些新兴的部署模式的挑战 如 serverless,当初基本上都是函数加事件的模式,资源调度是否无效,而且 serverless 服务提供商屏蔽了一些中间件,你能掌控的是函数这些服务,那么你能够通过混沌工程去验证你函数调用的一些配置,比方超时配置、相干的一些降级策略等这些是否正当。

以上技术都有雷同的共性,比方弹性可扩大、松耦合、容错性高、还有一些易于治理,便于察看这些个性。所以说在云原生时代,通过混沌工程能够更无效的推动零碎的“云原生”化。

2. 每个职位都须要懂混沌工程

混沌工程是一种思维,它让零碎中的每个参与者都学会去思考一件事件:如果所依赖的某服务中断了服务该怎么办?对于以下四类人群而言,意义尤显突出:

  • 对于 架构师 来说,能够验证零碎架构的容错能力,咱们须要面向失败设计的零碎,混沌工程的思维就是践行这一准则的形式;
  • 对于 开发和运维,能够进步故障的应急效率,实现故障告警、定位、复原的无效和高效性;
  • 对于 测试 来说,能够补救传统测试方法留下的空白,之前的测试方法基本上是从用户的角度去做,而混沌工程是从零碎的角度进行测试,升高故障复发率;
  • 对于 产品和设计,通过混沌事件查看产品的体现,晋升客户应用体验。所以说混沌工程面向的不仅仅是开发、测试,领有最好的客户体验是每个人的指标,所以施行混沌工程,能够提前发现生产环境上的问题,并且能够以战养战,晋升故障应急效率和能够应用体验,逐步建设高可用的韧性零碎。

混沌工程实操

在一次残缺的演练流程中,须要先做好打算,对相干的演练打算有一个行为预期;演练相干打算的同时,咱们举荐的最佳实际是须要配合有业务的自动化测试,每演练一次须要全方位的跑完自动化测试用例,这样能力全面的理解真正的业务产生时对业务造成的影响:

在下面的图中形容了一次残缺的故障演练须要通过的步骤,其中最重要的一步的实际是如何“执行预制混沌试验”?因为这一步须要一个业余的工具,在业内目前最风行的工具是 Netflix 的 Chaos Monkey 和阿里巴巴开源的 ChaosBlade,咱们接下来次要是介绍如何应用 ChaosBlade 来实现一次演练。

1. 应用 ChaosBlade 去做

ChaosBlade 是阿里巴巴一款遵循混沌试验模型的混沌试验执行工具,具备场景丰盛度高,简略易用等特点,而且扩大场景也特地不便,开源不久就被退出到 CNCF Landspace 中,成为支流的一款混沌工具。目前蕴含的场景有根底资源、应用服务、容器服务、云资源等。ChaosBlade 下载解压即用,能够通过执行 blade 命令来执行云原生下微服务的演练场景,上面是模仿 Kubernetes 下微服务中数据库调用提早故障。

2. 应用 AHAS 故障演练平台去做

AHAS 故障演练平台是阿里云对外部用户凋谢的云产品,应用形式可参考官网文档。其底层的故障注入能力大部分来源于 ChaosBlade 实现,另一部分应用本身小程序扩大实现。AHAS 相比于 ChaosBlade,除了简略易用的白屏操作之外,还实现了下层的演练编排、权限管制、场景治理等,而且还针对微服务新增利用维度演练,简化演练老本,优化演练体验。

结尾

混沌工程是一种主动防御的稳定性伎俩,体现的是反软弱的思维,施行混沌工程不能只是把故障制作进去,须要有明确的驱动指标。咱们要抉择适合的工具和平台,管制演练危险,实现常态化演练。

阿里巴巴外部从最早引入混沌工程解决微服务的依赖问题,到业务服务、云服务稳态验证,进一步降级到公共云、专有云的业务连续性保障,以及在验证云原生零碎的稳定性等方面积攒了比拟丰盛的场景和实践经验;这一些教训积淀咱们都通过开源产品以及云产品 AHAS 一一对外输入。

相干文章举荐:

  • 《SpringCloud 利用在 Kubernetes 上的最佳实际 —— 开发篇》
  • 《SpringCloud 利用在 Kubernetes 上的最佳实际 — 部署篇(开发部署)》
  • 《SpringCloud 利用在 Kubernetes 上的最佳实际 — 部署篇(工具部署)》
  • 《SpringCloud 利用在 Kubernetes 上的最佳实际 — 线上公布(可灰度)》
  • 《SpringCloud 利用在 Kubernetes 上的最佳实际 — 诊断(线上联调)》
  • 《SpringCloud 利用在 Kubernetes 上的最佳实际 — 线上公布(可监控)》
  • 《SpringCloud 利用在 Kubernetes 上的最佳实际 — 线上公布(可回滚)》
  • 《SpringCloud 利用在 Kubernetes 上的最佳实际 — 线上公布(优雅高低线)》
  • 《SpringCloud 利用在 Kubernetes 上的最佳实际 — 高可用(熔断)》

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

退出移动版