Snowflake v Keboola Connection

Tohle si sem odložím na památku - dneska ve ~2:00AM se v interní telemetrii Keboola Connection "oficiálně" objevily první 2 operace proti Snowflake.net backendu. 

V létě 2013 jsme podobné nadšení s Najlošem zažívali při hrátkách s AWS Redshiftem. Snowflake je ale koncepčně o řádný kus před čímkoliv na trhu. 

Jsem zvědavej, jak rychle to objeví místní tech scéna :)



12 témat za únor 2015

Moje únorové "top" highlighty v pracovním prostředí, bez zpráv o nových klientech.

Zahájili jsme kolonizaci velmi potenciálního regionu - od února funguje "Keboola Singapore Pte Ltd.”. Ještě tak 5~6 kanclů po světě a plány na globální gauč-surfing ve vlastních kancelářích je hotov! :) Náš "asijský startup" vede Jana Žižková, která má BI (a data obecně) v genech. Doteď nechápu, jak se nám povedlo ji zaujmout a nadchnout pro naše plány. Jsem pyšnej! V Singapuru stavíme plnohodnotnou údernou jednotku - kdyby měl někdo zájem dát si v Praze 3~4 měsíční trénink a v průběhu něj se kvalifikovat na přesun do Singapuru, hlašte se na petr@keboola.com. Zajímají nás jen chytrý lidi, co tam chtějí jít na delší dobu >18 měsíců (žádná letní dovolená).


Dali jsme se dohromady s excelentním Tableau partnerem, firmou Billigence. Jejich domovská krajina je Austrálie, kde sídlí na adrese "10 Help Street, Sydney" - což je nejvíc top ulice, když chcete dát najevo, že jsou vaši zákazníci to nejdůležitější, co máte :) Pro Billigence slouží Keboola Connection jako Data framework, DWH a staging layer pro cloudové zdroje dat určených k analýze. Pro nás je podobný vztah doslova požehnáním, protože není nikdo lepší, kdo by nám dal správný feedback na naše konektory pro Tableau. 


Spustili jsme další transformační backend v jazyce R. Bez nadsázky se dá říct, že každý zajímavý algoritmus má svojí reprezentaci v R. A jelikož je R jedním z nejrozšířenějších statistických nástrojů, nemohl dlouhodobě chybět. Možnosti, které to našim klientům dává, jsou téměř nekonečné. Rád teď leaknu, že připravujeme podporu Shiny frameworku, ve kterém běží hodně mocné aplikace pracující s daty. Samozřejmě máme před sebou ještě velké zlepšování okolní "R infrastruktury", ale věřím, že udržíme tempo! Tady proběhlo naše oficiální oznámení. UPDATE: Dal to dohromady Najloš, kterej se možná cejtí fakt uraženej, že jsem na něj jakoby zapoměl. Taky mu myslím s R pomáhal Odin, kterej se zatím uraženej asi necejtí, ale radši to sem napíšu. Teď jako čekám smršť potenciálně ukřivděnejch lidí, tak sem nalinkuju http://padak.keboola.com/dalsi-rok-za-mnou kde píšu že jsou všichni super. Snad to stačí :-)


3rd party app - náš transformační backend s R běží v Dockeru. Tady je náš Docker Hub a tady jsou zdrojáky našeho “demo dockeru” - a když už to takhle máme, je nasnadě, aby nám kdokoliv třetí dodal svojí “aplikaci / business nástroje” stejným způsobem. Mimochodem, Microsoft spustil Docker v Azure před pár dny do public beta a Amazon to rozjíždí v AWS jako Elastic Container Service, zatímco CoreOS řekl, že to je crap, a jede si svůj vlastní kontejner. No a u nás máme první dvě vlašťovky našich 3rd Docker aplikací: Yottly.com a Geneea.com. Yottly za náma poslal Vojta Roček - soustředí se na využití machine learning nástrojů v ecommerce. Geneea.com jsou zase experti na Natural language processing - tedy schopnost strojově popsat význam textu. Pro lepší představu co umí "stroje ovládající NLP" si pusťte AlchemyAPI demo - ve výsledcích si klikněte na “Relations” a pak na nějakou vybranou větu. Čeho všeho jde s pomocí NLP v našem prostředí docílit je totální úlet! Takové nejlépe dostupné API pro NLP jsou již zmíněné AlchemyAPI, Semantria a nebo IDOLonDemand (jádro HP Autonomy).


Erik zmigroval naší klíčovou komponentu (Orchestrátor) do kompletně asynchronního režimu. Trvalo nám to věčnost, ale proběhlo to téměř bez problémů a teď díky backendu v Elasticsearch můžeme začít dělat věci jako “notifikuj mě, pokud nějaký job běží o 20% déle, než je průměr za posledních 30 spuštění”. 

Když už o tom píšu - hodil by se nám na občasné konzultace někdo, kdo má zkušenosti s Elasticsearch - potřebujeme rady, abysme neimplementovali nějaké anti-patterny. Elasticsearch sám nabízí pouze support od 20kEUR na rok, což je pro nás lehce overkill...


Po skoro 3 měsíční pauze jsme obnovili testování Snowflake.net, který se chystáme zapojit jako další backend na uložení dat. Snowflake je naprostý úlet co se týče výkonu. Poslední, co nám zbývalo otestovat, jsou věci jako monitoring, provisioning, apod. 3 měsíce jsme čekali na nějaké dodělávky od Snowflake - teď je to hotové a já napjatě čekám, co z toho bude :)


Odin vykopnul K-Means segmentaci jako “Recept" běžící v Keboola Connection. Nejlepší popis K-Means, co jsem v poslední době našel, je tady. Pomocí K-Means můžete automaticky najít segmenty v datech, které od nás dostanete jako "další sloupeček", a k němu nákresy binárních stromů, abyste si mohli udělat představu, jak "stroj" k segmentu došel.


Marc udělal “Recept”, který dělá analýzu nákupního košíku. Řekne vám to, že když je v košíku tlačenka, bude tam z 73% i pivo a že se tahle kombinace vyskytuje v 64% všech objednávek, apod. Úplně se nabízí zkoumat profit těchle kombinací a případně je nabízet společně “v akci”. Případně řešit, jestli pochopíme návyky skupiny lidí, co si kupují tlačenku bez piva, apod. 


Milan domluvil se Zendeskem zapnutí Zendesk Insights (jo, jako správný socky si platíme nejlevnější tarif, ve kterém to normálně není :) - a tak jsem skočil do GoodData projektu se Zendesk datama a podíval se, jak na tom jsem. Od zavedení Zendesku jsem hlavní jouda L1 support týmu. Brutálně mě to 2. rokem otravuje, ale fakt, že každý ticket dostanu do mobilu a zároveň jich velkou část přímo odbavím, mě udržuje ve stavu, kdy mě nejde interně nabullshitovat, jak je něco super cool, zatímco nám zákazníci píšou, jaký s tím maj problémy. Je mi jasný, že to trvale nepůjde, ale doufám, že to vydržím dělat co nejdýl! Přísné tempo, kdy jsem prvních 6 měsíců zavíral skoro 60% všech ticketů, je dávno pryč, nicméně posledního 1/2 roku útočím na 40%, což je pořád dost a jsem na to pyšnej :)


Naše kanadská parta se hodně angažuje v ekosystému Zendesk.com. Velkou roli v tom hraje náš “školící" produkt Keboola Academy. Tady a tady Zendesk probírá, jak důležité je se daty kolem “customer care” zaobírat. 


Pavel Doležal je na tripu po US a mimo jiné zašel na Tableau Konferenci

