Poisson

最近工作需要估計系統的可承載人數,因此想到要模擬多人同時使用系統的情形,想到的作法就是用thread/process來模擬每個user在使用系統,然後再模擬每個user如何使用系統。因此現在問題有兩個

  1. 模擬多人同時使用系統
  2. 模擬每人怎麼使用系統

為了解決這兩個問題,首先就要可以模擬每個人怎麼來使用這個系統,在我的case中user使用系統都是靠發webapi,因此可以想成每發一個webapi就是一個event; 所以一個人在使用系統的狀況就等同於有好多個event,大概就像下圖

poisson

這不就有點像以前學的poisson process嗎,只要他符合一些poisson的條件(單位時間內超過兩個event來的機率微乎其微)就可以直接套用了,其實你只要了解poisson的應用,大概就知道這類的問題(來店的顧客 等公車的人 來結帳台的人)都可以直接套用poisson process。

我們可以用poisson process來模擬每個user使用的情形,接下來就要模擬多人的情形,當然我們可以開thread/process直接跑,但是人多的時候怎麼辦難道要開幾千幾萬個thread或是用幾千台機器來跑嗎? 其實我們換個角度想想,多人同時使用不就是多個互相獨立的poisson process嗎? 這樣不就可以合成一個密度比較高的poisson process嗎? 這樣我就可以用一台機器開少許的thread/process來達到模擬很多人使用的情形了! 其實就是把多人想成是幾個手速超快的超人在使用系統一樣~

poisson-merge

Poisson distribution

poisson distribution是用來描述單位時間內事件發生次數的機率,舉幾個例子

  1. 收銀台每分鐘的結帳人數
  2. 公車站每分鐘來等車的人數
  3. 每年地震發生的次數

一個符合poisson distribution的random variable用數學表示如下:

Poisson process

Inter-arrival time

Reference

results matching ""

    No results matching ""