Jak dimenzovat datovou propustnost v Azure cloudu
Každého, kdo se podívá na jednotlivé služby, které nabízí Windows Azure platforma, určitě dříve nebo později napadne jak otázka – „Jaký výkon mohu očekávat a jak jej mohu ovlivnit?“
Azure Compute
U compute služby (web role a worker role) to je velice snadné. Parametry jednotlivých velikostí instancí virtuálních strojů jsou přesně definovány typem a počtem procesorů, operační pamětí a lokálním diskem. Správně dimenzovat aplikaci v tomto ohledu znamená správně zvolit velikost instance a případně jejich load-balancovaný počet.
Compute Instance Size |
CPU |
Memory |
Instance Storage |
I/O Performance |
Extra Small |
1 GHz |
768 MB |
20 GB |
Low |
Small |
1.6 GHz |
1.75 GB |
225 GB |
Moderate |
Medium |
2 x 1.6 GHz |
3.5 GB |
490 GB |
High |
Large |
4 x 1.6 GHz |
7 GB |
1,000 GB |
High |
Extra large |
8 x 1.6 GHz |
14 GB |
2,040 GB |
High |
Jinak tomu ale je v případě datových propustností. Když se podíváte do definice jednotlivých virtuálních strojů ve výše uvedené tabulce, kterou jsem zkopíroval z produktového webu, objevíte v posledním sloupci nic neříkající informace. Co za nimi ve skutečnosti stojí? Každému VM je podle jeho velikosti vyhrazena jistá kapacita síťového připojení. Konkrétně to jsou následující rychlosti:
Azure Role |
Bandwidth |
XSmall |
5 Mbps |
Small |
100 Mbps |
Medium |
200 Mbps |
Large |
400 Mbps |
XLarge |
800 Mbps |
Takto je již zcela zřejmé, kolik dotazů a odpovědí definované velikosti je schopna jednotlivá instance propustit za jednotku času sítí.
Azure Storage
Zajímavý pohled je také na službu Azure Storage. Ta je zcela oddělena od výpočetních rolí a její implementační detaily nejsou zveřejněny. Prakticky se dnes dozvíme, jaká je maximální kapacita, time-outy a dostupnost. Ale jaké jsou opět přenosové kapacity této služby?
Na rozdíl od compute role to bohužel nezpraví jedna tabulka. Definujme si nejdříve maximální hodny pro jeden účet, tak jak jsou implicitně nastaveny:
- Kapacita – až do 100 TB (může být na žádost zvětšeno až na velikost PB)
- Transakce – až do 5,000 entit/zpráv/blobů za sekundu
- Propustnost – až do 3 Gb/s
Prakticky se výsledky počtu transakcí a propustnosti budou lišit v závislosti na architektuře aplikace. Zvýšení výkonnosti lze dosáhnout použitím tabulkových particí (viz dřívější post), rozložením zpráv do více front nebo blobů. Pokud se podíváme na parametry u jednotlivých uložišť, tak můžeme dosáhnout následujících parametrů:
- Jedna fronta v jedné queue partici – 500 zpráv/s
- Jedna partice jedné tabulky – 500 entit/s
- Jeden blob – 60MB/s
Výše uvedené parametry jsou maximální dosažitelné hodnoty. Skutečnost může být ovlivněna celou řadou okolností – typicky velikost zpracovávaných dat, síťové latence (typicky 100 ms našich zeměpisných šířkách).
Prakticky si lze ověřit propustnost pomocí Azure Throughput Analyzeru, který jsem popisoval již dříve.