简介: 本次 MSE 治理中心在限流降级、数据库治理及同 AZ 优先方面进行了重磅升级,对微服务治理的弹性、依赖中间件的稳定性及流量调度的性能进行全面增强,致力于打造云原生时代的微服务治理平台。

作者:流士

 

本次 MSE 治理中心在限流降级、数据库治理及同 AZ 优先方面进行了重磅升级,对微服务治理的弹性、依赖中间件的稳定性及流量调度的性能进行全面增强,致力于打造云原生时代的微服务治理平台。

前情回顾

 

在介绍升级能力之前,先简要回顾 MSE 产品的核心能力,分为开发态、测试态及运行态,其中在服务治理中较为常用的功能包括无损上下线、全链路灰度以及日常环境隔离三大功能。

  • 无损上下线方面

支持小流量服务预热,避免新启动应用被流量击垮;而预热模型支持动态调节,可满足复杂场景需求;并且,预热过程支持关联 Kubernetes 检查。

  • 全链路灰度方面

可进行泳道设置,支持网关、RPC、RocketMQ 等;具备流量一键动态切流能力,可通过监控查看切流效果;此外,提供了端到端的稳定基线环境,方便用户快速、安全地验证新版本。

  • 日常环境隔离功能

流量在 feature 环境内流转,实现高效的敏捷开发;各环境逻辑隔离,只需要维护一套基线环境,大幅降低成本;在 IDEA 中使用 Cloud Toolkit 的端云互联,可将本机启动的应用接入到开发环境,降低开发调测成本。

下面介绍流量治理、数据库治理及同 AZ 优先解决的问题和具体方案。

 

限流降级全面升级为流量治理

 

对应流量治理模型在流量防护方面形成可拓展闭环,围绕系统线上环境可能出现的各种问题,进行有效治理。模型始于‘故障识别’,发现不同层次的问题,如接口层的状态码与异常类型、操作系统层的指标异常;在识别出问题后,发出异常告警,方便用户进行针对性的流量治理,如进行自适应限流防护或场景化限流防护;防护规则设置后,系统便按照预设的阈值与防护手段保护系统,而系统防护的效果可通过监控查看,另一方面,也可通过监控反向审视流量防护规则设置的合理性,及时调整。

对于首次接入无历史数据参考的情况,可通过系统压测的方式,结合业务场景设置压测参数,为线上可能出现的问题配置流量治理规则,做好防护策略。

单机流量防护

首先看流量控制,其原理是监控应用或服务流量的 QPS 指标,当指标达到设定的阈值时立即拦截流量,避免应用被瞬时的流量高峰冲垮,从而保障应用高可用性。本产品提供了提供单机限流、集群流控、分钟小时限流、关联限流等多种限流方式,支持滑动窗口、令牌桶、漏斗桶多种限流算法。

对于并发控制,当强依赖的方法或接口出现不稳定的时候,可以通过配置并发线程数来限制不稳定的强依赖并发数,起到隔离异常的效果。若运行该请求的响应时间变长,会导致线程的并发数变大。当并发数超过阈值以后,AHAS 将拒绝多余的请求,直到堆积的任务完成,并发线程数变少。达到将异常隔离,减小不稳定性的效果。

在系统保护方面,支持自适应流控或手动设置系统规则,自适应流控是根据系统的 CPU 使用率自动动态地调整应用程序的入口流量;系统规则是从整体维度手动设置规则,对应用入口流量进行控制。目的都是为了让系统的入口流量和系统的负载达到一个平衡,保证系统在最大吞吐量状态下稳定运行。

熔断防护可以监控应用内部或者下游依赖的响应时间或异常比例,当达到指定的阈值时立即降低下游依赖的优先级。在指定的时间内,系统不会调用该不稳定的资源,避免应用受到影响,从而保障应用高可用性。当指定时间过后,再重新恢复对该资源的调用。

主动降级防护可以指定对某些接口进行降级,被降级的接口会触发自定义的降级行为(如返回指定内容)而不会执行原有的逻辑。

热点防护通过分析资源调用过程中的调用次数较高的参数,并根据配置的热点规则对包含热点参数的资源调用进行限流,保护系统稳定性。

最后,当系统遇到一些非致命性的错误(如偶现的超时等)时,可以通过自动重试的方式来避免系统最终失败。

集群流量防护

其中集群流量防护用于解决单机流控存在流量不均匀、机器数频繁变动以及均摊阈值太小的情况导致限流效果不佳的问题,集群流控可以精确地控制某个服务接口在整个集群的实时调用总量。较适用于以下场景:

1. 服务调用流量不均,需要缓解的情况

流量到每台服务实例不均衡导致单机限流不够精确(总量上“提前限流”),从而无法精确控制总量

2. 集群小流量精确场景