Tableau 9 server je úplně jiný svět, má své specifické zákazníky, myslím že se to super doplňuje s GoodData. Oznámené novinky jsou nicméně hodně přísné - do detailů se nepustím a raději to nechám někomu fundovanějšímu :)


GoodData získala zlato za "best Customer Support Department of the Year" - je to určitě zasloužené. Jejich support je opravdu skvělý! Velké gratulace a respekt - určitě to nebylo zadarmo!

13 témat za leden 2015

Moje lednové "top" highlighty v pracovním prostředí (že Tereza řekla včera ráno smysluplnou větu sem asi dávat nebudu, co? :)

Briskat.com Hynek Vychodil a Vladimír Makovský spustili interaktivní analytickou databázi MIA DB, která vypadá hodně perspektivně. Tady je demo a tady blogují. Hynek a Vladimír mají solidní track record na poli DB backendů a práce s datama. Jsem na to moc zvědavej a mohutně držím palce! 

Vertica se konečně přesunula do cloudu jako "Vertica on demand". Od ledna je možné si pronajmout tuhle analytickou databázi přímo od HP. Vertica mi tu figuruje ve dvou postech (první, druhý) a speciálně komentáře pod tím prvním stojí za pozornost.

KBC stats - za leden 2015 k nám přiteklo v 1.19M requestech 3.94TB dat. 

Keboola London - v tichosti “otevíráme” UK trh a prostřednictvím Martina Lepky máme od února full-time prezenci v Londýně. 

GoodData “Insights as a Service” - masivně oznámená novinka, co mi zaplavila všechny kanály. Jsem zvědavej, jak to bude dál - od spousty super věcí časem ztratili záběr (JS API třeba). Pokud “analytický designer” budou držet na špici, vydají nějaký popis metadat, aby mohl kdokoliv definovat “co” se dá s daty dělat a propojí ho víc se zbytkem GoodData, bude to super. Vypadá to velmi slibně, byť mě “air wars marketing” trochu tahá za uši :) Zároveň se obávám jedný věci - že potenciální odklon od MAQL vezme GoodData to co je na nich dobrý - za okny totiž číhá svět plný těhle tahacích klikátek, kde právě absence "AQE" z nich dělá hračky pro šašky. Držím palce a těším se na to!

Medio Interactive naskočilo na naší 'juchůů' vlnu a pustilo se do pokročilých analýz. My jim po pečlivém zaučení dáváme statut “Keboola Certified Partner”. 

Tady je k vidění záznam z jejich prvního webináře, vedeného Honzou Tichým. Časem ho snad přemluvím k rozhovoru, celebritu jednu! :-) Medio je, mimochodem, jediná schůdná cesta jak se u nás dostat ke Google AdWords datům, pokud nemáte vlastní Google Developer Token!

Breezy začalo programovat komponenty do Keboola Connection! Seznámili jsme se s nima jako s partou co technicky stála za projektem Gorila Mobil. Dneska pro naši platformu dělají konvertor z Excelu do CSV, extraktor z iTunes a podle posledních informací je uhání Vojta Roček z Rockaway, aby pro ně udělali nástroj na zpracování mandatorních filtrů do GoodData. Breezy k nám dává svoje aplikace zapouzdřené v Docker.com a pokud to klapne jak má, budeme z nich mít prvního “Keboola Certified Developer”!

Microsoft Power BI (http://www.powerbi.com/) je od konce ledna k dispozici zadarmo. Co nám to na Enterprise Data Hackathonu ukazovali kluci z Bits2s Intelligent Technologies, vypadá to hodně dobře. Myslím že to má potenciál zahýbat s trhem, zvlášť při integraci s MS Azure, kde je dost pěkných nástrojů na zpracování dat (Azure Machine Learning, např.).

UPDATE: Tak PowerBI ještě chvilku kartama míchat asi nebude :-)

Keboola Meetup - proběhl náš první MeetUp pro zákazníky. Brzo budou fotky a videa! Klobouk dolů před lidma co tam vystoupili a pustili nás všechny do svých obyváků. Například papírnictví McPen, projekt našeho partnera Ascoria.cz, tam naživo ukázal svoje dashboardy, všechny čísla, apod. Respekt!

Na wiki.keboola.com od začátku roku veřejně dumpujeme poznámky, návody, postřehy a dokumentaci. Teším se až tam začnou sypat non-Keboola lidi svoje znalosti!

Wishlist zapli jsme veřejný Trello board, ve kterém může kdokoliv hlasovat pro návrhy, co máme dodělat. Je to ideální studnice inspirace pro naší konkurenci :) a cesta jak naši zákazníci natlačí vývojářům vlastní potřeby/představ. Popsané je to na našem "Statusu".

Partneři nám přebírají klienty - na tohle jsem čekal 2 roky! Je to signál živého a fungujícího ekosystému. Doufám ve víc podobných situací - je jasné že my sami budeme nejlepší primárně v podpoře našeho "data frameworku” Keboola Connection a koncovou péči o zákazníka, včetně vysoké vertikální znalosti, musí převzít někdo lepší než jsme my.

Docker se zabydluje v Keboole - což znamená že kdokoliv může svojí business logiku (machine learning algoritmy, R aplikace, apod.) zabalit a nechat nad datama našich klientů monetizovat. Do budoucna budeme nejlepší místo na vydělávání peněz pomocí chytrých aplikací. Něco jako podtitulek Enterprise Data Hackathonu "Real data, from real enterprises, great tools, lots of fun!”. Zbývá dotáhnout jak propojit našeho klienta a 3rd aplikaci a značně vylepšit naší schopnost datům automaticky porozumět (<<HR okénko!). #realData #realMoney

JSON parser do CSV

Spustili jsme do takového semi-experimentálního provozu službu na parsování JSONů. 

Běží na json-parser.keboola.com:

Jde do ní nahrát JSON(y) a aniž znáte jejich strukturu - server vrátí ZIP ve kterém jsou CSVčka, vždy podle toho, jak rozprsklé to musí být.

Tady je 1000 JSONů (1.1MB), vždy jeden JSON na řádek. Můžete si zkusit to zkonvertovat - nechte to načíst přímo z URL (http://enterprise.hackathon.bi/sample_1000_obj.json) a zaškrtněte "Line delimited" - za pár vteřin se vám vrátí ZIP.

Jeden řádek v sample souboru obsahuje strukturované informace o tom, jaký dotaz někdo zadal na seznam.cz a co bylo odpovědí. Takhle to vypadá naformátované.

Služba je zadarmo a bez záruky. Má to API (nemusíte nic vyplňovat ručně), jakmile to Kachna popíše, dám sem odkaz do dokumentace. Technicky vzato by to mělo zkonvertovat třeba bambilión jsonů najednou, ale nijak to netestujeme a pokud tam pošlete 1GB zip, asi crashne spojení browseru a CSVčka zůstanou na serveru a nikdy se k nim nedostanete - to časem vylepšíme!






Informace na dosah ruky - Pebble Watch

Komplikované dashboardy za dvojitým přihlášením a trojitým firewallem přestávají být cool. Naši zákazníci potřebují podstatné informace doslova na dosah ruky - a to nesplňuje ani report v iPadu. 

Na startu naší vlastní "wearables" mánie jsme zvolili hodinky Pebble.

Proč?

Každý má svoje "jedno číslo", které mu napovídá, jak se mu daří. Obchodníka může motivovat, kolik si vydělal na provizích a jak si stojí oproti svému týmu, CEO bude chtít znát ukazatele od CFO, apod. Nemusí nic dělat, jen se podívá na hodinky...

Jak to funguje?

Do mobilu si nainstalujete Pebble aplikaci (Android, iOS) a v ní si nainstalujete "Keboola Stats" do které zadáte token, který vám vygeneruje náš "Pebble Writer" - ten bude v UI za chvilku.

Co to umí?

Aktuálně to umí každých pár vteřin v hodinkách aktualizovat libovolné číslo, které je dneska zanesené na dashboardu, který může ukazovat 2 čísla a jejich změnu v %. Například: kolik mám obrat od dnešní půlnoci do teď (aktuální přesné číslo) a o kolik % je to jiné oproti obratu včera za stejné období + kolik mám objednávek za dnešek a změna vůči včerejšku:

Obrat 123.000,- Kč (+7%)
Objednávky 600 ks (-12%)

Spočítat takhle umíme téměř cokoliv na co máme data (v tuhle chvíli se umíme napojit na 33 datových zdrojů + máme API pro příjem dat, která k nám posílá zákazník). Rychlost aktualizace čísel v hodinkách je nastavená na 1x/30 vteřin. Spolehlivě můžeme jít tak na 1x/10 sec, pak už to přestává dávat smysl - zpoždění v mobilní síti a čas potřebný pro načtení nových dat a spočítání metrik pro dashboard v hodinkách.

Teď ještě dostat to samé na hodinky od LG, Samsungu a Motoroly. Celý stack, od sběru, analýzy dat a API už máme, zbejvá frontend :-)

