Our trivial application on OpenShift is implemented as multiple applications. We wanted a server that implements the business logic and data access, and then multiple servers implementing user interfaces, for example one for web, one for mobile (not yet written) etc. We think it is important to be able to deploy these independently, so we did not want to put all the function in a single server and use programming language modularity concepts to separate the parts - instead we wrote independent servers that communicate via HTTP. We also wanted to a have a single set of URLs for the whole application. This means, for example, that the different presentation servers (and the business logic server) share the same URL for each application entity - the presentation servers are not allowed to introduce their own. The consequence is that there needs to be a "dispatch service" that takes an incoming request on one of those URLs and dispatches it to the correct server based on the requested content-type and other factors. In a system that has only one business logic server, it would make sense to deploy the "dispatch service" with the business logic server itself. However, we think that in the future we will want systems that deploy multiple business logic servers as well as multiple presentation servers, so we decided to deploy the "dispatch service" on its own server. All communication between the servers, and all communication from the outside go through the dispatch service - the servers do not talk to each other directly. The server that hosts the dispatch service also does all the authentication. In summary, our application is currently composed of 3 servers - the "public server" that receives all requests, performs authentication and dispatches to one of two "worker servers". The worker servers right now are a single "business logic server" that implements business logic and interfaces tot he database and a "web UI server" that implements an HTML UI.