Cloud - vyhazujeme peníze oknem?

Máma mi vždycky říkala, ať si vezmu hypotéku a koupím si byt, že v pronájmu platím cizím peníze a až pronájem skončí, nic mi nezbyde. Že je lepší splácet to samé bance a že jsem divnej když nemám stavební spoření...

Tehdá, před ~11 lety, jsem se po civilce začal starat v První multimediální o servery. Časem jsme měli 3 racky v GTS Nagano, pár serverů v Casablanca, pár serverů v TTC u SuperNetworks (Zdeněk mi opakovaně kradl křížový šroubováky!:), rack serverů v kanceláři, switche Cisco Catalyst, optický konvertory, diskové pole, 2 nezávislé konektivity do kanceláře, hromadu OpenVPN linek, spoustu interních subnetů routovaných přes OSPF, telefonní ústřednu Daktelu a dedikovanej Windows server s Synergy ERP (peklo na zemi!), který se kupovalo na leasing. Všechno jsme vlastnili a bylo to "super" (hlavně v účetnictví - myslím, že to mělo celej vlastní šanon :-). 

Aby tohle drželo pohromadě, bylo potřeba řešit věci jako arp-proxy, konfiguraci routovacího daemona, jak si povídat s SCSI řadičem když odešel disk v RAID poli, nastavit spínanou zásuvku od APC, LVM v Linuxu, správný snapshoty disků, VLANy, dohledovej system Nagios, nasmlouvat si kopu skladový pohotovosti u dodavatele HW a mraky dalších věcí. Myslím, že jsem První multimediální na vybudování takový infrastruktury utratil za pár let několik milionů a po čase to byla jen kopa starýho železa.

To ale bylo před 10 lety. Dneska si v Keboole všechno pronajímáme. Od systému na správu zdrojových kódů, centrální analýzy logů, služby na profilling aplikací, autentizaci uživatelů, dohledový systém až po službu na řízení projektů… 

Zkusmo jsem prošel přijaté faktury a sepsal podle nich za co všechno někomu platíme. Měsíčně to vyjde na cca 300.000,- Kč a stoupá to (jsme firma o 20 lidech). Když nic jiného, bude třeba tenhle soupis pro někoho inspirací.

UPDATE: doplnil jsem ceny, pokud není napsáno jiné, jsou to finální ceny za měsíc používání. U OVH, AWS a GoodData cenu neuvedu.

github ($50)- repository zdrojových kódů, dáváme sem hlavně věci, co jsou veřejné
bitbucket ($10) - repository zdrojových kódů privátních věcí
papertrail ($125) - služba, kam posíláme logy a můžeme je tady analyzovat, nad logama se mohou pouštět různé dotazy, které je možné podle výsledku někam notifikovat, zkoušel jsem ještě Splunk Storm a Loggly, ale Papertrail nám sedl nejvíc
sendgrid ($10) - tohle je náš centrální mail relay ze serverů, nikdo nás podle IP nepovažuje za spammery a email traffic se dobře monitoruje
newrelic ($300) - serverový profiling aplikací, naprosto super věc, díky tomu vidíme, kde nám co vázne :-)
okta ($125) - nám zajišťuje správu hesel a autentizaci do jiných služeb, přičemž pro vstup do našeho okta.com portálu potřebujeme HW autentizační zařízení (smartphone), dobře se tu sdílí hesla do věcí, jako je firemní twitter (=vysoká bezpečnost přístupů) UPDATE: odpískal jsem Oktu, důvody jsou složité a nebudu je sem dávat
OVH (-) - nám dodává servery pro některé datové transformace, máme to někde na východě Kanady
PagerDuty ($49) - používáme pro distribuci notifikací (zalogované problémy detekuje Papertrail, který založí v PagerDuty "problém" a postará se, že se o něm dozvíme)
Paymo ($110) - tady trackujeme práci na projektech
Pingdom ($10) - nám nezávisle hlídá dostupnost serverů, kterou veřejně publikujeme
Evernote ($60) - máme firemní sponzorovanou skupinu, já ho miluju a jsem Evernote propagátor :)
Foocall ($40) - používáme na volání do zahraničí. v telefonu si tím vygenerujeme lokální telefonní číslo (pevnou linku), na kterou pak zavoláme a foocall hovor přesměruje kam potřebujeme. skvěle použitelné i na EDGE internetu, cena za minutu téměř zanedbatelná 
Google Apps ($120) (by netmail.cz) - emaily, dokumenty, BigQuery, hangouty, atd..
Trello ($20) - skvělá věc na správu projektů (hodně orientovaná na konkrétní úkoly), nediktuje vám žádnou metodiku, taková cloudová tabule s kartičkama
Vimeo ($12)- videoserver pro Keboola Academy video tutoriály
LiquidPlanner ($125) - ganttovy diagramy - řízení složitějších projektů :-)
GoToMeeting ($49) - hodně jsme to používali před Google Hangoutem, postupně ustupuje, ale pořád imho mnohem lépe fungující věc na online schůzky (nahrávání, fullscreen mod, app v telefonu, i pro lidi co nemají Google účet, ovládání cizí klávesnice, atd...)
Zendesk ($1380) - supportní systém, tady řídíme věci na support@keboola.com. Zendesk je zároveň obrovský zákazník GoodData
AWS (-) - sem nám teče nejvíc $$, v AWS máme servery, databáze, fronty, Redshift, DNS, CloudSearch, atd...
GoodData (-) - srdce našeho podnikání :-)
Apiary ($500 jednorázově) - v něm máme dokumentaci všech API, jsme hrdý držitel faktury číslo 1 :-)  
OpenBrand ($0) - tady máme naše brand assety :)
Dropbox ($0), Mailchimp ($0) - všichni znáte
+ pár "devel" věcí, jako je Travis ($0), Packagist ($0), aj.

