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.

Další informace k uvedené problematice lze najít zde a zde.