pátek 8. března 2013

Nikdo vám nedá, to co já vám slíbím

Motivací pro tento článek je rozprášit jeden z mýtů kolem cloudu, které občas slýchávám. Obvykle je tento mýtus uveden následující větou:...výhoda cloudu je v tom, že aplikaci nasadíte automaticky na více počítačů jakmile vám vzroste počet uživatelů. S dovětkem Cloudové řešení XYZ, vám tuhle situaci automaticky pohlídá, postará se o poskytnutí nového výpočetního výkonu a dynamického rozložení zátěže. Bez ohledu na to, jakou technologie na úrovni jazyku nebo platformy používáte, je dost naivní si myslet, že vám toto cloud zajistí právě pro vaší aplikaci.

Představte si zmrzlinářku, která na plovárně točí zmrzlinu do kornoutu. Protože se u jejího stánku tvoří dlouhé fronty a lidé jsou nespokojeni, napadne nějakého chytráka, že je potřeba koupit ještě jeden stroj na zmrzlinu. Otázka za pětikorunu zní:pomůže další stroj na zmrzlinu zkrátit ty fronty?. Pokud nebudeme uvažovat v intencích seriálu Akta-X, to znamená, že zmrzlinářka není křížencem člověka a chobotnice a nemá patery ruce, pák nám ten nový stroj na zmrzlinu nepomůže. Proč si tedy myslíme, že nám pomůže přidání nového "zmrzlinovače" v cloud, když na to není naše "zmrzlinářka" připravena? Navíc přidáním jednoho dalšího "zmrzlinovače" se možná zbavíme jednoho problému, ale zase nám přibude úplně jiná rodina problémů, o kterých jsme do té doby nevěděli nebo jsme je mohli směle ignorovat. Jenom si představte tu komickou situaci, jak se nám chapadla alias ruce naší zmrzlinářky/chobotnice perou o zásobník s kornouty a nebo o kasičku, ze které se vracejí peníze nazpět.

Viděl jsem, opravuji četl jsem, o pár aplikacích, které dokáží škálovat způsobem, který mnoho vývojářů pokládá za výkladní skříň cloudu. Pokud se jim podíváte pod pomyslnou kapotu, zjistíte že je potřeba splnit několik celkem netriviálních podmínek, aby dokázaly vytěžit možnosti cloudu při zachování rozumných ekonomických a provozních podmínek.

Architektura aplikace musí s nasazením v cloudu počítat od návrhu až po implementaci a to se zachováním výhodného poměru cena/výkon s udržením vysoké spravovatelnosti aplikace. Nedodržením jakékoliv z těchto podmínek přicházíte o jednu, opakuji jednu, z výhod cloudu.

Architektura a implementace kompromisu

Architektura aplikace využívající možnosti cloudu je o kompromisech, mnohdy o krvavých kompromisech, které musíte být ochotni platit. Prvním kompromisem je míra bezstavovosti versus složitost programovacího modelu. Plně bezstavovou aplikaci nemáte nikdy, protože by to bylo neefektivní z pohledu přenášeného množství dat a robustní abstrakce, kterou by nad tím bylo potřeba vybudovat. Dalším kompromisem je lokální dostupnost dat oproti jejich aktuálnosti. Z výkonového pohledu by bylo nejlepší, kdyby byly data vždy lokálně dostupná a to nejlépe v paměti. Pokud s těmi daty může pracovat více nezávislých procesů, musíte si vybrat mezi jejich dostupností a konzistencí aka CAP theorem.

Technologie, které používáte, nemusí v cloudu dobře fungovat. Proto poskytovatelé clodových řešení nabízejí vlastní technologie, které jsou odladěné pro fungování v cloudu. Kompromis, který volíte při jejich použití se nazývá vendor lockin, tedy závislost na konkrétním dodavateli.


Ekonomická škálovatelnost

Mnoho problémů, které se nám podaří vyřešit na úrovni architektury a její implementace za použití kompromisů, se může promítnout do efektivity, se kterou budeme schopni využívat zakoupené prostředky v cloudu. Jinými slovy, budete mít architekturu aplikace, která bude škálovat za nekřesťanské peníze. Nejde o to jenom škálovat, ale umět škálovat efektivně z pohledu nákladů. Když za jednoho nového uživatele dostanete měsíčně jednu korunu a spočítáte si, že náklady jenom za pronájem hardwaru jsou koruna a deset haléřů, abyste byli schopni ty uživatele obsloužit, pak sice vaše aplikace škáluje technicky, ale nikoliv ekonomicky. Architektura a její implementace by měla využívat maximální sdílení prostředků při zachováním přípustné míry interferencí.

Operovatelnost

Po hříchu jedna z často opomíjených podmínek je spravovatelnost aplikací. Pokud se nebudeme bavit o samozřejmostech, jako je monitoring, pak je potřeba nástroj, kterým budete celé řešení konfigurovat. Věci se začnou opravdu komplikovat, pokud vaše aplikace nebude jeden monolit, ale budete ji mít rozdělenou na víc komponent, nasazených odděleně. Pokud se podíváte na open source technologie, které uvolnil Netflix nebo Twitter, pak je na první pohled patrné, že kolem jedné core technologie, mají několik dalších, které umožňují její běh a správu. Většinou se jedná o technologie pro monitorování, dynamickou správu nebo service discovery. Je potřeba dodat, že nekteří cloudoví poskytovatelé podobné nástroje poskytují.

Není samospasitelných řešení

Ano, cloud nabízí zajímavé možnosti, ale pouze pokud s nimi vaše aplikace počítá. Nerad bych, aby tenhle článek vyzněl proti cloudu, naopak. Celá tahle poznámka je o tom, že bychom se měli učit psát aplikace způsobem, který nám umožní jejich dobrou škálovatelnost. Cloud nám umožní nasazení takto napsaných aplikací za dobrou cenu. Cloud není spása pro vaše aplikace, alespoň pokud je na to nepřipravíte...