网关流控利器:结合 AHAS 实现 Ingress/Nginx 流量控制

简介:微服务的稳定性一直是开发者非常关注的话题。随着业务从单体架构向分布式架构演进以及部署方式的变化,服务之间的依赖关系变得越来越复杂,业务系统也面临着巨大的高可用挑战。

作者:涂鸦

微服务的稳定性一直是开发者非常关注的话题。随着业务从单体架构向分布式架构演进以及部署方式的变化,服务之间的依赖关系变得越来越复杂,业务系统也面临着巨大的高可用挑战。应用高可用服务 AHAS (Application High Availability Service) 是经阿里巴巴内部多年高可用体系沉淀下来的云产品,以流量与容错为切入点,从流量控制、不稳定调用隔离、熔断降级、热点流量防护、系统自适应保护、集群流控等多个维度来帮助保障服务和网关的稳定性,同时提供秒级的流量监控分析功能。AHAS 不仅在阿里内部淘宝、天猫等电商领域有着广泛的应用,在互联网金融、在线教育、游戏、直播行业和其他大型政央企行业也有着大量的实践。

流量漏斗防护原则

在分布式系统架构中,每个请求都会经过很多层处理,比如从入口网关再到 Web Server 再到服务之间的调用,再到服务访问缓存或 DB 等存储。在高可用流量防护体系中,我们通常遵循流量漏斗原则进行高可用流量防护。在流量链路的每一层,我们都需要进行针对性的流量防护与容错手段,来保障服务的稳定性;同时,我们要尽可能地将流量防护进行前置,比如将一部分 HTTP 请求的流量控制前置到网关层,提前将一部分流量进行控制,这样可以避免多余的流量打到后端,对后端造成压力同时也造成资源的浪费。

Ingress/Nginx 网关流量控制

Nginx 为目前比较流行的高性能开源服务器,Ingress 则为实际的 Kubernetes 集群流量入口。AHAS Sentinel 为 Ingress/Nginx 网关提供原生的入口流量控制能力,将流量防护进行前置,提前对多余的流量进行拦截,保障后端服务的稳定性。近期发布的新版 AHAS Nginx 流量防护插件基于 Sentinel C++ 原生版本实现,与旧版本 sidecar 版本相比进行了大量的性能优化,在上万 QPS 的场景也可以保证精确流量控制,同时不会对网关本身的性能带来很大影响。

AHAS Nginx/Ingress 防护具有以下核心能力及优势:

  • 低使用成本:仅需简单配置即可快速将 Nginx/Ingress 网关接入 AHAS 流量防护,并在控制台进行可视化的监控、规则与返回行为配置
  • 控制台动态配置流控规则,实时生效,无需 reload Nginx
  • 精准的入口总流量控制:AHAS Nginx/Ingress 防护支持上万 QPS 量级精准的入口总流量控制,支持自定义流控粒度(如某一组 Host, URL 维度,甚至可以细化到参数、IP 维度)
  • 配套的可观测能力,实时了解网关流量与防护规则生效情况

下面我们就来用一个示例来介绍一下,如何快速将 Kubernetes 集群中的 Ingress 网关接入 AHAS 来玩转流控能力,保障服务稳定性。

快速玩转 AHAS Ingress 流量防护

首先,我们假设我们已有一个创建好的阿里云容器服务的 ACK 集群(如果集群中没有 Ingress,可以在 ACK 组件管理中手动安装),我们只需要在 kube-system 命名空间的 nginx-configuration 配置项 (ConfigMap) 中添加以下两个字段:

use-sentinel: true
sentinel-params: --app=ahas-ingress-demo

即可完成 Nginx/Ingress 流量防护的接入。此时我们打开 AHAS 控制台,就可以看到名为 ahas-ingress-demo 的 Ingress 网关了。

成功接入 AHAS 流量防护后,我们要做的就是先定义好一个请求分组。点开请求分组管理的 Tab 页,我们新建一个名为 test1 的请求分组。我们将 Host 配置为精确匹配类型,值为 127.0.0.1;将 Path 配置为前缀匹配类型,值为 /test/ 。具体的配置如下图所示:

此时我们可以预见,所有请求 Host 为 127.0.0.1 并且请求路径以 /test/ 开头的请求都会归类到名为 test1 的分组中去。此时我们访问一个匹配该请求分组的 URL,如 http://127.0.0.1/test/demo,在 AHAS 控制台-接口详情监控页面可以看到 test1 这个分组的访问量监控。