对集群总流量限制比较小的情况,单机限流将失效(比如某个接口每秒总量不超过 10QPS,但机器数为 50 台,即便单机阈值设为 1,仍会超出阈值)

3. 业务集群流控

对于有业务含义的分钟小时级流量控制,可保护下游系统不被(如网关层限制每个用户每分钟调用某个 API 不能超过多少次)压垮。

集群流控具有场景丰富、使用成本低以及全自动管控等优势:

场景丰富:全面覆盖从网关入口流量精确防护、Web/RPC 服务调用精确流控到分钟小时级业务维度流量控制的场景

低使用成本:无需特殊接入方式,开箱即用

全自动管控:自动化管控与分配 server 资源,自动化运维能力保障可用性,无需用户关注资源准备与分配细节,只需关注业务

网关流量防护

网关流量防护则用于精确控制某个或某组 API 的流量,起到提前保护的作用,使多余流量不会打到后端系统。如果按照单机维度配置,一方面网关机器数变化难以感知,另一方面网关流量不均可能导致限流效果不佳。

网关防护具备四点核心能力:

1. API/Host 维度的实时监控与流量控制

2. 动态规则配置,实时生效

3. 集群流量控制,精确控制 API 调用总量

4. 请求参数/header 维度的流控、熔断

全链路&多语言

MSE 升级后的流量治理可应用于微服务的全链路,比如在流量入口层,可通过网关方式接入、在微服务层面不仅可保护微服务自身,也可以保护微服务依赖的中间件、如缓存、数据库等三方依赖、若您通过 ACK 或者 Agent 方式接入,则无需改造一行代码即可轻松接入,若您有高阶流量治理的需求,如自定义埋点,可通过 SDK 方式接入。

 

全新的数据库治理能力

 

典型治理场景

  • 某系统对外提供某查询接口,SQL 语句涉及多表 join,某些情况下会触发慢查询,耗时长达 30s,最终导致 DB 连接池/Tomcat 线程池满,应用整体不可用。
  • 应用刚启动,由于数据库 Druid 连接池还在初始化中,但是此时已经大量请求进入,迅速导致 Dubbo 的线程池满,许多现场卡在初始化数据库连接的过程中,导致业务请求大量报错。
  • 全链路灰度场景中,由于新的应用版本改了数据库表的内容,灰度流量导致线上数据库的数据错乱,业务同学连夜手动订正线上数据。
  • 在项目初期没有对 SQL 的性能做好考量,随着业务的发展,用户量级的增加,线上遗留老接口的 SQL 逐渐成为性能瓶颈,因此需要有有效的 SQL 洞察能力帮助我们发现遗留的 SQL,并及时进行性能优化。
  • SQL 语句处理时间比较长导致线上业务接口出现大量的慢调用,需要快速定位有问题的慢 SQL,并且通过一定的治理手段进行隔离,将业务快速恢复。因此在微服务访问数据层时,实时的 SQL 洞察能力可以帮助我们快速定位慢的 SQL 调用。

其实针对大多数的后端应用来讲,系统的瓶颈主要受限于数据库,当然复杂度的业务肯定也离不开数据库的操作。因此数据库问题,也是优先级最高的工作,数据库治的理也是微服务治理中必不可少的一环。

核心解决方案

  • 慢 SQL 治理

慢 SQL 是比较致命的影响系统稳定性的因素之一,系统中出现慢 SQL 可能会导致 CPU、负载异常和系统资源耗尽等情况。严重的慢 SQL 发生后可能会拖垮整个数据库,对线上业务产生阻断性的风险。线上生产环境出现慢 SQL 可能原因如下:

  • 网络速度慢、内存不足、I/O 吞吐量小、磁盘空间被占满等硬件原因。
  • 没有索引或者索引失效。
  • 系统数据过多。
  • 在项目初期没有对 SQL 的性能做好考量。
  • 连接池治理

连接池治理是数据库治理中非常重要的一个环节,通过一些链接池的实时指标,我们可以有效地提前识别系统中存在的风险,以下是一些常见的连接池治理的场景。

1. 提前建连

在应用发布或者弹性扩容的场景下,如果刚启动实例中的连接并有没完成建立,但此时实例已经启动完成,Readiness 检查已经通过,意味着此时会有大量的业务流量进入新启动的 pod。大量的请求阻塞在连接池获取连接的动作上,导致服务的线程池满,大量业务请求失败。如果我们的应用具备提前建连的能力,那么就可以在流量到达前,将连接请求数保证在 minIdle 之上,并且配合小流量预热的能力,那么就可以解决以上这个让人头疼的冷启动问题了。

2. "坏"连接剔除

有时候连接池中会存在一些有问题的连接,可能是底层的网络出现了抖动,也有可能是执行的业务出现了慢、死锁等问题。如果我们可以从连接池的视角出发,及时地发现异常的连接,并且进行及时地剔除与回收,那么就可以保证连接池整体的稳定性,不至于被个别有问题的业务处理或者网络抖动给拖垮。

