quote:
Dit is de eerste architectuur die wij ontwikkelen met het Facebook platform in het achterhoofd. We willen dus Agile kunnen werken en makkelijk componenten kunnen toevoegen/uitbreiden enz. Aangezien we geen voorgaande ervaring hebben met dergelijke architecturen, zijn we niet gelijk aan iets als Facebook's Thrift begonnen, maar iets wat makkelijker te begrijpen is.
Wij doen het als volgt:
frontend : html + JS, gegenereerd door PHP (Zend Framework)
api server : geimplementeerd als Erlang, op basis van Mochiweb
backend : C++ application servers, gebruik makend van ofwel MySQL+Memcached of in-house gespecialiseerde database/caching.
De PHP layer heb ik ontworpen, maken gebruik van HTTP protocol om met de API server te communiceren. De berichten zijn JSON gecodeerd. Dus simpelweg curl naar api server. Natuurlijk verstopt in een abstractie laag, zodat ipv HTTP ook sockets gebruikt kunnen worden (mocht de performance tegenvallen) of een ander formaat. In het begin hadden we bovendien nog geen ApiServer en ontwikkelde ik tegen een Mock server.
De ApiServer is grotendeels door onze architect ontwikkeld, gebaseerd op Mochiweb. Het is dus een zeer eenvoudige http server. Ontvangt JSON encoded GET/POST requests en roept vervolgens de juiste Api module aan. De Api module gebruikt een App module die de C++ backend servers aanroept. Hier gebruiken we socket communicatie met een eigen packet format waarbij de body weer JSON encoded is (in binary vorm). Ik heb de ontwikkeling van de ApiServer nu overgenomen en implementeer het verder.
De C++ backend jongens kunnen volledig onafhankelijk hun servers ontwikkelen, via een standaard framework. Zij bieden een API dat de Api Server gebruikt.
Ontwikkelen gaat echt heel soepel, omdat alles mooi is opgebroken in verschillende lagen. Volgens mij hebben we voor elke laag een geschikte taal gebruikt en is alles met http/socket communicatie netjes aan elkaar geknoopt. Ik ben een fan van PHP, maar mocht het om een of andere reden niet goed bevallen, dan is het makkelijk om deze laag door iets anders te vervangen. De PHP laag bevat wel wat logica, maar gebruikt puur en alleen de ApiServer om data te krijgen en op te slaan. We zouden zelfs Ajax requests direct naar onze ApiServer (of via een proxy) kunnen sturen, om zo nog iets betere performance te krijgen. Ook het uitbreiden van services lijkt vrij eenvoudig met deze opzet door het gebruik van PHP + JSON. Je kan gewoon wget op de command line gebruiken om de Api Server te testen.
T.T. wijzigde dit bericht 17-05-2008 12:42 (12%)
Reden: typo