Ho appena finito di leggere il libro di Paul Dix Design orientato al servizio con RoR e mi piacerebbe creare un'app Web Rails 3 basata su quello che ho appena imparato.Hosting di servizi su più server su un singolo server + architettura di un sito web "abilitato"
Penso di avere l'architettura di base giusta, ma una semplice domanda mi blocca un po ': come dovrei ospitare diversi servizi REST su uno stesso server?
Ecco come vedo le cose, per il momento:
- Crea * applicazioni di servizio (UserService, XYZFeatureService, ...) sulla base di Sinatra (credo), che forniscono gli endpoint REST per accedere alle risorse
- Avere un'app di front-end Rails con controller/viste/... che consuma dati dai diversi servizi. Ad esempio, gli utenti finali potrebbero accedervi tramite
http://www.myapp.com
. - E infine avere un'app standalone "API" per gestire le chiamate a
https://api.myapp.com/*
ohttps://www.myapp.com/api/*
per pubblicare un'API esterna che utilizzerebbe gli stessi servizi con possibile autenticazione, limitazione e così via su di essa.
Ti sembra un buon inizio per te?
Per quanto riguarda l'implementazione, da quello che ho letto nel libro ho intenzione di creare gemme per gestire la comunicazione tra l'app per le rotaie e i servizi (potrei introdurre qualche RabbitMQ ma questa è un'altra storia).
Tuttavia, poiché ho solo un server fisico, mi chiedo come farò vivere tutte queste app/servizi insieme? La mia prima ipotesi è di avviare ogni app di servizio su localhost: xxxx dove xxxx è una porta diversa non privilegiata per ogni servizio. Potrei configurare ciascun gioiello del cliente nella mia app per rails per utilizzare queste porte.
Insieme a questo, probabilmente eseguirò Apache 2 + Passenger per servire il mio binario front-end e il servizio API, usando qualcosa come Rack :: URLMap (o host virtuali se si utilizza un sottodominio) per indirizzare richieste al giusta app. Dovrei quindi utilizzare Passenger per eseguire i miei servizi anche in un ambiente di produzione?
È la strada giusta da percorrere ?! Mi sembra coerente con ciò che ho letto e imparato, e facilmente diviso in diversi server fisici, se necessario, ma mi piacerebbe essere sicuro di non mancare qualcosa. Costruiresti le cose in modo diverso?
Grazie mille per il vostro contributo!
Aggiornamento
domande principali che mi piacerebbe veder un risposto sono:
- è l'architettura descritta appropriata per costruire una web app con gli endpoint API esterne?
- È OK avere servizi in esecuzione su un singolo server su porte diverse?
Grazie!
Dai un'occhiata a http://confreaks.net/videos/709-rubyconf2011-threading-versus-eventato dopo aver visto che potresti voler passare a jRuby. nginx con passeggero è una strada più comune da percorrere. – drhenner
@ user458221 Grazie, darò un'occhiata a questo video :) Anche se la mia preoccupazione è più sulle scelte di architettura e design per il momento! Ma immagino che valga la pena di preoccuparsi anche delle prestazioni ^^ –