当前位置: 首页 > 科技观察

阿里面试官:如果要抗住双11高并发压力,你的Java系统该怎么设计

时间:2023-03-21 01:23:36 科技观察

阿里面试官:如果要顶住双11的高并发压力,你的Java系统应该怎么设计?我们公司要做,所以你这个时候会发呆说,双11大促?会有多少并发?我们的系统能承受得住吗?要这样做,老板肯定不高兴。那么今天就不得不为大家分析一下。假设你的公司要搞大促,你如何通过全链路压测来评估你的核心系统链路能承受多少流量?公司核心系统业务调用链路首先,如果要准备双11大促,就必须直接对线上系统发起全链路压力测试。比如在凌晨的业务低峰时段,我们通过压测系统对我们在线的核心链路进行全链路压测,看我们整个系统能承受多少流量,然后进行分析。大促的时候会有多少流量,然后可以预估大促的流量来扩机。那么如果要进行全链路压测,你知道这个全链路压测背后的原理吗?首先要告诉大家这个全链路压测的原理。先说一个很典型的环节,假设我们整个平台的入口是业务系统A,那么在它的核心环节,会依次调用业务系统B、业务系统C、业务系统D,并在同时读写自己的数据库。那么业务系统B会调用业务系统E,业务系统E会调用业务系统F,业务系统D会调用业务系统G,每个业务系统都会读写自己的数据库。如下图所示:看上面的链接,是不是感觉很复杂?没错,很多公司的核心系统环节,可能会有很多系统调用环节。那么这个时候我们假设所有的业务系统都部署在一台机器上。现在我们看看,整个链接整合起来,这个链接大概一秒能跑多少次?QPS和TPS的概念这里给大家解释一下QPS和TPS的概念。QPS即QueryPerSecond,常针对单个系统的接口。表示每秒请求这个接口多少次。TPS是每秒事务处理,表示每秒可以完成的事务数。所以这个QPS不太符合我们这里对全链路压测的定位,因为全链路跑下来,不代表可以定义每秒的请求数。TPS比较符合这个定位,因为我们要看的是链接每秒能跑多少次。跑完一个完整的链接后,我们可以把一个TPS想成每秒能跑多少次。此链接是TPS。它靠什么来运行链接?好吧,那我就给大家分析一下,这个链接运行的原因是什么?答案很明显,取决于我们链接入口处业务系统A的一个线程,因为假设业务系统A抗http请求和流量,那么业务系统A必须依赖tomcat来接收http请求。然后tomcat会启动多个线程逐个处理请求,每个请求都会交给一个线程处理。看下图:接下来线程收到请求后,会根据调用链接依次调用。所以,要完成一个环节,等于是业务系统B,业务系统E,业务系统F,必须先完成这个环节,然后是业务系统C,然后是业务系统D,业务系统G,然后是自己的数据库访问。点击全链路压测TPS,预估整个链路跑完需要多长时间?视情况而定,每个业务系统需要多少时间来处理,但是这么复杂的环节往往至少要几百毫秒才能完成,算500ms吧,基本不多也不少。所以,这个时候,我们tomcat中一个线程相当于每秒运行两个链接。那么如果在业务系统A的tomcat中开200个线程呢?这相当于每秒约200*2=400TPS。即业务系统A单机1秒内可以处理400个请求200个线程,跑400个链接。这就是全链路压力测试的意义。一次需要多长时间,高压下,一个线程每秒可以跑好几个链接,然后计算单机的TPS。然后根据这个单机全链路压测,你可以预估大促期间你每秒会收到多少请求,完成多少链路,你就知道你需要部署多少台机器了。

猜你喜欢