天天看點

阿裡面試官:如果要抗住雙11高并發壓力,你的Java系統該怎麼設計

作者:石杉的架構筆記

目錄

  • 公司核心系統業務調用鍊路
  • QPS 和 TPS 的概念
  • 一次鍊路跑完是靠什麼跑的呢?
  • 單擊全鍊路壓測 TPS 估算

今天給大家分享一個話題,那就是假設你公司要搞一場雙 11 大促,現在告訴你說,咱們公司就是打算搞了,那你此時會一臉懵逼的說,雙 11 大促?會有多大并發啊?我們系統能抗住嗎?

你要這樣的話,那老闆是一定不高興的了。是以今天就得給大家分析一下,假設你公司要搞大促,你怎麼去通過全鍊路壓測評估一下你的核心系統鍊路能抗多大流量?

公司核心系統業務調用鍊路

首先,如果要為雙 11 大促做準備,咱們必須要對線上系統直接發起全鍊路壓測。

比如說在淩晨業務低峰期的時候,我們自己用壓測系統對咱們的線上核心鍊路發起全鍊路壓測,看看到底我們的整個系統可以抗多少流量,然後再分析一下,搞大促的時候,大概會有多少流量,接着就可以針對大促活動的流量預估,去擴容一下機器。

那麼如果要搞全鍊路壓測的話,這個全鍊路壓測背後的原理大家知道嗎?我們得先給大家講一下這個全鍊路壓測背後的原理。

先說一個非常典型的鍊路,假設我們整個平台的入口是業務系統 A,然後他的核心鍊路裡面,他會調依次調用業務系統 B、業務系統 C、業務系統 D,同時還會讀寫自己的資料庫。

然後業務系統 B 又會調用業務系統 E,業務系統 E 又會調用業務系統 F,業務系統 D 又會調用業務系統 G,每個業務系統都會讀寫自己的資料庫。

如下圖所示:

阿裡面試官:如果要抗住雙11高并發壓力,你的Java系統該怎麼設計

看看上面這個鍊路是不是感覺非常複雜?沒錯的,對于很多公司的核心系統鍊路來說,就是可能會有很多個系統調用的鍊路。

那麼這個時候來說的話,我們假設所有業務系統都是單機部署的,現在來看看,整個這個鍊路內建在一起,大概一秒鐘可以跑完多少次這個鍊路?

QPS 和 TPS 的概念

這裡給大家解釋一下 QPS 和 TPS 的概念,QPS 是 Query Per Second,往往是針對單個系統自己的接口的,意思就是說自己這個接口每秒被請求多少次,TPS 是 Transaction Per Second,意思就是說每秒鐘可以完成的事務數量。

是以這個 QPS 就不太符合我們這裡對全鍊路壓測的定位了,因為全鍊路跑下來,那不是說每秒多少請求可以定義的。

TPS 是比較符合這個定位的,因為我們要看的是每秒鐘這個鍊路跑完,可以跑多少次,跑完一次完整的鍊路,咱們可以認為一個 TPS,每秒鐘可以跑完多少次這個鍊路,那就是 TPS 了。

一次鍊路跑完是靠什麼跑的呢?

好,那麼接着給大家分析,這個一次鍊路跑完是靠什麼跑的呢?

答案顯而易見,靠的是咱們鍊路入口的那個業務系統 A 的一個線程,因為假設業務系統 A 抗的是 http 請求和流量,那麼業務系統 A 必然是靠 tomcat 來接收 http 請求的。

然後 tomcat 是會啟動多個線程來處理一個一個的請求的,每一個請求進來都會交給一個線程來處理。

大家看下圖:

阿裡面試官:如果要抗住雙11高并發壓力,你的Java系統該怎麼設計

接着呢,這個線程收到了一個請求之後,就會按照調用鍊路依次去調用,是以說,要走完一個鍊路,等于業務系統 B、業務系統 E、業務系統 F 這條鍊路得先走完,然後業務系統 C,接着是業務系統 D 和業務系統 G,再有是自己的資料庫通路。

單擊全鍊路壓測 TPS 估算

這整個鍊路跑完大概要花多久呢?這就要看情況了,要看每個業務系統要處理多少時間了,但是這麼複雜的鍊路,往往跑完起碼要幾百毫秒,我們算他 500ms 吧,基本不多也不少了。

那是以說,此時我們的 tomcat 中一個線程,等于每秒也就跑完兩次鍊路而已。

那如果說業務系統 A 的 tomcat 裡開啟了 200 個線程呢?那等于是每秒的 TPS 大概也就 200*2=400 而已。

也就是業務系統 A 單台機器在一秒内,200 個線程可以處理 400 個請求,跑完 400 次鍊路,這就是全鍊路壓測的意義所在,我們要看的是全鍊路跑完一次要耗費多久,然後在較大壓力下,一個線程每秒可以跑完幾次鍊路,再計算單機的 TPS。

進而就可以根據這個單機全鍊路壓測去估算搞大促的時候,每秒要接收多少請求,跑完多少次鍊路,然後就知道要部署多少台機器了。

這就是咱們今天分享的關于全鍊路壓測的一個知識,若有收獲,就點個贊吧!

------------- END -------------

阿裡面試官:如果要抗住雙11高并發壓力,你的Java系統該怎麼設計

另外推薦儒猿課堂的1元系列課程給您,歡迎加入一起學習~

網際網路Java工程師面試突擊課(1元專享)

SpringCloudAlibaba零基礎入門到項目實戰(1元專享)

億級流量下的電商詳情頁系統實戰項目(1元專享)

Kafka消息中間件核心源碼精講(1元專享)

12個實戰案例帶你玩轉Java并發程式設計(1元專享)

Elasticsearch零基礎入門到精通(1元專享)

基于Java手寫分布式中間件系統實戰(1元專享)

基于ShardingSphere的分庫分表實戰課(1元專享)

繼續閱讀