Poisson
最近工作需要估計系統的可承載人數,因此想到要模擬多人同時使用系統的情形,想到的作法就是用thread/process來模擬每個user在使用系統,然後再模擬每個user如何使用系統。因此現在問題有兩個
- 模擬多人同時使用系統
- 模擬每人怎麼使用系統
為了解決這兩個問題,首先就要可以模擬每個人怎麼來使用這個系統,在我的case中user使用系統都是靠發webapi,因此可以想成每發一個webapi就是一個event; 所以一個人在使用系統的狀況就等同於有好多個event,大概就像下圖
這不就有點像以前學的poisson process嗎,只要他符合一些poisson的條件(單位時間內超過兩個event來的機率微乎其微)就可以直接套用了,其實你只要了解poisson的應用,大概就知道這類的問題(來店的顧客 等公車的人 來結帳台的人)都可以直接套用poisson process。
我們可以用poisson process來模擬每個user使用的情形,接下來就要模擬多人的情形,當然我們可以開thread/process直接跑,但是人多的時候怎麼辦難道要開幾千幾萬個thread或是用幾千台機器來跑嗎? 其實我們換個角度想想,多人同時使用不就是多個互相獨立的poisson process嗎? 這樣不就可以合成一個密度比較高的poisson process嗎? 這樣我就可以用一台機器開少許的thread/process來達到模擬很多人使用的情形了! 其實就是把多人想成是幾個手速超快的超人在使用系統一樣~
Poisson distribution
poisson distribution是用來描述單位時間內事件發生次數的機率,舉幾個例子
- 收銀台每分鐘的結帳人數
- 公車站每分鐘來等車的人數
- 每年地震發生的次數
一個符合poisson distribution的random variable用數學表示如下: