消息队列和应用工具体系-高并发场景下的可靠性难题

简介: 消息队列和应用工具体系-高并发场景下的可靠性难题

开发者学习笔记【阿里云云原生助理工程师认证(ACA)课程:消息队列和应用工具体系-高并发场景下的可靠性难题

课程地址:https://edu.aliyun.com/course/3112075/lesson/190234


消息队列和应用工具体系-高并发场景下的可靠性难题

 

内容介绍:

一.高并发是互联网应用的重要特点和风险

二.不可预测的高并发流量会导致系统不可用

三.弹性伸缩不能完全解决问题

四.单个微服务出现问题会导致连锁问题

五.高并发流量需要更多的整体性能测试和监控

 

一.高并发是互联网应用的重要特点和风险

相较于传统企业的应用场景,在互联网应用场景下最大的特点之一就是应用流量的分布不平均。
以双11为例,下图是考拉中的某一个 double 接口在双11前后几个小时内的流量曲线,大家可以发现在双十一零点的时候,突发的并发流量突然增加到了之前流量的几十倍,这种情况在传统的企业应用场景中并不常见,因此也就对互联网的服务架构提出了更高的要求。

 

image.png

除双11外,典型的例子如铁道部订票网站12306,12306网站在设计之初选择了传统企业架构,这种架构在平时的流量下还可以正常运行,但是在春运等订票高峰时,一旦到放票时间点,突如其来的流量高峰远远超过了传统企业应用架构的负担能力,就会导致整个系统卡顿、延迟,甚至服务不可用,无法为大多数人提供服务,而用户为了能抢到票,又会加大请求速度,结果就是进一步增大请求的流量,从而陷入恶性循环。这就是因为架构设计的不合理,在高并发场景下造成了非常不好的社会影响。

经过了初期的阵痛之后,12306开始放弃了传统企业型的应用架构,转向了采用互联网软件的架构设计。经过几年的架构调整。重构之后的12306对高并发场景下的的流量宏峰有了更好的适应,现在不但可以轻松应对放票时间段、尖峰并发流量,甚至还有多余的计算资源提供更多的功能。

 

二.不可预测的高并发流量会导致系统不可用

互联网场景的另一个特点是会因为一些外部环境的因素导致不可预测的突发流量出现,例如2013年某明星离婚,2017年明星公开恋情,都导致微博等社交媒体出现瞬间激增的流量,从而导致微博服务出现无法正常刷新、无法评论等运营事故,给相关产品造成了相当不好的社会影响。虽然这种不确定流量的绝对值不见得有最高流量时刻的绝对流量高,但是因为突发流量无法预测,系统无法对资源做提前的调度和准备,对系统稳定性和可用性造成的影响不亚于绝对最高流量的场景。而传统单体应用的所有功能都集中在同一应用中,提升并发性性能主要通过提高应用所在服务器的性能来解决。这种方法对可预测流量还可以应付,但是对于突发流量则无法提前预测并准备资源,这种情况下遇到突发流量往往只能束手无策,而采用分布式微服务架构之后,根据服务架构的自我拓展能力,将应用布置在云上,并开启弹性伸缩功能,当突发流量到来时,快速增加服务实例个数,降低单台服务的平均并发量,可在一定程度上解决突发流量对系统带来的压力。

 

三.弹性伸缩不能完全解决问题

弹性伸缩可在一定程度上解决突发流量问题,但是在实际应用场合中,弹性伸缩也有它的局限性。
在上一章的课程中,在讲到 Serverless 理念时提到了 Serverless 理念的一个重要的设计思路:数据的计算和存储分离,即数据的计算可以放在弹性伸缩框架中,根据运算量的大小实时调整实例数目,但数据存储的能力要放在持久化的框架和产品中,以保证数据的安全和稳定。在这种架构中,数据的安全和稳定可以得到相对可靠的保障,但是数据的读取和写入能力往往成为限制系统高并发的瓶颈。也就是说,虽然数据可以得到快速的计算,但是会在写入和读取的时候被排队,导致整体的响应速度被拖慢。
虽然说在数据存储技术当中也有通过增加实例数来增加读取和写入速度的技术手段和框架,但是这些手段往往不具有像数据计算那样极速的弹性扩容能力。

