什么是高并发
Java高并发,英文全称是High Concurrency,表示在短时间内同时存在或处理大量的并发事件、任务或请求。
高并发场景案例
例如:最典型的就是阿里双11秒杀,短时间内会有成千上万的用户同时访问该平台,这就是一个高并发系统。
在双11期间,阿里巴巴的各个电商平台,如淘宝、天猫等,都会面临极高的并发访问和交易请求。
比如:同时1000万人在3分钟内去抢购商品,短时间内需要处理1000万人的并发量,这就是典型的高并发场景。
高并发解决方案
比如:典型的双11高并发,都会涉及到如下9大Java高并发解决方案:
1.分布式架构
分布式架构是将系统拆分为多个独立的模块或服务,分布在不同的服务器上,这样可以减轻单一服务器的负载,提高系统的整体并发处理能力。
2.微服架构
常见的分布式架构,最典型的一定会涉及到微服务架构,比如:Spring Cloud 和Spring Cloud Alibaba。
Spring Cloud体系包含如下:
更加详细的请查看:Spring Cloud最全详解(万字图文总结)
以及阿里巴巴打造的:Spring Cloud Alibaba,包含如下核心组件:
更加详细的请查看:Spring Cloud Alibaba详解(史上最全组件文档教程)
以及最新的微服架构:服务网格Service Mesh
更加详细的请查看:服务网格ServiceMesh详解(定义作用及架构组件)
3.负载均衡
当系统面临大量用户访问,负载过高的时候,通常会使用增加服务器数量来进行横向扩展,使用集群和负载均衡提高整个系统的处理能力。
如下图所示:
比如:一台机器不能满足,则增加两台或者多台机器,共同承担访问压力,用负载均衡技术将请求分发到多个服务器上,避免单一服务器过载。
常见的负载均衡算法包括:轮询、随机、最少连接等,更加详细的请查看:5大负载均衡算法(原理图解)
4.分布式缓存
大部分的高并发场景,都是读多写少,要想提高数据的访问速度,那系统必须得加缓存。
使用缓存来存储常用的数据和结果,减轻数据库和服务器的负载,提高数据读取速度。
比如:典型就是使用Redis集群来缓解数据库的压力,提高访问速度。
除此之外,分布式缓存面临比较大的问题,比如:缓存雪崩等。
1)缓存失效,但依然大量请求访问缓存服务redis;
2)redis大量失效后,大量请求转向到mysql数据库;
3)mysql的调用量暴增,很快就扛不住了,甚至直接宕机;
由于大量的应用服务依赖mysql和redis的服务,这个时候很快会演变成各服务器集群的雪崩,最后网站彻底崩溃。
除此之外还会涉及到:缓存击穿、穿透等难点,详细请查看:Redis缓存雪崩、穿透、击穿、数据一致性详解
5.异步处理
对于一些耗时的操作,比如:下订单后的发短信,并发量大的情况下同步操作极为耗时。
消息队列可以实现系统之间的异步通信,发送方将消息发送到消息队列中,而不需要等待接收方的响应。
如下图所示:
这种方式可以提高系统的响应速度和吞吐量,适用于解耦和提升系统性能的场景。
所以,可以考虑采用异步处理方式,如异步下单、支付等,以减少对主流程的阻塞。
6.分库分表
类似淘宝网这样的网站,海量数据的存储和访问成为了系统设计的瓶颈问题。
日益增长的业务数据,无疑对数据库造成了相当大的负载,这里就会涉及到垂直拆分和水平拆分等。
如下图所示:
垂直拆分又可以分为:垂直拆表和垂直拆库,水平拆分又可以分为:水平拆表和水平拆库。
更加详细的请查看:分库分表最全详解(史上最强图文版)
7.消息队列
使用消息队列来处理异步任务和事件,减轻主系统的负载,提高系统的可伸缩性。
比如:最典型就是采用RocketMQ来流量削峰。
8.限流和熔断
设置请求限流和熔断机制,以防止过多的请求进入系统,保护系统稳定性。
9.分布式数据库
使用分布式数据库系统,如分布式 NoSQL 数据库,来提高数据存储和查询的并发处理能力。
综合运用上述高并发架构解决方案,可以构建出具有高性能、高可用和可扩展性的系统,满足大量并发请求的需求。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》