Kdo by si to chtěl vyzkoušet, máme jedny červený Pebble hodinky na půjčení - kdo má vlastní, může do toho naskočit hned. Samozřejmě musí mít data v Keboola Connection (data umíme vytahat i z existujících GoodData projektů!).

Credits: Tomáš Kačur za to že to celé postavil, Martin Karásek že během asi 45 sec vyšvihl ikonky do Pebble Store.

P.S. Pebble aplikace v telefonu (napsaná v JS) a aplikace v hodinkách (napsaná v Vanilla C) je jako OpenSource k dispozici v našem GitHubu. Backend vrací na metodu stats tohle (dokumentace API bude asap v Apiary.io):

{
    "heading": "Revenue",
    "title1": "Today",
    "percent1": "10",
    "number1": "123.4",
    "title2": "Week",
    "percent2": "20",
    "number2": "245",
    "changed": "2014-07-08T13:44:22+0200"
}

Agregace v MongoDB, Oracle, Redshift, BigQuery, VoltDB, Vertica, Elasticsearch, GoodData, Postgres a MySQL

"Manažerský shrnutí"

Celý se mi to nakonec asi vymklo z rukou. Snažím se tu dát dohromady popis toho, jak jednu a tu samou úlohu udělat na různých systémech. Na konci jsem to samé udělal s GoodData (linkuju sem z toho 2 screencasty), což je víc high-level nástroj než databáze - přesto je na tom skvěle vidět, jak se s ní dobře pracuje a jak je rychlá. 

Tady je souhrnná tabulka:

Intro

Koncem loňského roku jsem našel blogpost "MongoDB 'Lightning Fast Aggregation' Challenged with Oracle”, kde Lukas Eder provádí na Oracle stejné agregace, jako o týden před ním Vlad Mihalcea dělal s MongoDB.

Lukas Edler mi dal zdrojová data, která mají 50.000.000 řádků eventů s časem a hodnotou

created_on,value
2012-05-02T06:08:47Z,0.9270193106494844
2012-09-06T22:40:25Z,0.005334891844540834
2012-06-15T05:58:22Z,0.05611344985663891
2012-01-05T20:47:19Z,0.2171613881364465
2012-02-10T00:35:17Z,0.4581454689614475
2012-06-19T17:46:41Z,0.9841521594207734
2012-08-20T21:42:19Z,0.3296361684333533
2012-02-24T20:29:17Z,0.9760254160501063

Tady je 10.000 řádků na “nažhavení” a celý dataset - obojí s hlavičkou, bez enclosures, delimiter je čárka (ke stažení z mé S3 to bude do půlky září, pak to spadne do Glacieru):

Nad daty se provádí 2 testy:

  • Test A - dělá agregaci po letech a dnech v roce, přičemž počítá počet záznamů každý den a jejich průměrnou, minimální a maximální hodnotu
  • Test B - dělá to samé, ale filtrované na konkrétní hodinu

Zkusil jsem to samé (nebo co nejvíc podobné) provést na dalších databázích - Amazon Redshiftu, Google BigQuery, Volt DB, HP Vertica, Elasticsearch, GoodData, Postgres, MySQL. Nejde mi o to mlátit se po hlavě, kdo je rychlejší, proto moc neřeším, jaké byly HW konfigurace; navíc Google BigQuery je “unknown hw”. Dívám se víc po složitosti, s jakou toho dosáhnout. Na Redshiftu jsem ještě zkoušel 10x to samé - tedy 500.000.000 řádků, které jsou ale 10x opakování zdrojového datasetu. V případě GoodData (na konci) jsem to ještě na závěr zkomplikoval, aby bylo vidět, jak snadné je tam věci řešit.

Tady jsou výsledky: 

MongoDB

(detaily přípravy viz Vladův blogpost)

Test A: 129s
Test B: 0.2s

Oracle

(detaily přípravy viz Lukasuv blogpost)

Test A: 32s
Test B: 20s první spuštění, 0.5s druhé spuštění

Redshift

Data jsem do Redshiftu nahrával z S3. Celé to obnášelo udělat před samotným testem tyhle kroky:
  1. vyrobit tabulku
  2. naimportovat do ní data
  3. nešlo mi tehdá při importu rozpoznat formát času ISO8601, tak jsem tabulku musel alterovat
    1. přidat sloupec pro timestamp
    2. nastavit jej podle timestampu v zdrojových datech
    3. smazat původní sloupc s datumy
  4. přidal jsem si tam SortKey, udělal analyze a vacuum

