Abbiamo un'applicazione Web basata su Java EE in esecuzione su un cluster di server di app Glassfish . Il traffico in entrata sarà principalmente richieste RESTful per rappresentazioni basate su XML delle risorse delle nostre applicazioni, ma forse il 5% del traffico potrebbe essere per rappresentazioni basate su JSON o XHTML / CSS.
Stiamo ora esaminando le soluzioni di bilanciamento del carico per distribuire il traffico in entrata attraverso le istanze Glassfish nel cluster. Stiamo anche esaminando come scaricare il cluster usando memcached, una mappa hash distribuita in memoria le cui chiavi sarebbero i nomi delle risorse REST (ad es. "/ User / bob", "/ group / jazzlovers") e i cui valori sono le rappresentazioni XML corrispondenti.
Un approccio che sembra promettente è quello di uccidere entrambi gli uccelli con una fava e utilizzare il server HTTP nginx / proxy inverso leggero e veloce . Nginx gestirà ogni richiesta in arrivo cercando prima il suo URI in memcached per vedere se c'è già una rappresentazione XML non scaduta. In caso contrario, nginx invia la richiesta a una delle istanze di Glassfish. Il modulo memginato nginx è descritto in questo breve articolo scritto .
Qual è la tua impressione generale con nginx e memcached utilizzata in questo modo, quanto sei felice con loro? Quali risorse hai trovato più utili per conoscerli? Se le hai provate e non si adattavano ai tuoi scopi, perché no, e cosa hai usato invece?
Nota: ecco una domanda correlata . Prima di conoscere ServerFault l'ho chiesto su StackOverflow .
Modifica: tutte le risposte qui finora sono state molto utili, sebbene non ci sia stata esperienza diretta. Questa risposta alla fine è apparsa su StackOverflow ed è stata piuttosto rialzista sulla configurazione di nginx / memcached.