接下来,我们要对名为 test1 的请求分组进行流量控制,我们既可以在接口详情的 Tab 页,也可以在规则管理的 Tab 页中新增一条流控规则:

即完成了对 test1 请求分组的流控配置。这条流控规则的意思是,在一秒以内,该分组内请求次数超过 10 的请求将会被拦截,阈值生效维度为单机维度。默认情况下,请求被拦截后会返回 429 Too Many Requests 状态码,我们也可以通过 ConfigMap 或直接在控制台配置流控触发后的返回逻辑。

如果此时我们使用压测工具发起 QPS 大于 10 的流量,具体的效果会如下图所示(接口详情监控):

若我们希望针对某个请求分组的集群访问总量进行精确控制,可以配置集群流控规则,配置总阈值即可,而无需关心网关实例数与负载均衡情况。

综上,我们对 Ingress/Nginx 网关进行流控控制,需要先要定义好一个的请求分组,然后再针对这个分组配置相应的流控规则即可,完整的流程可以参考以下流程图:

以上就是在阿里云容器服务 ACK 集群上的 Ingress 流控实践的一个例子,如果是自建的 Ingress 或者 Nginx,也可以参考以下两篇文章快速接入:

  • 将Nginx接入流量防护 - 应用高可用服务 AHAS - 阿里云
  • 使用Ingress-sentinel实现流控 - 应用高可用服务 AHAS - 阿里云

原文链接

本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab vs2010编译器xml,如何在MATLAB R2010a 中使用Visual C++ 2010编译器

1、安装补丁VS2010MEXSupport.zip参考http://www.mathworks.cn/support/solutions/en/data/1-D5W493/index.html?solution1-D5W493由于MATLAB R2010a 发布的时间要比VS2010早,所以在该版本识别不了VC2010编译器。不过R2010a之后的版本应该不会有这种问题了。解压补…

云钉一体加速,阿里云计算巢与钉钉深度融合、共建应用新生态

简介:云合计划再升级,“云钉一体”战略按下加速键。 1月13日,阿里云宣布云合计划再升级,计算巢与钉钉深度融合互通,实现一键上云、一键上钉钉,助力软件厂商更快地完成技术升级,更好地专注于自身…

DevStream 进入 CNCF 沙箱,探索云原生时代的高效 DevOps 实践

2022 年 6 月 15 日,云原生计算基金会 (CNCF) 宣布 DevStream 正式成为 CNCF 沙箱(Sandbox)项目。 DevStream 是一个开源的 DevOps 工具链管理器,可以通过一个简单的配置文件,将软件研发生命周期中各环节的 DevOps 工…

阿里云何万青:南坡VS北坡,阿里云高性能计算行业实践

简介:北坡模式:借助于云上大计算性能突破来提供HPC服务,切入的重点更加聚焦于云服务。 随着数字化转型的深入,行业应用对算力提出更高要求。为满足不同行业灵活的业务形态与计算需求,以云计算技术为服务模式创新的技术…

理论塔板数 matlab,matlab作图法计算精馏理论板数

MATLAB图解法计算精馏塔理论板数中文摘要:双组份精馏是化工生产中重要的单元操作,运用matlab【1】的强大功能,通过绘制精馏段和提留段操作线方程以及进料q线方程,运用图解法计算理论板数和进料板位置,使得求解精确、简…

双引擎驱动Quick BI十亿数据0.3秒分析,首屏展示时间缩短30%

简介:在规划中,Quick BI制定了产品竞争力建设的三大方向,包括Quick(快)能力、移动端能力和集成能力。针对其中的产品“报表查看打开慢”“报表开发数据同步慢”等性问题开展专项战役——Quick战役,以实现展…

Quick BI产品核心功能大图(六)开放集成

简介:企业想要拥有领先的数据分析能力,自研往往需要投入巨大的人力和财力。 Quick BI作为唯一一个连续两年入选Gartner魔力象限的中国BI产品,具备强大的全链路开放集成能力,可以轻松的与企业原有系统匹配融合,帮助企业…

php error_get_last(),PHP捕获异常register_shutdown_function和error_get_last的使用

