This weekend I attended Rockaway AWS Hackathon. The topic of the event were technologies of Amazon Web Services. We use some of them in our company to run ABRA FlexiBee. But I wanted to see more of them. I was born megalomaniac so I was interested in technologies that will allow me to scale my applications to the sky.
The hackathon consisted of two parts – presentations and mainly programming. Programming of a chosen task in small teams during 30 hours. The organizers wanted us to really touch the technology. So they prepared credits in total amount of ca. 8 000 $ (ca. 200 000 CZK). And that’s a lot for a 24-hour meet-up. For better imagination – it is large enough to allow us run FlexiBee for a half of a year. So I said to myself – I want my application so scalable and massive that I will spend all this money alone 🙂
One of the most interesting presentation there was AWS Lambda by Štěpán Bechynský. AWS Lambda is a small piece of a program that you can upload to AWS. And it’s easy to run it. It can be quiet large, but the time spend during invocation has to be within chosen limit (usually between 5 seconds to 5 minutes maximally). You just write the program and the rest is handled by Amazon.
Later there were presentations of ideas and split into teams. Nearly every other attendant already knew what they want to do ahead. But I wasn’t preparing for this hackathon in advance, so I had neither team nor idea. I thought I will do it on place. So I became a member of popular team “Miserables”. Those who remained at each others and didn’t know what they will do.
We were discussing for a while that we will make analysis of transparent bank accounts using WebAPI from Česká Spořitelna. But at the end we chosed idea of one of the organizers (my wife later told that it was smart step :-).
Our application
We decided to make simple application to track sharing of web page address (URL) on social medias (Facebook, Twitter, Google+ and LinkedIn). User enters web address and service shows him number of sharing. Then it checks actual state every 5 minutes. That is stored and user can see history of it.
Result can be seen on this video. Screenshots are at the end of this article:
Note: Graph in this video is artifical. This part of the application was not finished before preparing presentations and we hadn’t enough time to change it.
V našem týmu jsme byli tři: mladý talentovaný grafik Marek Dlugoš, programátor Lukáš Kříž a já. Se skromností sobě vlastní jsem se ujal vedení týmu. Marek dal naší aplikaci to nejdůležitější a to pěkný design. S Lukášem jsme vše naprogramovali.
Aplikaci jsme stavěli tak, že se jednalo o sadu úloh AWS Lambda v node.js, které byly volány pomocí AWS API Gateway. Jednotlivé úlohy jsou volány z různých serverů a IP adres, což nás zbavilo starostí s limity na množství volání API služeb sociálních sítí.
Nejdříve jsme napsali základ aplikace a pak začali řešit její schopnost škálovat. Nechali jsme kontrolovat 18 000 různých adres a zkoušeli zatížení. Samozřejmě neúspěšně. Problém byl právě maximální časový limit spouštěné aplikace. Načetli jsme odkazy ke zpracování z databáze a začali rozdělovat úkoly. To ale trvalo dlouho. Vyzkoušeli jsme spoustu slepých uliček, až jsme skončili u načtení všech adres, jejich rozdělení po stovkách, odeslání další službě, která zajistila spuštění podúloh s kontrolou jednotlivých adres. Během cca 20 vteřin jsme byli schopni otestovat desítky tisíc adres najednou.
Celkem jsme provedli během dvou hodin milion kontrol. To znamená, že jsme provedli milion požadavků na Facebook, milion na Twitter, milion na LinkedIn a milion na Google+.
Přišla mi hrozně zajímavá ta změna myšlení, kdy místo počítání hodinu jedním počítačem rozdám úlohu deseti tisícům počítačů a výsledek mám za 10 vteřin. Na rozdíl od reality, v AWS funguje myšlenka, že 9 žen odnosí dítě za měsíc. Když jsme se v průběhu realizace bavili s organizátory o naší aplikaci, zdvořile nám naznačovali, že nemáme sami spotřebovat veškerý připravený kredit. Asi nejsme chápaví 🙂
Pro větší škálování se nakonec ukázal omezující výkon SQL databáze, kterou jsme použili na ukládání výsledků. Každá úloha se totiž na ní obracela přímo a musela tak vyřídit obrovské množství dotazů najednou. O provoz databáze se staral pouze jeden server. Sice velmi výkonný, ale pro obsluhu provozu z tisíců serverů to prostě nemohlo stačit. Příště bychom nenechali koncové úlohy komunikovat přímo s databází, ale pouze vrátí načtená data rodiči, který data souhrně uloží. Po úpravě bychom dokázali zpracovat za stejnou dobu tisícinásobek úloh.
Jak jsme utráceli cizí peníze
Když naše aplikace konečně začala dělat to co má, tak začala provádět stovky tisíc operací. Představoval jsem si, jak přidělený kredit mizí jako pára nad hrncem a jak budou všichni ostatní namydlení, že jejich aplikace nebude mít na čem běžet. Už jsem náš tým viděl jako vítěze o největší útratu. Tak jsem to šel zkontrolovat. Seděl jsem a škodolibě jsem se z toho radoval. Pak mě ale napadla krutá myšlenka, zda vůbec naše služba je napojena na kredit organizátorů. Chvilka napětí. Nebyla! Jak to, vždyť tam je moje vlastní platební karta! Polil mně studený pot. Rychle jsem běžel za organizátory napojt naši aplikaci na jejich účet.
Šel jsem zkontrolovat, kolik mně ta legrace stála. V duchu jsem se připravoval na osobní bankrot. Naštěstí jsem téměř nepřekročil kredit, který nabízí AWS vývojářům zdarma a stálo mně to jen 6 $ 🙂
Prezentace
Na prezentace jsem byl už strašně unavený a nevyspalý. Když se mě organizátoři nečekaně zeptali, co jsme vlastně dělali, nedokázal jsem říct ani slovo. To se mi moc často nestává 😉
A jak jsme dopadli?
Byli jsme druzí první :-). Organizátoři dávali velký důraz na to, že nejsme druzí, ale že jsou dva první. Jedny označili za více první, protože měli pouze jednu hlavní výhru. My jsme dostali basu piv a tu si odnesl domů Marek. Psal, že většinu rozdal ještě v metru, protože byla moc těžká 🙂
Osobně považuji za vítěze celé akce Marka, protože dodal design oběma vítězným týmům a možná si tam rovnou domluvil i novou práci. Na jeho příběhu jsme postavili i obhajobu celé aplikace.
Chci poděkovat organizátorům za povedenou akci. A pokud vás akce zaujala, můžete se jí zúčastnit ještě i v Brně a Ostravě.
Zdrojáky jsou přístupné na GitHub. Kvůli nedostatku času jsou dost nahackované a nesmíte z nich nic usuzovat 🙂