3. 访问控制

理论上并不是全部数据库表都可以随便访问的,在某些时候,有些重要的表可能对于一些不太重要的服务来说,我们希望它是一个禁写、只读的状态,或者当数据库出现抖动、线程池满的情况下,我们希望减少一些耗时的读库 SQL 执行,又或者有一些敏感数据的表只允许某个应用去进行读写访问。那么我们就可以通过动态的访问控制能力,实时下发访问控制规则,来做到对于个别方法、应用的 SQL 面向数据库实例、表的禁读禁写等黑白名单的访问控制。

  • 数据库灰度

微服务体系架构中,服务之间的依赖关系错综复杂,有时某个功能发版依赖多个服务同时升级上线。我们希望可以对这些服务的新版本同时进行小流量灰度验证,这就是微服务架构中特有的全链路灰度场景,通过构建从网关到整个后端服务的环境隔离来对多个不同版本的服务进行灰度验证。MSE 通过影子表的方式,用户可以在不需要修改任何业务代码的情况下,实现数据库层面全链路灰度。

  • 动态读写分离

通过 MSE 提供的 SQL 洞察能力,结合我们对业务的理解,我们可以快速定位划分接口请求为弱请求。将对主库性能以及稳定性影响大的读操作,分流至 RDS 只读库,可以有效降低主库的读写压力,进一步提升微服务应用的稳定性。

以上这些是 MSE 即将推出的一个数据库治理能力的预告,我们从应用的视角出发整理抽象了我们在访问、使用数据库时场景的一些稳定性治理、性能优化、提效等方面的实战经验,对于每一个后端应用来说,数据库无疑是重中之重,我们希望通过我们的数据库治理能力,可以帮助到大家更好地使用数据库服务。

 

同 AZ 优先

 

同城的特点是 RT 一般处在一个比较底的延迟(< 3ms 以内),所以在默认情况下,我们可以基于同城的不同机房搭建起来一个大的局域网,然后把我们应用跨机房分布在多个机房中,以此来应对单机房出现故障时的流量受损风险。相比异地多活,这种基础设施的建设成本较小,架构变动也比较小。不过在微服务体系之下,应用之间的链路错综复杂,随着链路深度越来越深,治理的复杂度也会随之增加,如下图所示的场景就是前端流量很有可能因为在不同的机房相互调用而导致 RT 突增,最终导致流量损失。

使用场景

当应用部署在多个机房的时候,应用之间互相调用会出现跨机房的情况

机房 1 的 A 应用调用机房 2 的 B 应用,跨机房调用网络延时增加,导致 HTTP 响应时间增加。

开启同机房优先后,consumer 会优先调用同机房的 provider 服务:

解决方案

根据路由规则,自动识别同可用区,并优先选择同可用区减少调用时延,提升性能,并可实现容灾场景下的流量切换,保障可用性。

结语

 

MSE 治理中心在限流降级、数据库治理及同 AZ 优先方面的能力升级,有助于企业更便捷地做好系统弹性、及时感知系统 SQL 异常状态,做好针对性治理与防护,同 AZ 优先可提升系统整体性能,构建强健而稳定的运行环境。本次升级是治理中心升级的第一阶段,后续会不断推出治理手段,为您的系统保驾护航。

MSE 注册配置中心专业版首购享 9 折优惠,MSE 云原生网关预付费全规格享 9 折优惠。点击此处,即享优惠!

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