(tady je soupis přesných SQL příkazů a časů: https://s3.amazonaws.com/padak-share/blog/redshift.sql)

Test A 

Použitý dotaz:
SELECT
     EXTRACT(YEAR FROM created_at),
     EXTRACT(dayofyear FROM created_at),
     COUNT(*),
     AVG(value),
     MIN(value),
     MAX(value)
FROM RandomData
GROUP BY
     EXTRACT(YEAR FROM created_at),
     EXTRACT(dayofyear FROM created_at)
ORDER BY
     EXTRACT(YEAR FROM created_at),
     EXTRACT(dayofyear FROM created_at);

Redshift dw1.xlarge (15s)
Redshift dw2.large (7s)

Verze s 500.000.000 řádků:

Redshift dw1.xlarge (182s)
Redshift dw2.large (53s)

Output


Test B

Použitý dotaz:

SELECT
     EXTRACT(YEAR FROM created_at),
     EXTRACT(DAYOFYEAR FROM created_at),
     EXTRACT(HOUR FROM created_at),
     COUNT(*),
     AVG(value),
     MIN(value),
     MAX(value)
FROM RandomData
WHERE
     created_at BETWEEN
     TIMESTAMP '2012-07-16 00:00:00'
     AND
     TIMESTAMP '2012-07-16 01:00:00'
GROUP BY
     EXTRACT(YEAR FROM created_at),
     EXTRACT(dayofyear FROM created_at),
     EXTRACT(HOUR FROM created_at)
ORDER BY
     EXTRACT(YEAR FROM created_at),
     EXTRACT(dayofyear FROM created_at),
     EXTRACT(HOUR FROM created_at);

Redshift dw1.xlarge (1.3s)(first run)
Redshift dw1.xlarge (0.27s)(second run)

Verze s 500.000.000 řádků:

Redshift dw1.xlarge (46s)(first run)
Redshift dw1.xlarge (0.61s)(second run)

Output:


Pro fajnšmekry ještě query plán:

Google BigQuery:


Je služba od Google, kterou trochu popisuju tady: http://padak.keboola.com/google-bigquery-workshop-s-felipe-hoffa

Komunikuje se s ní pouze přes REST API nebo webový interface. Já jsem použil klienta v konzoli na serveru. Sample data jsem musel stáhnout na disk.

Celé to obnášelo udělat před samotným testem tyhle kroky:
  1. Založit projekt v https://console.developers.google.com/ a pod API&auth povolit BigQuery (a mít tam platební kartu)
  2. založit “projekt” v BigQuery
  3. naimportovat do něj data (samotné nahrání dat trvalo docela dlouho, přesný čas jsem si omylem nezaznamenal)
U BigQuery se nedá nic moc “ladit”. Nejsou tam žádné indexy, klíče, apod.

Založení projektu z konzole:
./bq mk rad.randomData
--0s

Import dat:
./bq load --noallow_quoted_newlines --max_bad_records 500 --skip_leading_rows=1 rad.randomData ./randomData.csv created_on:timestamp,value
-- ~1500s (čas jsem bohužel přesně nezaznamenal)

Test A


Použitý dotaz:
SELECT
  YEAR(created_on) AS Year,
  DAYOFYEAR(created_on) AS DayOfYear,
  COUNT(*) AS Count,
  AVG(value) AS Avg,
  MIN(value) AS Min,
  MAX(value) AS Max
FROM [rad.randomData]
GROUP BY
  Year, DayOfYear
ORDER BY
  Year, DayOfYear;

-- 7s (1.3GB)

Test B


Použitý dotaz:

SELECT
  YEAR(created_on) AS Year,
  DAYOFYEAR(created_on) AS DayOfYear,
  HOUR(created_on) AS Hour,
  COUNT(*) AS Count,
  AVG(value) AS Avg,
  MIN(value) AS Min,
  MAX(value) AS Max
FROM [rad.randomData]
WHERE created_on >= '2012-07-16 00:00:00' AND created_on <= '2012-07-16 01:00:00'
GROUP BY
  Year, DayOfYear, Hour
ORDER BY
  Year, DayOfYear, Hour;

-- 2.9s / 1.6s (cached)

VoltDB


Tuhle databázi jsem našel nějak náhodou. Pyšní se spoustou věcí, ale nakonec jsem narazil na to, že tam vůbec nejde z timestampu extrahovat třeba den v roce a je potřeba tam udělat pre-precessing a data upravit. Celá moje anabáze skočila na supportu, kde mi začal pomáhat VoltDB Solution Engineer jménem Dheeraj Remella, který tvrdil, že ten test provede. Emailování se nám trochu táhlo, takže mezitím stihli vydat verzi 4.0, kde už EXTRACT() funkci měli. Jeho výsledky jsou následující:

Import dat:

Read 50000001 rows from file and successfully inserted 50.000.000 rows (final)
Elapsed time: 1735.586 seconds

Test A:

SELECT
     EXTRACT(YEAR FROM create_on_ts) AS Year,
     EXTRACT(DAY_OF_YEAR FROM create_on_ts) AS DayOfYear,
     COUNT(*) as groupCount,
     SUM(value) as totalValue,
     MIN(value) as minimumValue,
     MAX(value) as maximumValue
FROM RandomData
GROUP BY
     EXTRACT(YEAR FROM create_on_ts),
     EXTRACT(DAY_OF_YEAR FROM create_on_ts);

-- 70ms

Test B:

-- 330 ms

Časy jsou to super! Zjišťuju, jestli si předpočítal Rok, Den, Hodinu...

UPDATE: Tak ano, ve testovací DB měl pro daný dotaz předem dopočítané odvozené hodnoty roků, dnů, apod. Tady je jeho DDL: https://s3.amazonaws.com/padak-share/blog/voltdb-ddl.sql

Použitý HW byl MacBook Pro (Intel i5 2.5 GHz processor - 2 cores, Memory 16 GB).

VoltDB vypadá zajímavě a podezřele zároveň. Databáze se tam zakládají voláním klienta v konzoli, který spouští nějaké věci v javě a nasává SQL:
voltdb compile -o random.jar random.sql
voltdb create catalog random.jar
csvloader randomdata -f randomData10.csv --skip 1
... řekl bych, že mi to moc nesedlo, nicméně to budu dál sledovat. Mohla by se z toho vyklubat docela super věc!

HP Vertica 


Tenhle test pro mě udělal Honza Císař, protože to bylo v době, kdy instalátor neuměl ani zalogovat vystřílený file descriptory a nainstalovat ji bylo dost peklo (dneska už to neplatí a instalátor je celkem fajn)

Příprava:

SET TIMEZONE 'UTC';
CREATE TABLE RandomData_T (
     created_on TIMESTAMP,
     value DECIMAL(22,20)
);

COPY RandomData_T from '/tmp/randomData.csv' delimiter ',' null as '' enclosed by '"' exceptions '/tmp/load.err';
Time: First fetch (1 row): 121.609s. All rows formatted: 121.609s

#předžhavuje :)
SELECT * FROM RandomData_T LIMIT 10;

Test A


SELECT
     EXTRACT(YEAR FROM created_on),
     EXTRACT(doy FROM created_on),
     COUNT(*),
     AVG(value),
     MIN(value),
     MAX(value)
FROM RandomData_T
GROUP BY
     EXTRACT(YEAR FROM created_on),
     EXTRACT(doy FROM created_on)
ORDER BY
     EXTRACT(YEAR FROM created_on),
     EXTRACT(doy FROM created_on);

--  Time: First fetch (366 rows): 2,068s

Test B


SELECT
     EXTRACT(YEAR FROM created_on),
     EXTRACT(doy FROM created_on),
     EXTRACT(HOUR FROM created_on),
     COUNT(*),
     AVG(value),
     MIN(value),
     MAX(value)
FROM RandomData_T
WHERE
     created_on BETWEEN
     TIMESTAMP '2012-07-16 00:00:00'
     AND
     TIMESTAMP '2012-07-16 01:00:00'
GROUP BY
     EXTRACT(YEAR FROM created_on),
     EXTRACT(doy FROM created_on),
     EXTRACT(HOUR FROM created_on)
ORDER BY
     EXTRACT(YEAR FROM created_on),
     EXTRACT(doy FROM created_on),
     EXTRACT(HOUR FROM created_on);

--   Time: First fetch (2 rows): 0,026s

Honza na to použil AWS instanci typ 4xlarge, takže asi 30GB ram, SSD disky a 4x Intel Xeon E5-2680

Elasticsearch


Dal jsem na Nový rok na tyhle testy teaser na facebook a ozval se mi Karel Minařík, že by to vyšvihl v Elasticsearchi. Nadšeně jsem souhlasil a tady je výsledek. Managerské summary je, že je to pekelně rychlé, ale poměrně složitě a dlouho to data importuje. Pro mě osobně ovšem nedosažitelné díky množství kódu v Ruby. Tady je jak to Karmi popsal:

Čau,
tak jsem se na to mrknul (http://goo.gl/A3j1Up): 
Je tam hezký detail, že se nedají použít klasické "date" agregace, protože jestli jsem to dobře pochopil tak v tom SQL seskupuješ podle dne v roce *bez ohledu na rok*, a to samé pro hodiny atd. Nejprve jsem to udělal zkusmo přes `script` ve facetu, ale to bylo dooooost pomalé -- nepřekvapivě, musí evaluovat script pro každý dokument z těch 50M. S filtrem to bylo i tak pod sekundu. Takže jsem tu manipulaci udělal při indexaci, tzn. v Ruby rovnou parsovat datum a ukládat `day_of_year` atd, což logicky zpomalilo indexaci, ale rychlost je teď po zahřátí:
  • Agregace: 16398ms
  • Agregace + filtr: 10ms

Tím se mi potvrdilo že ES je na tyhle věci pekelně, pekelně rychlý.

Nějak extra jsem to netunil -- je to EC2 xlarge stroj, ES má 7GB paměti, index má 1 shard, disk to používá ephemeral, tzn. relativně rychlý, ale spinning crap, ES je kromě paměti v továrním nastavení.

Celkové výstupy v příloze, nevím jestli jsem ty query převedl správně, neměl jsem na to moc klidu.

Vcelku zajímavé a hezké cvičení :) 

Měj se!,

Karel 


GoodData


Na závěr jsem si nechal test GoodData. Určitě nebude útočit na milisekundové mety, ale suveréně zničí všechno ostatní v jednoduchosti jakou toho dosáhnete.  

Data z S3 jsem nahrál do Keboola Connection (což je složitost asi jako připojit přílohu do emailu). V Keboola Connection jsem řekl, jak se to má do GoodData nahrát. Samotná příprava GoodData projektu je jednoduchá - označím první sloupec jako datum (s časem) a druhý že je číslo.


Po zmáčknutí tlačítka “Upload Table” Keboola Connection připraví vše ostatní sama: na straně GoodData vyrobí fyzický i logický datový model, zparsuje a exportuje data do formátu který GoodData spolehlivě načte. Pro fajnšmekry přidávám odkaz na log komunikace s jejich API. Klient má tohle schované za jedno tlačítko, případně za jeden API call a nemusí se tím vůbec zabývat.

GoodData si pak data přebere, různě je dál podle náma dodaného manifestu překroutí a naimportuje do BI projektu. Lidem říkám, ať nad tím dál přemýšlí jako nad kompaktní tabulkou, kterou vidí u sebe na vstupu, přestože je to vlastně celé roztrhané po sloupečcích, které na sebe různě odkazují a vytváří vztahy, které se zakreslují jako “sněhová vločka”. Víc o tom, co se v GoodData vevnitř děje, jsem popsal v listopadu 2013 tady (GoodData XAE):  Load dat (po zparsování v Keboola Connection má tabulka asi 4GB) trvá asi 60 minut. 

Testy:


Pro první test - agregaci přes celých 50 milionů řádků - je potřeba vyrobit tři metriky:
  • Metrika 1 - počítá počet záznamů [ COUNT(Records of randomData) ]
  • Metrika 2 - počítá průměrnou hodnotu [ AVG(value) ]
  • Metrika 3 - počítá minimální hodnotu [ MIN(value) ]
  • Metrika 4 - počítá maximální hodnotu [ MAX(value) ]
a "podívat se na ně” přes Rok a Den v roce.

Pro druhý test se pouze přidá filter na konkrétní datum a hodinu.

Obojí jsem natočil a dal nesestříhané na youtube - můžete tak vidět, jak je to svižné. Změřit přesně dobu spočítání reportu je možné, ale není to úplně snadně dostupné - v tuhle chvíli to neřeším. Jde mi hlavně ukázat, že je to ve srovnání s jiným přístupem dost snadné.



Ještě mě napadlo to trochu zkomplikovat a ukázat v reportu jak udělat "O kolik % se změnil počet agregovaných záznamů oproti předchozímu dni". Opět nesestříhané video zde: 


GoodData nabízí ke každému reportu něco jako “explain” v DB - tedy "co je pro získání dat potřeba udělat". Nakreslené to vypadá takhle:

Postgres

Honza Winkler udělal Test A a B na Postresu (9.3.4). Detaily jsou tady: http://goo.gl/xt3qZM

  • Import trval: 2 minuty (od oka, neměřeno)
  • Test A (bez indexu, vacuum, ničeho): 33.55 s
  • Test B (bez indexu): 4.5 s
  • Test B (s indexem na created_on, první spuštění): 0.06 s
  • Test B (s indexem na created_on, další spuštění): 0.015 s

MySQL

Dodatečně jsem udělal ještě test v MySQL. Server má 64GB RAM, SSD disky...

Test A

SELECT
     YEAR(`created_on`),
     DAYOFYEAR(`created_on`),
     COUNT(*),
     AVG(value),
     MIN(value),
     MAX(value)
FROM `randomData`
GROUP BY 1,2
ORDER BY 1,2;

-- 46sec

Většina času je na tmp tabulku:

Test B

SELECT
     YEAR(`created_on`),
     DAYOFYEAR(`created_on`),
     HOUR(`created_on`),
     COUNT(*),
     AVG(value),
     MIN(value),
     MAX(value)
FROM `randomData`
WHERE
     `created_on` BETWEEN '2012-07-16 00:00:00' AND '2012-07-16 01:00:00'
GROUP BY 1,2,3
ORDER BY 1,2,3;

-- 0.022sec

Resume k MySQL: je to děs :) Hynek Vychodil to vydřenil na 33sec (http://goo.gl/7qKsP4).

Závěr


Pokud nepočítáme loady dat do databází (které jsou pokaždé o rozličné složitosti), lze říct, že na testovaném objemu dat je agregace pro koncového uživatele vždycky celkem svižná. Pokud umíte SQL a potřebujete pár dotazů, hodí se BigQuery, pokud chcete dělat kvantum dotazů a nechcete si spravovat vlastní DB cluster, hodí se Redshift. Pokud nemají data úplně perfektní strukturu, oceníte Elasticsearch (Karmi mi například říkal, že nějaký němec sype do ES clusteru 1TB dat denně a sviští mu to o 106). Pokud budete chtít dál data zpracovávat a/nebo budou vaše dotazy o fous komplikovanější a bude vhodné, aby je někdo kladl interaktivně, užijete Keboola Connection + GoodData. 

<Ad> 
Klientům přibalujeme kurzy z Keboola Academy, aby uměli psát svoje vlastní jednoduché i složitější metriky, tak jak je vidět třeba tady na videu + jim se vším ochotně pomáháme. Chcete-li si to zkusit, napište mi! 
</Ad>

UPDATE 2014-08-05:

Našel jsem Orzo.js od Tomáše Machálka. Jeho vlastní test je tady.

SQLdep

Máme tu v Praze jednu hodně perspektivní partu, která zatím uniká pozornosti médií. Loni v prosinci mě s nima na “šunkovým” mejdanu seznámil Eda z Avastu. Říkal, že mu je někdo z Wayra dost chaoticky pitchnul jako partu, co optimalizuje SQL dotazy (což není pravda).


Martin Masařík (vpravo) mi v těžké opilosti popsal co dělá a na první dobrou se trefil do problému, který hrozí v každém našem analytickém projektu. Martin stojí za službou sqldep.com, do které se pošle SQL kód a ona ho celý rozebere, zanalyzuje a vizualizuje. K analytikovi se vrátí vizuální vztahy všech operací v databázi. Zní to trochu jako #firstworldproblem, ale pravda je taková, že podobný nástroj potřebuje každý rozjetější 'data tým'.

Dneska jsou firmy plné různých SQL dotazů, pomocí kterých se analytici dotazují interních databází a vytahují data pro různé reporty. SQL, které vrátí počet zákazníků s produktem “abc” vypadá jednoduše:

SELECT Count(client_id)
FROM   clients
WHERE  product = 'abc';

Problém je v situaci, kdy je SQL dotaz veliký a jeho autor navíc opustil firmu před 4 lety a úpravy v něm máte dělat zrovna vy! Chce-li po vás někdo udělat v podobném dotazu změnu, máte na výběr - buď to budete 2 dny zkoumat nebo použijete SQLdep a změnu uděláte přesně a neomylně tam, kde má být. Je rozdíl, jestli máte k dispozici pouze SQL dotazy nebo interaktivní vizualizaci, ve které vidíte souvislosti a dopady:

Kluci ze SQLdepu mají za sebou implementaci svého nástroje v GE bance a co vím, tak se perspektivně chytají v České spořitelně.

Představím-li si situaci, kdy mi někdo řekne, že se od příštího měsíce změní v datech nějaký sloupec a já mám SQL scripty, které mají tisíce řádků, jdu si to bez SQLdepu asi hodit. S ním je to easy úloha - kliknu na vstupní sloupce a vidím všechny souvislosti a na druhý klik i konkrétní řádky SQL příkazů. Vyjádřeno v ušetřeném čase bankovních data-mining expertů a ve větší bezpečnosti prováděných změn, tečou klukům peníze proudem. Podobné nástroje existují jako přidružené tooly kolem databází samotných, ale často jsou drahé (nekoupíte to každému kdo by to potřeboval), neohrabané nebo třeba něco klíčového nezvládají (pl/sql). Dělat podobnou věc jako online nástroj s API je super. 

P.S. Akorát finišujeme implementaci jejich API do Keboola Connection. Všichni naši zákazníci budou mít SQLdep k dispozici nejpozději od konce června. Rozšíří se tím naše existující vizualizace ETL procesů, takže zjistit kde je potřeba upravit transformace odvozených attributů v GoodData projektu bude úkol z kategorie “trapárna” :-)

