Architektura aplikací v Seznam.cz Vlastimil Pečínka www.seznam.cz … najdu tam, 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
Backend „ebox“ Backendy „ubox“ a „sbox“ Backend „frog“ Backend 3-vrstvá architektura Backend „ebox“ Backendy „ubox“ a „sbox“ Backend „frog“ Backend „tvprogram“ Frontend „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
program Backendy - metaserver handler config init core process generický handler 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
SeznamFS Aplikace Aplikace Inspirace u MySQL Binární log změn Master-master/slave „Block based“ změny Aplikace Aplikace SeznamFS SeznamFS FS (ext3, xfs, …) FS (ext3, xfs, …) Harddisk Harddisk
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 Seznam blog Mod_python 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/