MSE 治理中心重磅升级-流量治理、数据库治理、同 AZ 优先的更多相关文章

  1. 架构从最简单的数据访问框架(ORM)到资源调度和治理中心(SOA)说起

    随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构当网站流量很小时,只需一个应用,将 ...

  2. 云数据库技术|“重磅升级”后再测 TDSQL-C

    来源:云数据库技术 标题 1.摘要 前段时间,测试了国内主要云原生数据库 PolarDB.TDSQL-C.GaussDB 的性能,参考:<再测云原生数据库性能>.在上次测试结果中,由于地域 ...

  3. POLARDB 2.0 重磅升级,分别支持Oracle与PostgreSQL

    点击订阅新品发布会! 新产品.新版本.新技术.新功能.价格调整,评论在下方,下期更新!关注更多内容,了解更多 最新发布 POLARDB 2.0 重磅升级 2019年6月19日15时,阿里云 POLAR ...

  4. C++ Primer中文版(第5版)(顶级畅销书重磅升级全面采用最新 C++ 11标准)

    C++ Primer中文版(第5版)(顶级畅销书重磅升级全面采用最新 C++ 11标准) [美]Stanley B. Lippman( 斯坦利李普曼)  Josee Lajoie(约瑟拉乔伊 )  B ...

  5. vultr vps2016年免费升级流量和cpu

    拥有超高性价比的vultr vps在2016年第一天宣布全面升级vps产品: 悉尼.东京机房vps全部免费升级到北美和欧洲机房相同流量.这就意味着,东京机房vps流量,以1024 MB内存的套餐为例, ...

  6. SpringCloud Alibaba Nacos 服务治理中心

    目录 一.什么是Nacos? 二.Nacos能干吗? 三.Nacos关键特性 四.Nacos中的基本概念 五.如何安装部署Nacos? 六.Nacos数据持久化 一.什么是Nacos? 英文全称Dyn ...

  7. Dubbo学习笔记1:使用Zookeeper搭建服务治理中心

    Zookeeper是Apache Hadoop的子项目,是一个树形的目录服务,支持变更推送,适合作为Dubbo服务的注册中心,工业强度较高,推荐生成环境使用. , 下面结合上图介绍Zookeeper在 ...

  8. Redis挂了,流量把数据库也打挂了,怎么办?

    你好呀,我是歪歪. 是这样的,前几天有个读者给我发消息,说面试的时候遇到一个场景题: 他说他当时,一时间竟然找不到回答问题的角度,感觉自己没有回答到点子上. 我仔细想了一下,确实是感到这个问题有一丝丝 ...

  9. 边缘节点服务ENS重磅升级 阿里云首次定义“边缘云计算”概念层层深入

    随着5G.物联网时代的到来以及云计算应用的逐渐增加,传统集中式的云计算技术已经无法满足终端侧“大连接,低时延,大带宽”的需求.结合边缘计算的概念,云计算将必然发展到下一个技术阶段,也就是将云计算的能力 ...

  10. 逆天!百度AI音箱重磅升级:最大梦想实现

    7月3日-7月4日,“Baidu Create 2019”百度AI开发者大会,在中国北京·国家会议中心举行. 百度创始人.董事长兼首席执行官李彦宏将与百度各业务板块的领军人物一起,为来自全球各地的开发 ...

随机推荐

  1. Typora自定义主题详解--打造自己的专属样式

    你真的会使用Typora吗? 欢迎关注博主公众号「Java大师」, 专注于分享Java领域干货文章, 关注回复「主题」, 获取大师使用的typora主题: http://www.javaman.cn/ ...

  2. Ubuntu14.04 apache2 配置 CGI(并测试:shell,可执行文件,python)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  3. 巧用Maya轴心操作小技巧,工作事半功倍!

    Maya 是一款专业的三维软件,可以用于创建规模宏大的世界.复杂的角色和炫酷的特效.Maya的用户遍布动画行业.影视特效.广告和片头.平面设计行业,用户数量十分庞大.本文分享了maya轴心操作的小技巧 ...

  4. 记录--你可能忽略的10种JavaScript快乐写法

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 代码的简洁.美感.可读性等等也许不影响程序的执行,但是却对人(开发者)的影响非常之大,甚至可以说是影响开发者幸福感的重要因素之一: ...

  5. 分享一个项目:go `file_line`,在编译器得到源码行号,减少运行期runtime消耗

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 file_line https://github.com/ ...

  6. DW:优化目标检测训练过程,更全面的正负权重计算 | CVPR 2022

    论文提出自适应的label assignment方法DW,打破了以往耦合加权的惯例.根据不同角度的一致性和非一致性指标,动态地为anchor分配独立的pos权重和neg权重,可以更全面地监督训练.此外 ...

  7. KingbaseES V8R3 集群运维案例 -- cluster.log无日志输出问题诊断

    案例说明: KingbaseES V8R3集群正常运行期间,现场发现cluster.log日志无任何信息输出,针对这一问题做了复现及提出解决方案.后现场检查发现,cluster.log文件曾被删除: ...

  8. #Tarjan,树的直径#CF1000E We Need More Bosses

    题目 给定一个\(n\)个点\(m\)条边的无向图,找到两个点\(s,t\),使得\(s\)到\(t\)必须经过的边最多 分析 桥就是必须经过的边,考虑给无向图缩点, 按照桥建一棵树,那么就转换成了求 ...

  9. 【直播回顾】OpenHarmony知识赋能五期第四课——子系统音频解读

    5月12日晚上19点,知识赋能第五期第四节课<OpenHarmony标准系统多媒体子系统之音频解读>,在OpenHarmony开发者成长计划社群内成功举行. 本期课程,由深开鸿资深技术专家 ...

  10. Java 异常处理与正则表达式详解,实例演练及最佳实践

    Java 异常 - Try...Catch 在 Java 代码执行期间,可能会发生各种错误,包括程序员编码错误.用户输入错误以及其他不可预料的状况. 当错误发生时,Java 通常会停止并生成错误消息, ...