Díky omezením, na které jsem ve Windows Azure narazil přišla na přetřes myšlenka instalace vlastního Redis serveru místo existující služby.

Windows Azure má několik omezení a u Redis se jednalo o maximální počet povolených spojení, který zůstává na výchozí hodnotě konfigurace Redisu. U aplikace, ve které plánujete mít až 500 000 aktivních uživatelů je hodnota 10 000 alarmující a určitě je několikrát překročena.

V hlavě už mě napadaly zběsilé představy, jak bude Redis dělen mezi skupiny uživatelů po 50 000 a jak vše bude krásně pokryto supportem a SLA. Když se však spočte cena C1 ve Standardu s 1GB paměti, dostáváme se na částku přes 2000 Kč za jednu instanci. Při 10 instancích se již pohybujeme na nemalých penězích a v tu chvíli leti podobné řešení ze stolu a přichází jiné - vlastní servery s replikací. A1 instance ve Standardu vychází na 1100 Kč, pro zajištění dostupnosti počítáme se dvěmi instancemi. Ve výsledku máme k dispozici Redis o velikosti 1,5GB a SLA 99,95% za zhruba stejné peníze jako nás stála původní instance C1. Návrhy šly stranou, neboť bylo nutné vše nejprve otestovat, než bude nasazeno do produkce.

Základem byl image Ubuntu Server 14.04 LTS s podporou do 17.04.2019, který umožňuje z repozitáře doinstalovat old stable 2.8. V administraci ENDPOINTS daného virtuálu pak přidáme porty pro SSH a Redis. Jak jsem již naznačil, snahou bylo vyhnout se jakémukoli kompilování, tedy Redis byl instalován z balíku pomocí:

apt-get install redis-server

Samotná konfigurace byla po nastudování několika tutoriálů velmi jednoduchá. V souboru /etc/redis/redis.conf je potřeba změnit několik věcí:

vim /etc/redis/redis.conf

V defaultní konfiguraci naslouchá Redis pouze na localhostu což lze změnit úpravou řádku:

bind 127.0.0.1 

za

bind <ipadresa>

Dále je potřeba přidat heslo pro základní authentizaci pomocí hesla. Většinou se dočtete, že máte odkomentovat řádek requirepass, ale ten se jaksi v ubuntu verzi nenachází. Není tedy nic jednoduššího než jej doplnit nad řádek s masterauth:

requirepass <tajneheslo>

Optimalizace si necháme na později, tedy server po uložení souboru restartujeme

/etc/init.d/redis-server restart

Dalším krokem je nastavení Slave serveru pro replikaci. Instalace a úpravy probíhají stejně jako na master serveru. Krom výše upravených řádků je třeba provést specifikaci master serveru:

slaveof <masterip> <masterport>

Dále je potřeba nastavit heslo:

masterauth <master-password>

Redis server opět restartujeme. Výsledkem je nainstalovaná replikace Redisu s výchozí konfigurací. Další postup definuje úpravy maximálního počtu uživatelů:

maxclients 100000

A maximální povolené paměti tak, aby nedocházelo k nežádoucímo swapování apod.

maxmemory 1073741824

Testování nám pak ukáže čísla v závilosti na konfiguraci a vytížení serveru:

SET: 210084.03 requests per second
GET: 197628.47 requests per second