SpringCloud 应用在 Kubernetes 上的最佳实践 — 高可用(熔断)-阿里云开发者社区

开发者社区> 阿里巴巴云原生小助手> 正文

SpringCloud 应用在 Kubernetes 上的最佳实践 — 高可用(熔断)

简介: 前几篇我们主要站在应用发布的场景,描述在发布过程中会遇到的灰度、监控、回滚、优雅上下线等保障发布能顺利进行的注意事项。作为一个程序员 GG,可灰度的发布顺利上线往往意味着准点下班。而我们今天要分享的内容则关系到我们能否拥有一个高质量的休息时间,即线上的高可用保障。
+关注继续查看

头图.png

作者 | 宿何

导读:前几篇我们主要站在应用发布的场景,描述在发布过程中会遇到的灰度、监控、回滚、优雅上下线等保障发布能顺利进行的注意事项。作为一个程序员 GG,可灰度的发布顺利上线往往意味着准点下班。而我们今天要分享的内容则关系到我们能否拥有一个高质量的休息时间,即线上的高可用保障。

前言

阿里巴巴十多年的 双11,锤炼出来了一套业界领先的高可用技术,有一些已经商业化(云产品 PTS、AHAS),也有的开源了如:Sentinel、ChaosBlade。我们这一系列的高可用章节也主要介绍这方面的内容。今天介绍熔断部分,即开源产品 Sentinel 的核心能力。

问题定义

在一个常见的分布式应用中,一个请求先通过终端到达 Gateway,再经过防火墙和网络负载均衡,其中还包括调用下游的其它服务和第三方应用,才能到达前端网络服务;如下图所示:

1.png

和这样一个架构一样,大家可能也会遇到如下的一些熟悉的 Case :

  • 瞬间洪峰流量导致系统超出最大负载,load 飙高,系统崩溃导致无法正常提供服务;
  • “黑马”热点数据击穿缓存,DB 被打垮,挤占正常流量;
  • 调用端被不稳定服务拖垮,线程池被占满,导致整个调用链路卡死甚至系统雪崩;
  • ......

这些不稳定的场景可能会导致严重后果。大家可能想问:如何做到均匀平滑的用户访问?如何预防流量过大或服务不稳定带来的影响?这时候我们就要请出微服务稳定性的法宝 —— 高可用流量防护,其中重要的手段就是流量控制和熔断降级,它们是保障整个系统稳定性重要的一环。

1. 流量控制

流量是非常随机性的、不可预测的。前一秒可能还风平浪静,后一秒可能就出现流量洪峰了(例如 双11 零点的场景)。然而我们系统的容量总是有限的,如果突然而来的流量超过了系统的承受能力,就可能会导致请求处理不过来,堆积的请求处理缓慢,CPU/Load 飙高,最后导致系统崩溃。因此,我们需要针对这种突发的流量来进行限制,在尽可能处理请求的同时来保障服务不被打垮,这就是流量控制。

2.png

2. 熔断降级

一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方 API 等。例如,支付的时候,可能需要远程调用银联提供的 API;查询某个商品的价格,可能需要进行数据库查询。然而,这个被依赖服务的稳定性是不能保证的。如果依赖的服务出现了不稳定的情况,请求的响应时间变长,那么调用服务的方法的响应时间也会变长,线程会产生堆积,最终可能耗尽业务自身的线程池,服务本身也变得不可用。

3.png

Spring Cloud 中如何做熔断?

在原来的 Spring Cloud 产品族中,有自带的熔断组件 Hystrix ,是 Netflix 公司提供的一个开源的组件,提供了熔断、隔离、降级的这些特性,不过 Hystrix 在 2018 年 11 月份开始,就不再迭代开发,进入维护的模式。不过好消息是也就是这一年开源了 Spring Cloud for Alibaba 产品族,其中的 Sentinel 完美的对 Hystrix 做了补充,下面针对 Sentinel 做一些基本介绍。

Sentinel 工作原理

Sentinel 以资源流量(URL、线程、本地函数、Dubbo 服务等)为切入点,根据用户输入的规则,自适应的做到流量控制、熔断降级、系统负载保护等多个维度,全方位的保障系统的稳定性。并提供了一套具备丰富的应用场景、完备的实时监控、广泛的开源生态、完善灵活的 SPI 扩展点的完美的高可用解决方案产品,一个基本的原理介绍图如下,详细介绍请参考官方文档

4.png

在使用上,针对主流框架默认提供自动适配的能力来定义需要保护的资源,并提供设施对资源进行实时统计和调用链路分析。同时,Sentinel 也提供开放的接口,方便您自定义并改变规则。

快速使用 Sentinel 的方式

除了在开源提供的方案之外,Sentinel 已经以多种形态进入到了各种云产品的组合解决方案中,列举如下:

1. 在 AHAS 中使用

Sentinel 现在已经是阿里云云产品 AHAS 的重要能力,使用方式请参考官方文档,相比开源的方式接入,云产品主要省去了繁琐的配置,提供了更快的接入方式,以及更友好的产品管控界面,以及更强大的能力;当然除此之外,最重要的是在接入和运行的过程中,都可以获得原厂同学的直接的支持。

2. 在容器服务 Kubernetes 集群中使用