Google BigQuery workshop s Felipe Hoffa

Včera odpoledne pod taktovkou Felipe Hoffa proběhl workshop na téma “Google BigQuery”. Sešlo se tam asi 15 lidí, které na CZ trhu BigQuery láká. Felipe, jako Google Developer Advocate stručně proskákal historii zpracování velkých dat v Google - počínaje MapReduce v roce 2004, přes white paper Dremelu, konče dnešním BigQuery.

Je evidentní, že do toho Google masivně šlape a nechává konkurenci pěkných pár let za sebou. Pro běžného smrtelníka je BigQuery nejdostupnějším nástrojem na zpracování velkých dat na trhu, přičemž Felipe zmínil usecase australského telco operátora Telstra, který v BigQuery zpracovává logy, ze kterých extrahuje eventy - což do té byl schopen dělat pouze nad 1% svých dat.


Jedenáct věcí, co stojí za vypíchnutí:
  • Nová cenová politka - jak objem zpracovaných dat, tak samotné úložiště masivně zlevnilo 

  • Vysvětlení, jak fungují JOIN EACH a GROUP EACH BY (Shuffler nody zpětnovazebně zapojují zpracovaná data zpět na Leaf nody) 

  • Možnost v reálném čase dělat dotazy na data, která se do BigQuery streamují. Limit na stream je 100.000 řádků / sec proti jedné tabulce. Google to řeší oddělením streamovaných dat od standardně naloadovaných CSV/JSON (které se musejí přeparsovat pro sloupcové uložení) 
  • Překvapila me nativní podpora pro dělání kartézských součinů. Nevím proč, ale jsem zvyklý, že se jim chce člověk vyhnout. BigQuery má na to nově CROSS JOIN. 
  • Konektory k BigQuery. Co si nejsem jistý, jestli spojení BigQuery a Hadoopu implikuje kopírování dat “pryč” nebo se MapReduce joby spouští přímo v BQ. Super mi přijde, že v případě že si platíte Google Analytics Premium, můžete traffic data exportovat v jejich nejnižší granularitě do BigQuery a dotazovat se jich jako SQL databáze. 

  • BigQuery bude brzo podporovat uživatelské funkce, napsané v Javascriptu!
  • Felipe aktivně skáče kolem Reddit skupiny, kam dává cokoliv zajímavého kolem něj projde. Jiný jeho kámoš provozuje http://bigqueri.es/, kde jsou příklady dotazů a sample data. 
  • Pěkný příklad korelace: Které letiště umí lépe předpovědět lety z NY 

