高并发场景下,TPS如何突破5万并发?

高并发是大型互联网架构的核心,也是大厂经常涉及的,下面我重点详解如何突破5万TPS的并发方案@mikechen

高并发

在当今互联网时代,无论是电商平台的促销活动,还是社交媒体的热点事件,都可能瞬间涌入大量的用户请求。

高并发场景下,TPS如何突破5万并发?-mikechen

高并发带来的挑战是巨大的:服务器资源紧张、响应速度变慢、甚至系统崩溃。

TPS突破5万对于许多大规模在线业务而言,是一个关键的技术目标。

TPS(Transactions Per Second):是衡量系统每秒处理事务数量的标准指标。

高并发场景下,TPS如何突破5万并发?-mikechen

TPS反映了系统的吞吐能力,它直接关系到系统的性能、响应时间和用户体验。

举个例子,在一个电商网站中,每一笔支付请求、订单创建请求等都可以视为一个事务,TPS就是系统在单位时间内能够处理多少个这样的事务。

具体来说,5万TPS代表着系统每秒可以处理50,000个事务,这对于大多数电商平台、金融交易系统、社交应用等场景来说是一个巨大的挑战。

突破这一目标意味着架构能够处理更加复杂的业务请求,同时也能够应对突发的流量高峰。

我们需要深入分析,究竟是什么样的架构,才能够支撑如此高的并发。

 

如何支撑高并发?

当TPS达到5万时,系统将面临诸多挑战。

首先,数据库的访问成为瓶颈。

因为在高并发的情况下,大量的数据库查询、和写入操作可能导致数据库的负载过高,响应时间延迟。

这个时候,可以考虑“分库分表”,将数据分散存储,避免单一数据库的压力过大。

 

高并发场景下,TPS如何突破5万并发?-mikechen

通过分库分表,可以将不同的数据存储到不同的数据库中,使得不同数据表的读写操作能够并行执行,提高并发性能。

阿里巴巴的电商平台,例如淘宝、天猫,面对的是海量用户、商品和订单,单一数据库显然无法支撑。

因此,分库拆分是其架构设计的必然选择。

业务领域划分

将核心业务领域独立拆分,形成独立的数据库,实现业务隔离和数据解耦。

确保每个数据库承担明确的业务职责。

常见的分库包括:

高并发场景下,TPS如何突破5万并发?-mikechen

用户库: 存储用户信息、账户信息…等。

商品库: 存储商品信息、库存信息…等。

订单库: 存储订单信息、支付信息…等。

交易库: 存储交易信息,支付信息…等。

店铺库: 存储店铺信息…等。

还可以,按用户ID范围、或哈希取模,进一步拆分成多个表。

比如user_table_01、user_table_02….,分散压力。

 

读写分离

通过主从数据库复制,读操作由从数据库处理,写操作由主数据库处理,减轻主数据库的负担。

高并发场景下,TPS如何突破5万并发?-mikechen

读写分离的核心是主从复制,主数据库(主库)负责处理所有的写操作(INSERT、UPDATE、DELETE),而从数据库(从库)则复制主库的数据,并处理读操作(SELECT)。

主库将写操作的日志(例如,MySQL的binlog)同步到从库,从库通过执行这些日志来保持与主库数据的一致性。

 

高性能缓存

分布式缓存系统是高并发架构中的关键组成部分,通过使用如Redis、Memcached…等,缓存系统。

缓存系统通常用于存储:热点数据、查询结果等高频访问的数据,可以大大减少数据库的访问频率,提升响应速度。

但也需要考虑,在高并发流量的情况下,穿透、雪崩…等等场景。

高并发场景下,TPS如何突破5万并发?-mikechen

缓存穿透

缓存穿透是指查询一个不存在的数据,缓存和数据库中都没有这条数据,导致每次请求都会直接访问数据库。

如果大量请求查询不存在的数据,数据库会承受巨大的压力,甚至崩溃。

解决方案:

使用布隆过滤器来判断请求的数据是否存在。

布隆过滤器是一种高效的数据结构,可以快速判断一个元素是否存在于集合中。

如果布隆过滤器判断数据不存在,则直接返回,避免访问缓存和数据库。

 

缓存雪崩

缓存雪崩是指大量缓存数据在同一时间失效,导致大量请求直接访问数据库,造成数据库压力过大,甚至崩溃。

解决方案:

设置随机过期时间,来解决。

为缓存数据设置随机的过期时间,避免大量缓存数据同时失效。

 

缓存预热

在系统启动时,提前加载热点数据到缓存中,避免大量请求直接访问数据库。

使用多级缓存,例如,本地缓存和分布式缓存结合使用。

 

构建高可用缓存集群

对于redis等缓存服务,做集群,或者使用哨兵模式,避免单点故障,提高可用性。

 

流量削峰

通过消息队列(如Kafka、RocketMQ…等),可以将高峰流量中的请求异步地推送到队列中,消费者按照设定的速率从队列中取出消息进行处理。

这样,系统可以在流量较低时处理请求,避免了系统因瞬时高并发而崩溃。

高并发场景下,TPS如何突破5万并发?-mikechen

例如,在电商平台中,用户下单后,可以将支付请求通过消息队列推送到处理队列,由后台异步处理支付请求,避免高并发时同步处理的压力。

以及,在秒杀活动中,用户的请求量可能会激增,消息队列可以帮助将大量请求排入队列中,逐步处理,以避免系统崩溃。

mikechen睿哥

mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复架构即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法
欢迎您,新朋友,感谢参与互动!