在容器服务中我们目前做到了纯白屏和云原生的方式进行安装,使用方式请参考官方文档来安装所需的 pilot,在集群中安装完 pilot 之后,会自动选择集群中打上了相应 AHAS 注解的 POD 进行 Sentinel Agent 的挂载,配置如下:

annotations:
  # 是否开启 AHAS 应用流控插件, on、true 表示开启, off、false表示关闭
  ahasPilotAutoEnable: "on"
  # 服务名称,会显示在 AHAS 控制台上
  ahasAppName: "<your-service-name>"

3. 在 EDAS 中使用

在 EDAS 中,如果选择的是部署在容器服务 K8s 集群或 Serverless K8s 集群中的应用支持通过重新部署来接入 AHAS,并可在 EDAS 内嵌的监控页面中实时监控流量规则,所有的配置能力都能通过一个控制台白屏化操作完成,全面可视化地保障您的应用可用性,使用方式可以参考文档

结尾

本文简单介绍了高可用流量防护的背景和手段,在熔断的场景下,我们理解十年的积累打磨了高可用产品 AHAS 来为 Kubernetes Spring Cloud 应用保驾护航。除此之外,AHAS 高可用防护还提供以下能力:

  • 针对不稳定弱依赖的熔断降级能力,支持慢调用比例/异常比例策略,支持渐进式恢复策略;
  • 机器维度的系统自适应保护,智能化调配系统流量;
  • 全自动托管、高可用的集群流量控制;
  • 针对 Nginx 网关及 Spring Cloud Gateway、Zuul 等 API Gateway 的网关流控;
  • 针对 Istio/Envoy 集群的 Mesh 高可用防护。

需要注意的是,流控降级的配置是需要结合容量规划、依赖梳理来做的。我们可以借助阿里云 PTS 等压测工具对我们的服务进行全链路压测,了解每个服务的最大承受能力,来确定流控和熔断降级的阈值。同时,业务系统需要具备实时监控的能力,以便实时地根据流量情况做出相应的限流降级策略调整,我们下面的章节中将介绍这一利器。

相关文章推荐:

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用 Kustomize 帮你管理 kubernetes 应用(三):将 Kustomize 应用于 CI/CD
本篇为系列文章第三篇,使用 jenkins 发布一个简单的使用 flask 写的 web 项目,来演示在 CI/CD 流程中 Kustomize 的简单使用。
2101 0
阿里巴巴 Kubernetes 应用管理实践中的经验与教训
作者 | 孙健波(阿里巴巴技术专家)、赵钰莹 导读:云原生时代,Kubernetes 的重要性日益凸显。然而,大多数互联网公司在 Kubernetes 上的探索并非想象中顺利,Kubernetes 自带的复杂性足以让一批开发者望而却步。
11555 0
基于kubeadm的kubernetes高可用集群部署
部署架构 概要部署架构 kubernetes高可用的核心架构是master的高可用,kubectl、客户端以及nodes访问load balancer实现高可用。返回目录 详细部署架构 kubernetes组件说明 kube-apiserver:集群核心,集群API接口、集群各个组件通信的中枢;集.
2104 0
Kubernetes应用迁移至ACK(二) Kubernetes应用及PV数据迁移
本文记录使用Velero快速完成云原生应用及PV数据从自建Kubernetes迁移到ACK的实践过程。 此过程也同样适用于其他云厂商Kubernetes集群内的应用及PV数据迁移至ACK。 在本示例中, 我们将对自建Kubernetes集群中的一个wordpress应用整体迁移上云到ACK,其中数据备份采用阿里云OSS服务,安全稳定。 ## Kubernetes应用及PV数据迁移ACK概览
665 0
全链路压测构建高可用应用最佳实践
电商大促、明星直播、在线教育等大量场景,用户访问量会在一定时间段剧增,或者在业务上云过程中需要高可用体系评估客户系统在云环境下面的性能表现,判断是否符合客户的预期。
179 0
SpringCloud 应用在 Kubernetes 上的最佳实践 — 高可用(熔断)
前几篇我们主要站在应用发布的场景,描述在发布过程中会遇到的灰度、监控、回滚、优雅上下线等保障发布能顺利进行的注意事项。作为一个程序员GG,可灰度的发布顺利上线往往意味着准点下班。而我们今天要分享的内容则关系到我们能否拥有一个高质量的休息时间,即线上的高可用保障。
2990 0
SpringCloud 应用在 Kubernetes 上的最佳实践 — 高可用(熔断)
前几篇我们主要站在应用发布的场景,描述在发布过程中会遇到的灰度、监控、回滚、优雅上下线等保障发布能顺利进行的注意事项。作为一个程序员 GG,可灰度的发布顺利上线往往意味着准点下班。而我们今天要分享的内容则关系到我们能否拥有一个高质量的休息时间,即线上的高可用保障。
853 0
SpringCloud 应用在 Kubernetes 上的最佳实践 — 部署篇(开发部署)
本文将主要介绍如何将开发篇中提到的应用在云上跑起来。
3706 0
1314
文章
0
问答
来源圈子
更多
阿里云 云原生应用平台 肩负阿里巴巴集团基础设施云化以及核心技术互联网化的重要职责,致力于打造稳定、标准、先进的云原生产品,成为云原生时代的引领者,推动行业全面想云原生的技术升级,成为阿里云新增长引擎。商业化产品包括容器、云原生中间件、函数计算等。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载