SELECT a.departure_state, b.departure_state, corr(a.avg, b.avg) corr, COUNT(*) c FROM (SELECT date, departure_state, AVG(departure_delay) avg , COUNT(*) c FROM [bigquery-samples:airline_ontime_data.flights] WHERE departure_state = 'NY' GROUP BY 1,2 HAVING c > 5 ) a JOIN (SELECT DATE(DATE_ADD(timestamp(date), 1, 'DAY')) date, departure_state , AVG(departure_delay) avg, COUNT(*) c FROM [bigquery-samples:airline_ontime_data.flights] GROUP BY 1,2 HAVING c > 5  ) b ON a.date=b.date GROUP EACH BY 1, 2 HAVING c > 5 ORDER BY corr DESC; 

  • Existuje projekt http://gdeltproject.org/, který od roku 1979 denně mapuje všechny země na světě (broadcastované zprávy, tištěné média, online deníky,…). Sleduje tak vztahy ve společnosti (s podporou 100 jazyků). V BigQuery je jako public dataset o objemu 90GB. Dataset najdete tady: https://bigquery.cloud.google.com/table/gdelt-bq:full.events. Je skvěle anotovaný a výborně se hodí na hraní. Tady je příklad, který ukazuje rok za rokem vztahy čechů a okolních států, podle zaznamenaných událostí: 

SELECT Year, Actor1Name, Actor2Name, c FROM  (SELECT Actor1Name, Actor2Name, Year, COUNT(*) c, RANK() OVER(PARTITION BY YEAR ORDER BY c DESC) rank FROM (SELECT REGEXP_REPLACE(Actor1Name, "CZECH REPUBLIC", "CZECH") Actor1Name, REGEXP_REPLACE(Actor2Name, "CZECH REPUBLIC", "CZECH") Actor2Name,  Year FROM [gdelt-bq:full.events] WHERE Actor1Name < Actor2Name), (SELECT REGEXP_REPLACE(Actor2Name, "CZECH REPUBLIC", "CZECH") Actor1Name, REGEXP_REPLACE(Actor1Name, "CZECH REPUBLIC", "CZECH") Actor2Name, Year FROM [gdelt-bq:full.events] WHERE Actor1Name > Actor2Name), WHERE Actor1Name IS NOT null AND Actor2Name IS NOT null AND (REGEXP_MATCH(Actor1Name+Actor2Name, 'CZECH')) AND Actor1Name != Actor2Name GROUP EACH BY 1, 2, 3 HAVING c > 100) WHERE rank=1 ORDER BY Year;

  • Existuje rozšíření do Chrome, které umožnuje výsledky rychle vykreslit do grafů, počítá cenu dotazu, konvertuje timestampy, apod. 
  • V kanclu Google jsou na záchodě kartáčky na zuby 

Na závěr se nejaktivnější účastníci z Netmailu vyfotili 

a rozproudila se diskuse. V podvečer měl pak Felipe přednášku na FELu. Na to, že akorát přiletěl a měl jetlag, je dost hustej! :-)

Amazon Kinesis - jak nám cloud opět rozšířil možnosti

Amazon Kinesis je služba v rámci Amazon Web Services (AWS), která umožňuje zpracování jakýchkoliv dat v reálném čase. Aktuálně běží v neveřejném režimu a přístup k ní se schvaluje žádost po žádosti (moje žádost trvala asi 2 dny).


K čemu to je?

