Když jsem včera utweetnul, že „Twitter je implementačně jednoduchá služba“, reakce na sebe nenechaly dlouho čekat. Vytrženo z kontextu s tím lze opravdu jen těžko souhlasit a 140 znaků kontextu bylo evidentně málo, doplním ho tedy tady.
Začnu vyřčením evidentního: Twitter je služba enormních rozměrů. Jen velmi málo z nás bude mít za celý svůj život příležitost pracovat na produktu, který každodenně používají desítky milionů uživatelů po celém světě. Projekt podobného rozsahu přináší nový problém: jak škálovat. Dělat produkt pro 1000 uživatelů je něco jiného než dělat ho pro milión – a něco jiného pro 100 milionů (tolik uživatelů ale Twitter zatím nemá). Bylo by naivní myslet si, že to, co dokážu naprogramovat za jedno odpoledne, bude ve stejné podobě fungovat pro tak velkou masu uživatelů. To umí jen DG :)
Jak jsem to tedy myslel? Co znamená „implementačně jednoduché“, když každá služba s 10m+ uživateli je z principu „implementačně obtížná“?
Myslel jsem to relativně. Zaprvé k jiným službám podobných rozměrů a zadruhé k penězům, které Twitter má.
Nejdřív k prvnímu bodu. Ačkoliv při rozsahu Twitteru už to rozhodně není úloha typu „ulož 140 znaků do databáze a pak je zase zobraz“, pořád je to práce s textem. Každý, kdo pracuje s plain textem, má velkou výhodu – text lze „levně“ ukládat, parsovat, indexovat, posílat přes síť a podobně; srovnatelné úkony pro obrázky, video nebo další binární formáty jsou daleko komplikovanější a dražší.
Rovněž algoritmicky („specifikačně“) je Twitter přímočarý, srovnáme-li ho se službami typu GMail, Google Docs nebo Facebook (jejich implementace i třeba jen pro 1000 uživatelů už je svou složitostí úplně někde jinde).
Rovněž nesouhlasím s tvrzením, že by Twitter nabízel nějaké extra zajímavé kousky nad daty, které spravuje. Aleš i Karmi zmínili vztahy mezi tweety (např. při @-reply), ale podle mě se jedná spíš o jednoduché uložení odkazu na určitý tweet (což je triviální). Oficiální klient na twitter.com ani pořádně neumí zobrazit jednoduchou konverzaci, natož třeba (smysluplný) dotaz „ukaž mi tweety, které odpovídají na tento tweet“.
Jednoduše řečeno, ano, každá masově používaná služba je těžká na správný návrh a efektivní provoz, ale v rámci množiny těchto služeb je Twitter relativně velmi jednoduchou „hračkou“. Nemám pochybnosti o tom, že tým zkušenějších vývojářů by odpovídající datové struktury a úrovně cachování navrhnul v řádu týdnů – viz například Ayendeho blog post.
Teď k penězům, což byl onen důležitý kontext v mém původním tweetu. Podle TechCrunche Twitter do dneška získal 155 milionů dolarů na investicích. Na tomto místě musím přiznat, že úplně nerozumím tomu, jak takové financování funguje, nakolik jsou tyto peníze likvidní a tak dále, nicméně budu předpokládat, že třeba 100 miliónů Twitter teoreticky může použít na financování rozvoje své služby. A nebo ne – budu předpokládat, že Twitter má/měl k dispozici 10 milionů dolarů – snad je to odhad s dostatečnou rezervou.
Takové číslo je jen číslo, než si člověk uvědomí, co se za to dá pořídit. Například skoro 10 let práce týmu deseti špičkových vývojářů (špičkový == plat 120 tisíc dolarů ročně; průměr je někde kolem 70–80 tisíc). Nebo padesát instancí EC2 předplacených na deset let dopředu. Nebo datové úložiště obřích rozměrů (ale u Twitteru jde spíše o výkon nebo o velikost úložiště). Prostě 10 milionů dolarů je fakt hodně – a to počítám výhled deseti let, zatímco Twitter existuje jen asi 3.
Když si uvědomíte, na jaké kupě peněz Twitter sedí, otázka „jednoduché implementace“ dostává znovu jiný rozměr. Mít k dispozici tým třech nadšených studentů, nebo deseti zkušených vývojářů je setsakramentský rozdíl. Když bych to měl nějak ilustrovat, sám bych patrně při implementaci Twitteru neuspěl (je to pro mě „těžký problém“), ale kdyby za mnou zítra přišel ďábel, že mi dá 150 mega v dolarech a že chce mít do tří let službu na špičkové technické úrovni, patrně bych se mu upsal. S takovým kapitálem se problém v mých očích opět stává „jednoduchým“, protože na jeho řešení můžu najmou odpovídající mozkovou kapacitu a výpočetní výkon.
A tak jsem to celé myslel :)
Bohuzel souhlasim pouze s Vasim prvnim nazorem, tedy prace na „jedno odpoledne“. Je to samozrejme slozitejsi, ale pri pouziti neceho vhodnejsiho a mene narocneho nez RoR je to trivialni sluzba a ani ty miliony uzivatelu nejsou problem, nedelaji nic jineho nez sem tam neco nekdo napise (jeden uzivatel jeden zaznam denne, v prumeru a to jeste kdo vi jestli) a pak par zobrazeni jednoduchy dotaz… je to pak o skalovatelnosti a rozlozeni zateze… Opravdu zcela nesrovnatelna luzba treba s Facebookem a dalsimi, jak i pisete. Takze 100 milonu dolaru je opravdu vyhozena castka a tesim az ta bublina kolo Facebooku a Twitteru splaskne jak mydlova bulbina… a Twitter splaskne vyrazne driv, protoze nenabizi nic co by treba Facebook nemel nebo co nevytuni do vylepsene podoby.