对于突发型流量的响应速度往往不能达到用户所需要的速度。以微博流量为例,如果只是单纯的浏览微博,系统访问的压力并不大,但微博提供了转发、评论、点赞等功能,而这些功能都需要大进行大量的相关数据的修改操作,在这种情况下,一旦遇到突发流量,单单依靠弹性伸缩就不能完全的解决高并发问题。

 

四.单个微服务出现问题会导致连锁问题

在大型系统中,一个功能往往由多个模块组成,模块和模块之间的互相调用关系往往非常复杂,而数据模块通常处于整个调用链路的最底层,在这种情况下,一旦数据操作的排队读写请求过多,会导致请求的等待时间过长,继而在请求超时之后失败,这样不但会导致数据访问模块压力过大,同时,由于上层调用模块向数据访问模块发送请求而长时间没有返回,上层模块也不得不占用自身的系统资源,等待发往数据访问模块的请求结束。
一旦等待请求的数量过多,将会导致上层模块的资源也被迅速消耗殆尽,而这种情况又会导致再上一层次的模块的请求进入等待和资源消耗,从而进入恶性循环。
这种情况称为调用雪崩,在调用雪崩的状态下,大量的资源并不是在处理业务,而是在做无意义的等待和空转。
如图,

image.png

如果没有合适的异常处理手段,Service D 一旦出现异常,会蔓延到 Service G 和 Service F,最后导致最上的Service A 和Service B 完全不可用,而对用户来讲,就会表现出服务卡顿、错误甚至不可用的情况。

 

五.高并发流量需要更多的整体性能测试和监控

在互联网场景下,高并发流量是最容易导致服务不稳定甚至不可用的主要原因,此外,即使是服务可以正常使用,但如果因为并发量变大导致响应变慢,对用户体验的影响也是相当大的。

image.png

如图,根据 Aberdeen Group 公司的研究报告,在外部网站中,1秒的延迟会导致11%的用户流失,同时降低16%的用户满意度,而对于互联网应用来说,一秒的延迟甚至会带来超过16%的价值损失。因此,为了能对大型应用的性能和响应速度有一个直观的掌握,开发者一般会在应用上线之前进行性能测试。所谓性能测试就是指利用自动化的测试系统,模仿大量的用户对系统进行高并发式的访问,来检测系统在高并发流量压力下的反应情况的一种测试手段,所以性能测试又称为压力测试。性能测试不但可以反映系统的整体请求响应情况,同时配合内部的监控系统,性能测试还可以用来进行容量规划,发现模块之间的性能差异和性能瓶颈,以便进行有针对性的优化和调整。因此性能测试是检测系统高可用能力,降低成本、提升用户体验的重要手段,在新版本发布、大促场景准备、线上容量整体规划等场景下显得十分重要。