Zatím to zkoumám, ale nevypadá to jako něco moc revolučního. V podstatě jde o to, že Kinesis pro nás provozuje frontu na data, do které může padat cokoliv odkudkoliv a jakoukoliv rychlostí. My si musíme napsat aplikaci, která si z fronty data bere, něco s nima dělá a vrací je na výstupu (třeba zase do jiné Kinesis fronty). Kinesis samotný s psaním aplikací na zpracování dat nijak moc nepomáhá. K dispozici je SDK pro Kinesis - tedy obalené funkce typu GetNextRecords


A konkrétní příklady?

  • zpracování logů
  • analýza dat v reálném čase
  • odchycení a zpracování dat ze sociálních sítí
  • analýza finančních transakcí
  • gaming analytika
  • strojové účení


Kolik to stojí?

Kinesis se, stejně jako všechno ostatní v AWS, platí po hodině provozu za provozní jednotku (shard). Jeden shard zvládne přijímat data rychlostí 1MB/sekundu a odesílat rychlostí 2MB/sekundu. Aktuálním limitem na jeden vložený datový objekt je 50kB. Text tohohle blogpostu by jeden "shard" zvládl přijmout zhruba 500x/sekundu. Cena ze tenhle nejmenší "shard" je $0.015 za hodinu. Další a poslední cena je za vkládající operace. Jeden milion vložení (přijetí) datových objektů stojí $0.028. 

Když bych zůstal u objemu tohohle blogpostu a řekl, že má 3.5kB, pak kdyby chodil do Kinesis takovýhle text 300x/sekundu celý měsíc, stálo by to:

  • 1 shard = $11.16 / měsíc
  • vložení textu 500x/sekundu = 803.520.000 vložení za měsíc = $37,49 / měsíc (vložení = příjem jednoho blogpostu)


Suma sumárum

Největší přidanou hodnotou je tedy hlavně držení streamu dat, o který se nemusíme starat. Bude to možná poměrně konkurence pro Pusher. Pro Keboola Connection je to hlavně příležitost - de-facto na podobném principu dávno fungujeme a Kinesis nám může pomoct "zpevnit základy". 

Znovu se tedy potvrzuje to co jsem psal na konci staršího blogpostu - nejenom díky Kinesis si můžeme troufnout na náročnější projekty a cítit se v Cloudu silnější. 

K vidění na Kinesis zatím moc není, tady je promo video a odkazy na dokumentaci. Přikládám screenshoty z aktuální Management Console.

Cloud - nejvíc nebezpečná věc pro české firmy!!

Problém?

Cloud - nejvíc nebezpečná věc, zvlášť  tady v čechách!

Tohle téma si schovávám od půlky května. Bacha, TL;DR :) 

Na Facebooku proběhl post Radka Hulána:

"O data v cloudu se typicky starají lidé s mnohem lepšími znalostmi než váš lokální admin (včetně důrazu na zabezpečení) a jsou k dispozici 24/7. Pro menší firmy nedává dle mého vůbec smysl mít vlastní servery, licence, administrace, pokud daná věc existuje jako cloudová služba…"

(pro datové archeology přidám ještě link na zálohu)

Pod postem se rozhořela klasická česká diskuse. Pár výcuců:

  • až vypadne cloud, přijde firma o tisíce
  • citlivá data nesmí pryč
  • proti výpadku lokálního serveru se dá aktivně něco dělat
  • Hlavně si sám sobě můžu dělat zálohy jak chci a kdy chci
  • A pak jsem zažil chybu, při které zmizel důležitý soubor z placeného "Google Docs pro firmy", na kterém aktivně pracovalo 100+ lidí…
  • kdyz si poridim hostovany exchange u MS, jak sezenu admina?
  • SSL samotné není zárukou zcela bezpečné komunikace
  • Nic není zárukou bezpečné komunikace v okamžiku, kdy svá data pustíte ven.

Základní doporučení je samozřejmě nevlastnit žádný počítače, protože pak se nemusím trápit myšlenkou, jestli není v řadiči sběrnice nějakej odposlechovej software. Taky je dobrý nemít umělý koleno, protože to má určitě výrobní číslo, který je v cloudu na nebezpečným úložišti - což radikálně ohrožuje moji svobodu a tím pádem i bezpečí… :)

"Cloud" je skloňované slovo ve všech médiích. Podobně jako BigData. Evidentně polarizuje společnost na 2 skupiny. Češi si myslí, že v Cloudu o svoje data během mžiku přijdou. Řiká se, že každej čech je odborníkem na fotbal a marketing, podle projevů na internetu jsme všichni experti na cloud a IT bezpečnost. Když se to zkombinuje s tím, že si všechno uděláme nejlíp sami, nastane pekelná kombinace. 


O čem je vlastně řeč?

Podle mě většina českých mudrců o Cloudu ví stejně jako Jen Barber o "IT":


Takže: Cloud není nic jinýho než zase servery, ramky a harddisky. Bam! Jedinej rozdíl mezi Zdendovou serverovnou a Cloudem je v business modelu (podepřeným nějakou virtualizační technologií). Ta hranice je tenčí než rejžovej papír. Můžu mít svůj server u rodičů v ložnici na UPC lince nebo ho můžu dát do serverovny nebo si ho můžu celej pronajmout (už není můj!) a nebo si koupím jen "tolik kapacity co potřebuju" a když mi to nestačí, během pár vteřin dokoupím "víc". To "během pár vteřin dokoupím víc" je podle mě esencí definice slova cloud computing. Je jedno, jestli si kupuju víc GHz v serveru (IaaS) nebo I/O operací do SQL (PaaS) nebo GoodData projektů (SaaS).

Cloud je o flexibilitě. Cloud je o unlimited undo službách. Cloud je o ohromných business možnostech. Cloud je o nestahování kalhot před brodem.


Složité plánování

Někdy v půlce roku 2008 jsme v dřívější práci řešili projekt tvujusmev.cz pro Sony Czech a.s. Lidi měli nahrávat fotky usmívajících se obličejů, ze kterých pak porota vybrala nejlepší úsměv, který se vytiskne na plachtu 5x5m a v horkovzdušném balónu přeletí Prahu (zjednodušeně řečeno). Nahrávat může kdokoliv jakékoliv množství fotek, neprovádí se žádná registrace - prostě nahraju fotku a dám k ní své jméno + email. Limit na velikost nahrávané fotky nebude. Celé to bylo promoakce na SONY foťáky s funkcí smileshutter - co umí zmáčknout spoušť v momentě, kdy se někdo směje.

Udělali jsme odhad, že tam pár desítek tisíc lidí nahraje 5 fotek, každou kolem 3-5Mpix. Znali jsme konkrétní (veliké) peníze, které Sony utratí za kampaně a došli k závěru, že potřebujeme další blade server a do začátku párset GB storage pro fotky. Pointa tohohle příběhu je strašně bizzarní. Všechny čísla se splnila - lidi přišli, fotky nahrávali jako zuřivý a projekt se povedl na jedničku. S jediným rozdílem, že většina fotek byla nakonec nahraná z mobilu a na disku si ukously tak 15GB. Stejně tak to mohlo ale dopadnout obráceně - mohli jsme mít >2TB fotek v ultra rozlišení a nevědět kam s nima. 

Kdybysme fotky dali do cloud storage, "pay-as-you-go" náklady přenesl na klienta a podobnou úvahou neztrácel čas, ušetřili jsme tak 200.000,- Kč.


"Provozní nám zakázal dávat vodu z kohoutku!"

