FAST □□□ -e Call FastRPC mez i se rve r ová komunikace Vlastimil Pečínka http://fastrpc.sourceforge.net/ > Aplikační servery co a proč > Middleware vysvětlení, rpc > XML-RPC middleware protokol založený na XML > FastRPC zpetne kompatibilní binární verze > Meta se rve r framework pro tvorbu backendö > Príklad server pro matematické operace > Diskuse Aplikační servery > N-vrstvá architektura aplikací, distribuované prostředí > Logika v aplikačním serveru (backend) > „Tenký" fronted (např. webová aplikace v PHP/Python) > Komunikace vrstev - middleware >»»»«*■■■■■■■■■■.... > V Spžgároii aplikační ^servery puvec ♦*i o dvou důvodu >* vyřesit"^m<5Q^rý..(.nap.ř, do databáze^ >VýřepttpfeilJ3\|ěn^Bapř| [-efetatAtedat^^ázesgia^o^ádí) •••■■■■....--•■••• ■■■■■........,..-•• > Následně přesun logil^-j^iaster/siave databáze, ... Middleware > Software spojující softwarové komponenty nebo aplikace > Umožňuje aplikacím sdílet data (a logiku) > Spojován s pojmy jako XML-RPC, SOAP, Web services > Různé typy middleware - RPC (remote procedure call) - MOM (message oriented middleware) - ORB (object request broker) - SQL oriented data access Middleware - RPC > Vzdálené volání procedur klientem na serveru (vs. „lokální" volání v programu) > Synchronní a asynchronní > Klient - server model distribuovaného výpočtu > Klient sestaví dotaz, odešle transportní vrstvou na server, tam dojde k provedení akce, sestavení odpovědi a odeslání na server > První známá implementace: SUN RPC (NFS) Ax> SOAP O <■■; íí Se/více Service Requester Provider XML-RPC > Sestavení dotazu a odpovědi ve formě XML dokumentu > Transportní vrstva - HTTP > Velmi jednoduchý protokol (definice na dvě stránky) > Upovídaný protokol - z povahy XML (tágy, escaping) > Náročný u vysokozátěžových aplikací, nevhodný pro výměnu velkého objemu dat (parsing) > Pouze 8 datových typů (+ jako XML-RPC extenze) http://www.xmlrpc.com/ XML-RPC -dotaz suma 12 24 http://www.xmlrpc.com/ XML-RPC -odpověď status 404 statusMessage :/name> >Not found http://www.xmlrpc.com/ XML-RPC-datové typy Název Příklad array 1212 1212 base64 eW91IGNhbidOIHgdGhpcyE= boolean l datetime 19 980717T14:08:55 double -12.53 integer 42 nebo 42 string Hello worldl struct foo 12 nil FastRPC > Zpětně kompatibilní se XML-RPC, vlastní implementace xml parseru, autodetekce klienta > Transportní vrstva - HTTP, možnost chunkování > Stejných 8 datových typu a 3 non-datové (method call, method response, fault response) > Proprietární binární forma protokolu - viz. SourceForge TY FLG DATA > Značná úspora procesorového času a objemu přenesených dat http://fastrpc.sourceforge.net/ FastRPC - režim prace > XML-RPC požadavek, XML-RPC odpověď > zpětná kompatibilita s XML-RPC klienty > klient neposílá FastRPC capability > XML-RPC požadavek, FastRPC odpověď > FastRPC klient, který neví o schopnostech server > dostane-li FastRPC odpověď, nadále tak komunikuje > FastRPC požadavek, FastRPC odpověď > pokud klient ví, že jde o FastRPC server > všechny nové aplikace v Seznamu jsou FastRPC http://fastrpc.sourceforge.net/ Metaserver > Univerzální server s prefork managementem > Kostra serveru, která dokáže „pouze" načíst konfiguraci, inicializovat rozhraní a řídit chod serveru > Vlastní programátorská práce na tvorbě serveru se omezuje na implementaci protokolového rozhraní formou handlerů a psaní logiky serveru > Používáme handlery Python.FastRPC a CPP.FastRPC > Handler dostává od metaserveru síťové rozhraní, nad ním implementuje požadovaný protokol a umožní psát logiku serveru v požadovaném programovací jazyce > Pro C++ je aplikační server „.so" soubor, pro Python jde o „.py" soubory prováděné embedded Pythonem Metaserver > Prefork management jako u Apache web serveru spareServers, maxServers, maxRequestPerChild, > Server řídí chod, volá handier na příchozí požadavek, handler volá metody podle potřeb protokolu Metaserver core J CPP.FastRPC handler Valuet &foo(Pool_t Spool, Arrayt Sparams) { params . checkParams Cis") ; return pool.Struct("status", pool.Int(200), "statusMessage", pool.String("OK")); BACKEND Příklad - server aritmetických operací > metoda add(int a, int b) pro součet dvou zadaných celý čísel a, b > metoda agregáte (string op, array x) provede operaci op nad polem celočíselných operandu x > obě metody vrací následující strukturu { int status string statusMessage [int result] } 200=OK, 405=Chyba Textový popis výsledku Hodnota výsledku pro 2 00=OK Diskuse... ... a přehled > XML-RPC, http://www.xmlrpc.org > FastRPC, http://fastrpc.sourceforge.net > Metaserver - jen pro interní potřebu Seznamu © > Python, http://www.python.org, http://www.py.cz > Middleware, RPC, ... http://www.wikipedia.org Vlastimil Pečínka