register_shutdown_function注册一个会在php中止时执行的函数,注册一个 callback ,它会在脚本执行完成或者 exit() 后被调用。error_get_last获取最后发生的错误,包含type(错误类型),message(错误消息),file(发生错误所…

低复杂度 - 服务网格的下一站

作者 | Addo Zhang来源 | 云原生指北译者:作为一个曾经在新造车公司的基础架构团队任职,为支持公司的“互联网基因”和“数字化转型”落地了云原生基础设施平台,并在尝试采用服务网格未成的我来说,看到这篇文章深有感触。尤其是文…

ADBPGGreenplum成本优化之磁盘水位管理

简介:本文我们将通过一个实际的磁盘空间优化案例来说明,如何帮助客户做成本优化。 作者 | 玉翮 来源 | 阿里技术公众号 一 背景描述 目前,企业的核心数据一般都以二维表的方式存储在数据库中。在核心技术自主可控的大环境下,政企…

阿里云图数据库GDB V3引擎发布,加速开启“图智”未来

简介:无论是学术界还是产业界,都对图数据库有比较高的预期。Gartner发布的《2021年十大数据和分析技术趋势》中提到:“到2025年图技术在数据和分析创新中的占比将从2021年的10%上升到80%。”应用需求推动着技术的发展,在GDB V3的引…

url 函数 php,php中url处理函数总结

在php中url处理函数有很多,如有:http_build_query,compact,urldecode、urlencode,parse_url,rawurldecode等等函数。http_build_query(PHP 5) http_build_query — 生成 URL-encode 之后的请求字符串 代码如下复制代码$data array(foo>bar,baz>boom,cow>m…

阿里云EMR Remote Shuffle Service在小米的实践

简介:阿里云EMR自2020年推出Remote Shuffle Service(RSS)以来,帮助了诸多客户解决Spark作业的性能、稳定性问题,并使得存算分离架构得以实施,与此同时RSS也在跟合作方小米的共建下不断演进。本文将介绍RSS的最新架构,在…

Spring Boot Serverless 实战系列 | 性能调优

简介:Spring Boot Serverless 实战系列第四篇来啦,本文将向大家介绍如何对 Serverless 应用进行性能调优。 SpringBoot 是基于 Java Spring 框架的套件,它预装了 Spring 的一系列组件,让开发者只需要很少的配置就可以创建独立运行…

Kafka操作指令笔记

查堆积用命令查: ./kafka-consumer-groups.sh --bootstrap-server {kafka集群地址} --describe --group {消费组名称}bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --all-groups #查看所有组别的积压情况可以通过grep、awk或其他文…

java俄罗斯方块旋转,俄罗斯方块旋转算法研究

发表于 2012-12-05 06:36:24 by 月小升最近在阅读俄罗斯方块的A1 A2 A3 A4B1 B2 B3 B4C1 C2 C3 C4D1 D2 D3 D4旋转以B2 B3 C2 C3 中间的点为旋转轴。旋转以后矩阵变为D1?C1?B1?A1D2?C2?B2?A2?D3?C3?B3?A3D4?C4?B4 A41,1数据变成了 1,4问题:旋…

消息队列 RocketMQ 遇上可观测:业务核心链路可视化

简介:本篇文章主要介绍 RocketMQ 的可观测性工具在线上生产环境的最佳实践。RocketMQ的可观测性能力领先业界同类产品,RocketMQ 的 Dashboard 和消息轨迹等功能为业务核心链路保驾护航,有效应对线上大规模生产使用过程中遇到的容量规划、消息…

SolarWinds发布2022 IT趋势报告:混合IT增加网络复杂性,技术人表示缺乏信心

《SolarWinds 2022 IT 趋势报告 - 扭转 IT 局势:管理混合 IT 复杂性》研究了在混合 IT 加速发展的背景下,负责管理日益复杂的 IT 环境的专业技术人员的现状以及存在机遇的领域 向混合 IT 的持续转变,使 IT 管理更加复杂,专业技术…

ajax异步同步加载PHP代码,jquery中的ajax同步和异步详解

jquery ajax同步的意思是当JS代码加载到当前ajax的时候会把页面里所有的代码停止加载,页面出现了假死状态,当这个ajax执行完毕后才会继续运行其他的代码假死状态解除。而异步的意思是这个ajax代码运行中的时候其他代码一样可以运行。本文给大家详解&…

30人的产研团队如何高效协同?

简介:工具选型及使用建议对于中小企业,基本都不会自己搭建服务器和机房进行部署,而是选择各大云平台,选择一款SaaS项目管理工具可以极大的降低运维成本。 作者介绍:以诺行CTO 刘自强 团队使用云效3年 团队协作需求 …