Architektura aplikací v Seznam.cz Vlastimil Pečínka www.seznam.cz najdu najdu tam, tam, co co neznám!
Úvodní axiomy Email na Seznamu měl v minulosti provozní potíže a zcela jistě je bude mít i v budoucnu Je zřejmý rozdíl mezi fulltextem Seznamu a konkurence, z podstaty věci ten rozdíl bude vždy To, co děláme v technickém oddělení, není nejlepší ani nejoptimálnější, je to však prověřené, sebemotivující, a ne každý to umí Ivo Lukačovič prodává tak maximálně svoje Sony Vaio
Seznam jako technologická firma Říkáme si tak, ačkoliv nevyrábíme a nedodáváme technologie na trh Vyrábíme, provozujeme a vylepšujeme technologie (aplikace, přístupy, frameworky, ) pro provoz vlastních služeb Vyrábíme to, co nejde koupit IT je pro nás konkurenční výhoda (viz. The Red Shift Theory; Greg Papadopoulos)
Seznam jako technologická firma Emailový cluster Internetové fulltextové hledání Mobilní služby: WapProxy, MobileDetect CDN (Content Delivery Network) Mapy.cz Krabicový fulltext ELSA Jednoduchý master-master replikovaný FS Metaserver, webpublisher, a další
Approach & tools 3-vrstvá architektura: frontend, backend, storage Middleware: FastRPC, XML-RPC Frontend: vlastní web-publisher Backend: vlastní meta-server Storage: MySQL nebo proprietární řešení SQLWrapper: škálovatelnost a failover pro DB SeznamFS: jednoduchý master-master mirroring Dualita služeb: paralelní provoz ze 2 datacenter
3-vrstvá architektura Obecná architektura V jedné lokalitě Kooperující služby Middleware Loadbalancing Škálovatelnost Failover
3-vrstvá architektura Backend ebox Backendy ubox a sbox Backend frog Backend Frontend tvprogram homepage userweb
3-vrstvá architektura Homepage, webmail, novinky.cz, sport.cz, ubox, sbox, ebox, frog, tvprogram,
Duální provoz
DNS balancing & failover
Backendy - metaserver Kostra pro tvorbu backendů Umí pouze Načíst a parsovat konfiguraci Inicializovat síťová rozhraní a předávat data skrze něj Process management (fork / kill) Rozšiřitelný s pomocí vlastních nebo generických modulů generický modul podporuje komunikační protokol a možnost psát logiku v libovolném jazyce
Backendy - metaserver config init process co generi re handl cký er program
Frontendy - webpublisher Nadstavba mod_python pro tvorbu webovek v jazyce Python pod serverem Apache HTTP Od roku 2005 z důvodů vylepšený dispatching requestů globální konfigurace (výkon, přístupnost) check request objekt inteligentní odchycování výjimek implicitní metoda a jiné
Replikace MySQL Failover? Latence? Výkon?
SeznamFS Jednoduchý zrcadlený filesystém postavený nad FUSE (Filesystem in Userspace) netřeba kernel hrátek Je to FS, není nutné předělávat aplikace (vlastní I/ O knihovna, apod.) Výkon: R/O operace lze přímo z hostitelského filesystému, minimální síťový overhead Neřeší konflikty na souborovém systému, musí vyřešit aplikace
Aplika ce SeznamFS Inspirace u MySQL Binární log změn Master-master/slave Block based změny Aplika ce Sezna mfs Harddisk (ext3, xfs, ) Sezna mfs Harddisk (ext3, xfs, )
Co (empiricky) funguje 3-vrstvá architektura (kooperující prostředí) Pragmatický přístup (SeznamFS) Opensource (vždy je na čem stavět, inspirace) Dělení kompetencí (vývojář vs. administrátor) Práce s timeouty (chybové hlášení lepší než nic) Širší portfolio služeb (širší záběr know-how)
Co (empiricky) nefunguje Akademický přístup normální formy u DB pravidelně obcházeny Komplikovaný přístup mnoho vah, které nelze nikdy optimálně nastavit mnoho nepotřebné funkčnosti Outsourcing obecně (je-li pro vás IT výhodou) zejména pokud si na vás někdo know-how získává To nemůže nastat přístup Teorie velkých čísel a objemů => nastane to
Poděkování & odkazy Seznam Opensource http://opensource.seznam.cz FastRPC, Teng, SeznamFS, JAK, Seznam blog http://seznam.sblog.cz Mod_python http://www.modpython.org MySQL replikace dokumentace na http://dev.mysql.com/doc/