Typická česká restaurace vydělává kačky na 0.2l Cole za 35,- Kč. Stejně jako nebudete po návratu z poza hranic chápat, proč je tak složité dostat kohoutkovou vodu, divíme se, v čem maj český firmy problém s cloudem. V Keboole se potkáváme s lidma, kteří musí rozhodnout o tom, jestli mohou používat naše služby v Cloudu nebo ne. Před lety jsem se dostal k příběhu, jak jeden soud v US plánoval v Cloudu analyzovat data o vězních, zatímco česká papírna odmítla do Cloudu dát svoje data o prodaných rolích toaleťáku - je to nebezpečný! 

Nutno říct, že se to v čechách hodně zlepšuje. Zhruba před 1.5 rokem nám jeden polobankovní klient napsal:

"Dobrý den pane Kvasničko, děkujeme za včerejší velmi zajímavou prezentaci. Neshledali jsme žádný důvod, který by nám zakazoval umístit data v cloudu pro případné nasazení goodata v xxxx. Proto bychom rádi využili možnosti vyzkoušení toolu během následujících týdnů…"

Každopádně "český Franta" i v roce 2013 stále ví, že Cloud je terminální stanice každé firemní infrastruktury! 


Tak v čem je problém? Proč rigidní právník v český bance může říct, že je Cloud pro jejich dceřinou společnost ok, ale "normální" podnikatel to vidí jinak? Válím to v hlavě pár dní a vydestiloval jsem následující ohrožení:

  • strach o práci - všichni ti chytráci v diskusích zmiňují nízkou bezpečnost cloudu a svorně tvrdí, že jima postavená infrastruktura je bezpečnější, nikdy nemá výpadek konektivity, nikdy v ní nehoří, nikdo do ní nikdy nepronikne, atd… Nevidím za tím nic než strach, že jejich dominantní postavení v dané práci vezme vniveč, protože non-IT oddělení získají kontrolu nad svými daty a pana "Administratora" se nikdo nebude potřebovat na nic ptát.
  • provize od stávajícího vendora - není nic hošího než nemuset koupit další chassi k diskovému poli. EMC² pláče, obchody nejdou a CTO nemá kick-backy od firem typu TechData.com (kick-back má tady nejčastěji podobu zájezdu do Alp pro zákazníka měsíce). Pokud náklady na provoz informačního portálu pražanům vyjdou dneska na ~100 mio Kč / rok (vůbec neověřuju, je to plácnutí do vody - čistě příklad), nebude asi jakákoliv optimalizace zdrojů průchozí přes konzumenty kick-backů. 1/2 z těhle věcí nemá v Cloudu vůbec místo

  • neznalost - resp. povědomí nabyté čtením diskusí v českých e-zinech. Hlášky typu "Webový Office NE! Spadnou internety a celá firma stojí." má logiku stejnou jako "Barák bez vlastní vodárny NE! Nepoteče voda a nespláchneme záchody."
  • EU vs USA - to se 99% SMB segmentů netýká, nicméně Cloud provider není jen Amazon/Google/Rackspace
  • interní směrnice - je často důsledkem IT důvodů nebo politického lobby, které nemá nic společného s tím, kdo může poskytnout dané firmě nejlepší možné řešení. Takové směrnice buď bezmyšlenkovitě stojí na obecném "EU" doporučení, které firemní právník s CTO za zády alibisticky interpretuje jako veto a de-facto nařídí, aby vše bylo on-premise (lokální instalace na vlastním HW). 
  • "něco se na mě zjistí" - přestanu kontrolovat část procesu (tím trpí Keboola nejvíc - GoodData syndrom). Pokud se nebavíme přímo s majitelem firmy, je všechno co zákazníkovi nabízíme potenciálním ohrožením existujícího managementu, protože dělá data transparentní. "Slice&Dice" je pro takové lidi nůž do zad :)

  • odpovědnost za rozhodnutí (alibismus) - cokoliv nového je pro některé lidi složité prosadit. Je prostě lepší tlačit káru dál ve vyjetých kolejích, než časem obhajovat, proč jsem se pod něco podepsal.
  • absence příkladů od velkých lokáních hráčů - tady asi nejvíc mohou zamakat firmy typu netmail.cz, které, pokud mám správné informace, mají v portfoliu top-notch hráče, ale né úplně dobře to mohou publikovat, takže je tady nenajdeme


Český paradox - obava z dostupnosti

Když v roce 2011 postihl Amazon AWS jeden z největších výpadků, měli cloud-hateři žně. Spousta služeb závislá na AWS byla v pr*eli, někteří ale jeli dál. Tradááá! :-) K přežití takto masivního výpadku stačilo mít dobře navrženou architekturu infrastruktury a využít možnosti provozovat služby rozkopírované mezi více lokalit (Multi-AvailabilityZone režim). 

Asi nejznámější (extrémní) příklad služby, která má precizně vyřešenou odolnost proti výpadku cloudu, je Netflix.com. V Netflixu si udělali interní službu "Chaos Monkey" (nedávno uvedená jako open source), která prochází jejich infrastrukturu v Amazon AWS a náhodně si vybírá serverové instance a vypíná je. Architekti Netflixu vědí, že takový škůdce existuje a že určitě přijde a něco vypne. Nejde se spoléhat, že "se mi to nestane". Díky tomu pak staví řešení, které je proti výpadkům odolné "by design".

Pro českého IT mistra je ale Cloud nebezpečné místo, protože určitě nebude (něco) fungovat a bude průser!


Český paradox - obava z bezpečí dat

Několikrát v životě se mi stalo, že jsem po telefonu požádal o připojení vzdáleného terminálu k zhavarovanému serveru (řeší se to pomocí krabičky, která má se vůči serveru chová jako klávesnice, myš a monitor, ale směrem k uživateli funguje jako program v prohlížeči, takže je možné ovládat od internetu odpojený server) a po zalogování koukal na plochu cizího serveru, protože to obsluha zapoměla přepojit a předchozí uživatel se zapoměl odhlásit. Podobné věci jsou v Cloudu vyřešené systémově mnohem lépe - nejenom certifikacema fyzické bezpečnosti - nepovede se vám "tam" vběhnout, inzultovat důchodce v roli vrátného a rozkopat konkurenční firmě server. Kvalitativně je bezpečnost v Cloudu o světelné roky před 99% všech serveroven. Z jednoduchého důvodu - Cloud provider chce být nejlepší a tak se snaží, což se o vašem IT říct skoro určitě nedá. 


Co cizina?

NASA říká, že by bez Identity Managementu (AWS IAM) v Cloudu neuřídila přístup k datům, který generují roboti na Marsu, Pfizer do Cloudu přenáší výzkum léků, NASDAQ tam analyzuje burzovní data, Obama na něm postavil svoji první prezidentskou kampaň a letiště v Norimbergu v Cloudu provozuje portál obsahující osobní data svých zákazníků. Seznam pár "AWS" případových studií je tady (důležité je říct, že Amazon AWS není jediný Cloud provider, vybral jsem si ho jen jako osobně nejbližšího zástupce) 


Long story short…

Problém bude vždycky v lidech. Pokud provozujete problematickou webovou aplikaci, ke které se má někdo připojit online, budou vaše data stejně špatně chráněná v interní serverovně jako v Cloudu. Pokud s tím budete ale něco chtít dělat, bude v Cloudu mnohem rychlejší postavit kaskádu firewallů, demilitarizovanou zónu a zapojit systém aktivní kontroly průniku. Všechno tohle dává práci šikovným lidem a bere ji lemplům. Nevím, jestli to je nebo není tím pravým důvodem, proč v čechách lidi tolik křičí, když na Cloud přijde řeč…


Kdo dočetl až sem, může hodit oko na stručný seznam služeb, které používáme v Keboole: http://padak.keboola.com/cloud-vyhazujeme-penize-oknem

UPDATE 22.10.2013: Americká armáda přechází na Google Apps s 50 000 lidmi - link.