相关文章
|
8月前
|
关系型数据库 MySQL 分布式数据库
Super MySQL|揭秘PolarDB全异步执行架构,高并发场景性能利器
阿里云瑶池旗下的云原生数据库PolarDB MySQL版设计了基于协程的全异步执行架构,实现鉴权、事务提交、锁等待等核心逻辑的异步化执行,这是业界首个真正意义上实现全异步执行架构的MySQL数据库产品,显著提升了PolarDB MySQL的高并发处理能力,其中通用写入性能提升超过70%,长尾延迟降低60%以上。
|
9月前
|
NoSQL 算法 安全
redis分布式锁在高并发场景下的方案设计与性能提升
本文探讨了Redis分布式锁在主从架构下失效的问题及其解决方案。首先通过CAP理论分析,Redis遵循AP原则,导致锁可能失效。针对此问题,提出两种解决方案:Zookeeper分布式锁(追求CP一致性)和Redlock算法(基于多个Redis实例提升可靠性)。文章还讨论了可能遇到的“坑”,如加从节点引发超卖问题、建议Redis节点数为奇数以及持久化策略对锁的影响。最后,从性能优化角度出发,介绍了减少锁粒度和分段锁的策略,并结合实际场景(如下单重复提交、支付与取消订单冲突)展示了分布式锁的应用方法。
712 3
|
8月前
|
消息中间件 存储 大数据
阿里云消息队列 Kafka 架构及典型应用场景
阿里云消息队列 Kafka 是一款基于 Apache Kafka 的分布式消息中间件,支持消息发布与订阅模型,满足微服务解耦、大数据处理及实时流数据分析需求。其通过存算分离架构优化成本与性能,提供基础版、标准版和专业版三种 Serverless 版本,分别适用于不同业务场景,最高 SLA 达 99.99%。阿里云 Kafka 还具备弹性扩容、多可用区部署、冷热数据缓存隔离等特性,并支持与 Flink、MaxCompute 等生态工具无缝集成,广泛应用于用户行为分析、数据入库等场景,显著提升数据处理效率与实时性。
|
消息中间件
【有奖体验】解锁轻量消息队列(原 MNS)作为云产品间消息通道的典型场景
快来解锁轻量消息队列(原 MNS)作为云产品间消息通道的典型场景,赢丰厚奖品!
171 64
|
缓存 NoSQL 架构师
Redis批量查询的四种技巧,应对高并发场景的利器!
在高并发场景下,巧妙地利用缓存批量查询技巧能够显著提高系统性能。 在笔者看来,熟练掌握细粒度的缓存使用是每位架构师必备的技能。因此,在本文中,我们将深入探讨 Redis 中批量查询的一些技巧,希望能够给你带来一些启发。
Redis批量查询的四种技巧,应对高并发场景的利器!
|
弹性计算 NoSQL 关系型数据库
高并发交易场景下业务系统性能不足?体验构建高性能秒杀系统!完成任务可领取锦鲤抱枕!
高并发交易场景下业务系统性能不足?体验构建高性能秒杀系统!完成任务可领取锦鲤抱枕!
|
缓存 NoSQL Java
高并发场景秒杀抢购超卖Bug实战重现
在电商平台的秒杀活动中,高并发场景下的抢购超卖Bug是一个常见且棘手的问题。一旦处理不当,不仅会引发用户投诉,还会对商家的信誉和利益造成严重损害。本文将详细介绍秒杀抢购超卖Bug的背景历史、业务场景、底层原理以及Java代码实现,旨在帮助开发者更好地理解和解决这一问题。
442 12
|
缓存 监控 Java
Java 线程池在高并发场景下有哪些优势和潜在问题?
Java 线程池在高并发场景下有哪些优势和潜在问题?
292 2
|
NoSQL Java Redis
京东双十一高并发场景下的分布式锁性能优化
【10月更文挑战第20天】在电商领域,尤其是像京东双十一这样的大促活动,系统需要处理极高的并发请求。这些请求往往涉及库存的查询和更新,如果处理不当,很容易出现库存超卖、数据不一致等问题。
446 1
|
Java Linux 应用服务中间件
【编程进阶知识】高并发场景下Bio与Nio的比较及原理示意图
本文介绍了在Linux系统上使用Tomcat部署Java应用程序时,BIO(阻塞I/O)和NIO(非阻塞I/O)在网络编程中的实现和性能差异。BIO采用传统的线程模型,每个连接请求都会创建一个新线程进行处理,导致在高并发场景下存在严重的性能瓶颈,如阻塞等待和线程创建开销大等问题。而NIO则通过事件驱动机制,利用事件注册、事件轮询器和事件通知,实现了更高效的连接管理和数据传输,避免了阻塞和多级数据复制,显著提升了系统的并发处理能力。
344 0