如何理解業務模型,來設置性能場景

有人說,就是因為這樣才應該直接用生產流量的方式來做嘛,這樣就不用管業務模型了,直接就有生產的業務模型了。沒錯,只要你能通過生產流量擴大回放的方式實現壓力部分,確實可以不用考慮業務場景了。

但這麼做的前提也必須是你的生產流量來源是可以覆蓋想要測試的業務場景的。

回放的邏輯借用大神的圖來說明下:

 

 如果你喜歡的話,還可以在每一個業務產品和基礎架構的層面做介面的回放,甚至我們可以直接在資料庫中回放 SQL。而這些手段,都是為了模擬生產的業務模型。

我知道,現在有很多人在各種場合說,可以直接在生產環境中,通過業務統計動態統計出業務場景,並實時實現到性能平台中去。

這當然是一個很好的路子,但這個路子需要完整的技術實現,並且在不同的企業中,這種方式難就難在創建業務模型的統計演算法,此外還要有高層領導的支援,才能真正實現完整的邏輯。

那就是從生產數據統計,怎麼轉化到具體的場景中的業務模型。

生產數據統計

思路就是:先拉取生產數據,

首先我們從生產環境取出數據,粒度到秒級,取出所有業務的交易量數據。業務量級按天統計的生成圖如下:

 

 我為什麼要取這一段時間的數據呢?答案很簡單,因為這一段時間完整地體現了這個業務系統的峰值數據

從這樣的數據中取出業務量最高的一天,最大的業務量是 2000 萬左右。

注意,我這裡說的是業務量最高的一天,並不是說我們的業務場景只從這一天產生,還有別的時間,可能業務量不多,但是業務比例會完全不同,這也是要取出來的場景,所以這個統計數據到業務模型的分析過程會比較細緻。我們把這一天的邏輯說完後,你就會明白其他的場景獲取方式。

接著,我再以小時為單位統計出業務量比例。如下圖所示:

 

 從上圖顯然可以看出哪個小時的業務量最大,那就是 9 點。

但是呢,你不要忘記了,在 16 點的時候,明顯藍色表示的那個業務量是大於 9 點時的業務量的。這個也是要取出來的場景。

如果需要更細的數據,我們可以以分鐘為單位看一下這個小時內的業務量分布。

 

 如果你的業務有必要從分鐘或秒來看的話,可以按分鐘或秒來取場景比例。在我們今天的這個案例中,取到小時就已經足夠。因為我要的是業務模型,而不是生產 TPS 量級。

另外,既然說到了這裡,我再把生產 TPS 量級的統計說一下。有了上面的分鐘統計比例,就可以很容易統計出生產環境中每個業務的最大 TPS 了。這裡得到的 TPS 將是最有效的測試是否通過的 SLA 指標。

 下面我們再以小時為單位做出百分比圖。

 

 為什麼要做百分比圖呢?因為這個比例才是我們在性能場景中設置的 TPS 比例,是最直接有效的比例。

 

業務模型計算過程

針對這一天中的數據,我們將做出以下三個業務模型。

1、通用業務場景模型。就是將這一天的所有業務數加在一起,再將各業務整天的交易量加在一起,計算各業務量的比例。

2、9 點鐘的業務模型。將 9 點鐘的業務比例直接拿出來用。

3、16 點的業務模型。將 16 點鐘的業務比例直接拿出來用。

首先我們看一下通用業務模型。

 

 我們將上面的 0% 的業務全部刪除,再計算一次百分比,得到測試場景中的業務比例。如下所示:

 

 做為最基礎的業務比例,這個可以覆蓋大部分的業務時間了。在通用的業務場景中,如果業務團隊有給出明確的 TPS 指標,那就有依賴了。但是,如果沒有給的話,也不要氣餒。

我們可以根據系統的運行時段,計算平均值即可。因為我們這個系統是 24 小時系統,所以我用 24 小時來計算。

得到如下值:TPS1=24∗360020000000​=231也就是說通用場景中,TPS 不能低於 231。

接著我們看下 9 點的業務模型。計算方法和上面一樣,最後得出比例。

 

 我們可以從小時圖中看到,9 點的業務量總和有 120 萬左右。為了方便,這裡我拿 120 萬來計算。

它的生產 TPS 就是:1,200,000 / 3600 = 333。

顯然,這個模型下做場景時就不能低於 333TPS。

最後看一下 16 點的業務場景。

 

 從小時圖中,我們可以看到,16 點的業務量總和有 100 萬左右。為了方便,這裡我拿 100 萬來計算。

它的生產 TPS 就是:TPS3=36001,000,000​=277顯然,這個模型下做場景時就不能低於 277TPS。

但是請注意,像 9 點業務模型中的業務 11,佔比達到 30.25%;而 16 點業務模型中只有 8.69%。雖然 TPS 差不多,但是業務比例差別大,這兩種業務模型下,對系統資源的消耗會完全不一樣。

有了這個計算過程,當我們把這些比例設計到場景中去的時候,一定要注意這些 TPS 的比例在運行過程中,不能發生大的變化。一旦壓力發起後,由於各業務的響應時間隨著壓力的增加發生的變化量不同,就會導致運行過程中業務比例出現很大的偏差。我們做性能測試工程師的,都有過這樣的經歷。通常,在 LoadRunner 里,會用pacing來控制 TPS,而用 JMeter 的,則會用Constant Throughput Timer來控制 TPS。

總結

在這一篇中,我描述了業務模型的來源和計算過程。其實就是一些常規的求和平均計算,只要判斷出哪一段業務是我們需要的就可以了。

另外我也強調了,不管用什麼炫酷的手段來實現生產環境的流量模擬,最終的目標是實現和線上比較接近的業務模型。

不是說一定用生產流量回放才是正確的,只有適合自己企業的手段才是最正確的。