Nézzünk egy példát.
Jelenleg egy olyan esetet mutatok be, ahol az erőforrás egy dedikált célt szolgál. Ugyanis ha terhelés elosztás van, akkor véletlenszerű a kérések szétdobálása, és így mindig kerül valamennyi kérés mindegyik szerverre. Még ha csökkenő mértékben is.
Ezzel szemben egy olyan példát mutatok be, amikor minden kérést ki akarunk szolgálni. És az erőforrásnak van egy életciklusa és egyre kevesebb kérés érkezik rá. Egy idő után pedig nem érkezik kérés. Mennyi idő múlva kapcsoljuk le ilyen esetben?
Látható, hogy a nulla és végtelen között van valahol egy optimum. Mivel ezt az optimumot a jövő határozza meg és a jövő nem jósolható, ezért ez egy nyitott probléma. Nem ismerhető meg a teljes probléma domain a döntéshez. Viszont mégis vannak eszközeink az optimum közelítésére.
Egy relatíve egyszerű eljárást és matematikai számítást mutatok be nektek.
Tegyük fel, hogy beélesítés után egy adott szerverre a naponta érkezett kérések száma az alábbi módon néz ki (198 bejegyzés, kicsit több mint fél év):
1 0 2 0 0 2 0 0 3 0 0 0 3 0 3 0 3 0 0 4 0 0 4 0 0 4 0 0 0 0 0 4 0 4 0 0 0 0 4 0 0 0 0 3 0 0 3 0 0 3 0 3 0 0 0 0 3 0 0 0 0 0 3 0 0 0 0 3 0 0 0 0 3 0 2 0 2 0 2 0 2 0 0 2 0 2 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 1
Vizuálisan:
Látszik, hogy van egy rövid normális felfutás és egy hosszabb negatív exponenciális lecsengés várható.
Tegyük fel, hogy ettől a pillanattól kezdve nem érkezik több kérés. Legalábbis úgy tűnik. Ahogy telnek a napok, úgy nő a nulla értékek száma a lista végén.
Mikor kapcsoljuk le?
Rövid válaszom:
Utolsó nullákat kivéve átlagot számolunk, ez legyen “m”. Az utolsó nullák száma legyen “n”. És ha exp( -m * n ) értéke kisebb mint 0.0027, akkor lekapcsolhatjuk az erőforrást.
Hosszabb válaszom:
Poisson eloszlás.
Megvizsgáljuk, hogy a múltbeli értékek alapján mekkora az esélye „n” db nullának. Másképp fogalmazva, kiszámoljuk, hogy hány db nulla érték ad kisebb esélyt, mint egy általunk választott határérték. Vagyis az extremitás mértékét vizsgáljuk. És ha elég extrém, akkor úgy tekintjük, hogy az esemény már nem “normális” hatások eredője, tehát valós hatás van arra nézve, hogy már nem kell az erőforrás.
Hogyan tudjuk ezt megtenni?
A lista végéről levesszük a nullákat, ha vannak. Majd átlagot számolunk az értékeken, mely kell a Poisson matekhoz. Ezzel egyetlen nulla érték bejövetelének esélyét kapjuk meg. De mi több nulla esélyét keressük. És mivel ezen eseményeket egymástól függetlennek tekintjük, ezért ezek egymástól függetlenül tudnak kombinálódni. Így az esélyeiket össze kell szoroznunk a kombinált esély számításához.
Ha hosszabb időre van adat, akkor az utolsó időszakot is használhatjuk, hogy frissebb trendekkel számoljunk. Például az utolsó 3 hónap alapján.
Tehát egyetlen nulla bejövetelének esélye Poisson eloszlással számolva, ahol „m” az eredeti lista értékeinek aritmetikai átlagát jelenti, x pedig azt, hogy mekkora érték megjelenésének esélyét keressük:
m^x * e^(-m) / x!
Mivel a nulla érték esélyét keressük, így x értéke 0, ezért:
m^0 * e^(-m) / 0! =
1 * e^(-m) / 1 =
e^(-m)
És mivel “n” db nulla érték esélyét keressük végezetül, ezért több ilyen eseményt kell “n”-szer összeszorozni, tehát:
e^(-m) * e^(-m) * e^(-m) * … =
( e^(-m) )^n =
e^(-m * n)
Ez adja a végső keresett válaszunkat. Ekkora az esélye “n” db nulla érték előfordulásának.
De hol legyen a határ? Mennyire kicsi esélyt tekintsünk túl kicsinek?
Több blog posztomban leírtam a miérteket. Ha határértéket vizsgálunk, akkor legalább kell 2 szigma, de maximum elegendő 3 szigma megbízhatóság. Ez utóbbi 0.27%-ot jelent. Szigma alatt a normál (Gauss) eloszlás területének fedettségét értjük a szórásának egész számú többszörösével. Ezért ez matematikai referencia pont. Szintén hosszú téma, külön témát megér.
Tehát a végső válasz az, hogy ha a megjelenő nullák esélye 0.27% alá megy, akkor bizonyossággal lekapcsolhatjuk az erőforrást.
Mennyi üresjárati nap után érdemes a fenti konkrét esetben lekapcsolni a szervert?
A válasz: 13 nap után. Mivel 12 nap esélye 0.002973, 13-é pedig 0.0018307. Az esélyek csökkenése a nulla napok számának növekedésével így néz ki:
Jelen leírásban azt vizsgálom, ha minden kérést ki akarunk szolgálni. Ha viszont az a feladat, hogy mennyi kérésig "éri meg" a plusz erőforrás, az más típusú számítást igényel.
- sinexton blogja
- A hozzászóláshoz be kell jelentkezni
- 296 megtekintés
Hozzászólások
Kiegészítés:
Ha vannak nem várt leállási időszakok sok nullával közben, melyek mesterségesen generáltak és függetlenek a véletlen hatásoktól, akkor az torzítja a Poisson eloszlást. Az átlag túl magas lehet és kevés napnál jelezne a fenti eljárás.
Ilyenkor egyszerű a megoldás. Minden nullánál nagyobb értéket 1-nek veszünk, mellyel azt kérdezzük matematikailag, hogy volt-e kérés egyáltalán az adott napon. Majd így számolunk esélyt. Tehát ha egy nap volt 15 kérés, azt 1-nek vesszük. Ha nulla volt, azt nullának. Az így számolt Poisson esély limitje pedig még erősebben megbízhatóbb lesz.
Így számolva a fentit:
1 üres nap --> 0.8007 esély
2 üres nap --> 0.6411 esély
3 üres nap --> 0.5134 esély
4 üres nap --> 0.4111 esély
5 üres nap --> 0.3291 esély
6 üres nap --> 0.2636 esély
7 üres nap --> 0.211 esély
8 üres nap --> 0.169 esély
9 üres nap --> 0.1353 esély
10 üres nap --> 0.1083 esély
11 üres nap --> 0.0867 esély
12 üres nap --> 0.0694 esély
13 üres nap --> 0.0556 esély
14 üres nap --> 0.0445 esély
15 üres nap --> 0.0356 esély
16 üres nap --> 0.0285 esély
17 üres nap --> 0.0228 esély
18 üres nap --> 0.0183 esély
19 üres nap --> 0.0146 esély
20 üres nap --> 0.0117 esély
21 üres nap --> 0.0094 esély
22 üres nap --> 0.0075 esély
23 üres nap --> 0.006 esély
24 üres nap --> 0.0048 esély
25 üres nap --> 0.0038 esély
26 üres nap --> 0.003 esély
27 üres nap --> 0.0024 esély
28 üres nap --> 0.0019 esély
29 üres nap --> 0.0015 esély
30 üres nap --> 0.0012 esély
A válasz: 27 nap.
- A hozzászóláshoz be kell jelentkezni