Redis je v dnešní době nejpoužívanější in memory databází na trhu, proto jsem se rozhodl otestovat její hosting na AWS (Amazon Web Services) a GCE (Google Compute Engine).

Použité instance

V rámci testování jsem se snažil použít co nejběžnější instance s vyjímkou těch nejmenších. Důležitou částí testu je to, že Redis nebyl testován z localhostu, ale z druhé instance, vytvořené ve stejné availability zone. Klientská instance byla vždy alespoň dvakrát výkonnější, aby nebyla úzkým hrdlem (jak CPU, tak network).

AWS

Nabízí Redis instance v rámci služby AWS ElastiCache. Jedná se tedy o managed řešení. Při vytváření se dá vybrat z několika druhů instancí a způsobů deploye (například single-node, Multi AZ, …).
V rámci testu jsem použil instanci: cache.m3.medium, která nabízí 2.78GB RAM vyhrazené pro Redis a jedno vCPU. Cena této instance (hostované v regionu eu-west-1 == Irsko) je $0.095 za hodinu, tj. přibližně $70 (1 764 Kč) za měsíc.

GCE

Poskytuje Redis v rámci “one click deployment”, nejedná se tedy o managed databázi, ale vytvoření instance je jednoduché. V rámci testu jsem použil instanci: n1-standard-1, která nabízí 3.75GB RAM pro cely systém a jedno vCPU (2.75 GCEU). Cena této instance (hostované v EU) je $0.069 za hodinu, tj. přibližně $70 (1 280 Kč) za měsíc.
Nevýhodou tohoto řešení je, že se nejedná o managed řešení. Je o trochu levnější, ale cena neobsahuje zálohy, upgrady, celkové zabezpečení serveru.

Způsob testování?

Použil jsem utilitu redis-benchmark, která je součástí standardního redis-tools. Je to mnohem lepší způsob než se snažit během hodiny napsat podobný soft :)

Ukázka použití:

redis-benchmark -q -h <endpoint> -c <concurrency> -n <number_requests> -t set,get,lpush,lpop

Pro zjednodušení celého procesu testování jsem si napsal krátký program v pythonu, který postupně spouští benchmark s různým počtem paralelních klientů a výsledky zapisuje je csv. Tento program je ke stažení zde.

Co se testovalo:

Počet provedených operací daného typu za sekundu, při rozdílných počtech klientů.

celkový počet requestů: 1000000
testované operace: [set, get, lpush, lpop]
počet připojených klientů: [1, 5, 10, 25, 50, 100, 200, 400, 800]

Výsledné grafy

SET, GET, LPUSH, LPOP
SET, GET, LPUSH, LPOP
Redis benchmark srovnání

Celkové zhodnocení

Pravděpodobným úzkým hrdlem celého benchmarku byla síťová infrastruktura daného providera. To je hezky viditelné na grafech. AWS stoupá, ale nakonec se růst prudce zastaví na hodnotě kolem 48k/s. V případe GCE je změna pozvolná a zastaví se na 59k/s (o 23% více než AWS). Z toho usuzuji, že Google má mnohem lépe vyřešenou síťovou infrastrukturu, která neomezí i při velkém zatížení.
Na druhou stranu, se jednalo o extrémní zátěž, ke které nebude v produkčním nasazení běžně docházet. Z tohoto důvodu, je vybrání poskytovatele otázkou, každý má své výhody.
Vítězství tohoto testu jednoznačně patří GCE. Obsáhneme-li do hodnocení i jednoduchost správy a další dostupné služby daného poskytovatele, vyhrává jednoznačně AWS. Jedná se totiž o kompletní řešení. Vše od CDN po Hadoop. Nabídka GCE je v současné době mnohem menší.