Jsem přesvědčený, že před 10 lety by nemohla Keboola fungovat. Nedostali bysme se k tak klíčovým technologiím, jako je GoodData, Redshift, Papertrail, apod. Díky cloudu mohou (nejenom) firmy z mého seznamu pronajímat svoje služby v modelu "pay-as-you-go" - což nám dává možnost růst, měnit technologii a škálovat tak, jak je potřeba. Malá firma, jako jsme my, může směle přijímat výzvy, které byly dřív vyhrazené svalnatějším společnostem. Dneska se nebojím, že něco technicky nezvládneme. Vše je jen o chytrém návrhu architektury.

K otázce v nadpisu: určitě jo, ale s každou lopatou prachů vyhozenou oknem, nám do baráku leze nová příležitost. 
Díky za takový svět!

P.S. Co s tou mámou? Přišlo už bydlení v pronájmu do módy nebo mám něco začít hledat? :-)
  

MySQL vs HP Vertica vs AWS Redshift vs Google BigQuery

Mám jednu transformaci, ktera v MySQL trvá strašně dlouho (klidně proto, že jsem lopata :). Velmi zjednodušený popis:

Tabulka (106489 řádek, <4MB):


Sloupec "id" určuje nějakou událost, "partner" je dodavatel události (třeba nájemce záboru chodníku) a "start" říká, kdy nastala daná událost. Do tabulky doplňuju sloupec, který říká, kdy měl daný partner předchozí událost (pak se ty 2 datumy od sebe odečtou a zjistím, kolik dní uplnyulo od minulé události - partneři se v datech vyskytují opakovaně). 

Tohle zpracování dělám v MySQL tímhle scriptem s "nested selectem":


Na AWS server cr1.8xlarge (88ECU, 244GB RAM, SSD) to trvá kolem 3000 vteřin (verze s JOINem (viz níže) přes 2 hodiny). Indexy mám správně :) 

Zkusil jsem to samé pustit na HP Vertica, Google BigQuery a AWS Redshift. Na ničem kromě MySQL jsem neladil žádné parametry. Verticu a Redshift jsem do dneška nikdy neviděl, Google BigQuery používám delší dobu.

Vertica:

Nejde mi tam provést nested SELECT, tak jsem to upravil na "verzi s joinem


Data jsem tam nahrál takhle:

COPY products FROM '/tmp/products.csv' DELIMITER ',' null AS 'null' EXCEPTIONS '/tmp/products.err';

Bez jakéhokoliv ladění to tam trvá 105 vteřin. To je 3.5% času na MySQL. Cool! Vertica (community edition) mi běží na m1.large serveru, což je největší popelnice, která v tomhle "testu" figuruje. Výsledek super!

Google BigQuery:

V BQ jsem vyrobil projekt R&D a nahrál do něj data přímo z CSV:

bq load --noallow_quoted_newlines --max_bad_records 500 --skip_leading_rows=1 rad.products /tmp/products.csv id,partner,start

Spuštění téhle query zabralo 1695 vteřin (!!) a zprocesovalo 2.63MB. Trochu zklamání, něco musím dělat blbě, nechce se mi tomu věřit. Verzi s nested selectem jsem nezkoušel.

AWS Redshift:

Nikdy jsem si s tím pořádně nehrál, četl jsem pár blogů (airbnb, hapyrus, botify) a dost jsem se na tuhle část těšil. Nahodit to je o stisknutí tlačítka, zvolil jsem režim "socky" a spustil single-node instanci dw.hs1.xlarge. 

Data se tam nahrávají nejlépe z S3...

COPY products (id, partner, start) FROM 's3://padak-share/products.csv' CREDENTIALS 'aws_access_key_id=xyz;aws_secret_access_key=abc' delimiter ',' REMOVEQUOTES DATEFORMAT AS 'YYYY-MM-DD';

Zkusil jsem query s joinem:

CREATE TABLE out AS SELECT p1.start, p1.partner, p1.id, MAX(p2.start) FROM products p1 LEFT JOIN products p2 ON p1.partner = p2.partner WHERE p1.start > p2.start GROUP BY p1.start, p1.partner, p1.id;

i nested selectem:

SELECT start, partner, id, (SELECT MAX(start) FROM products WHERE start < p1.start AND p1.partner = partner) AS prev FROM products p1;

Varianta přes JOIN trvá 167 vteřin a varianta s nested selectem trvá 17,4 vteřiny (!!).

Potřeboval bych to ještě stejně spustit ve Vertice, kde mi nested select vrací "ERROR 4160:  Non-equality correlated subquery expression is not supported", ale nevymyslel jsem kudy na to a víc času jsem tomu nechtěl věnovat. Dokud to nevymyslím, je Redshift největší powa, kterou jsem na tohle našel.


UPDATE 10.8.:

Dostal jsem tip od Kolese, že Vertica umí "INTERPOLATE JOIN". Podle semantiky popsané v dokumentaci to ale myslím nebude fungovat, protože to joinuje předchozí hodnoty pouze v situaci, kdy je z prava výsledek NULL. Já to potřebuju vždycky. Tuším ale, že to tam někde bude :-)