Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deploying an SOA style application within a PAAS

I am currently looking at deploying an SOA style Application into a PAAS on the cloud.

I am evaluating a number of PAAS providers Including Cloud Foundry, Heroku and Jelastic.

At the moment, for simplicities sake, I just have a grails app and a single service jar file with an embedded Jetty server. This will expand to be multiple services and web front ends, with a service ate way in the middle all communicating via a mixture of rabbit mq and http.

I am struggling at the moment to understand the topology of how these would be deployed onto a PAAS.

My questions are:

  1. Do all services and web apps have to be deployed as top level "applications" within the PAAS (for instance can dynos be used In Heroku?)

  2. If so, can access to the services be restricted so that requests can only be made to them from the webapp (gateway eventually).

  3. Do they need to exist as a top level app in order to benefit from load balancing (and auto scaling) as there may be several instances of each service.

  4. If each service was to have its own datastore, I presume again this would require it to be an app?

  5. If there is a way to achieve this without using a full app for each service, how are the nodes individually addressable? Can they register themselves with some kind of directory service?

Thanks!

like image 599
Chris Prior Avatar asked Oct 09 '12 07:10

Chris Prior


1 Answers

I will answer for CloudFoundry as this is what I'm most proficient in (and what I'm paid for :)

Preamble: CloudFoundry has the concepts of applications (pieces of code that run, which may or may not be exposed to the outside world i.e. there is a standalone runtime) and services (datastores and the like, RabbitMQ falls into that category). You deploy apps and bind them to zero or more services.

  1. I would answer "YES" assuming that you want the ability to redeploy and scale each of what you call service (i.e. not service in the CF sense, but in the SOA sense) individually
  2. For CloudFoundry, the answer is "NO" you would have to do that programmatically. Note that if the services only communicate via *e.g.* RabbitMQ, then you would deploy them as StandAlone apps and they would not be web addressable in the first place though
  3. There is no "top level" and "other level" in CloudFoundry. The applications are what you can scale. Applications bound to a URL are automatically load balanced.
  4. YES. Note that you could package several SOA "services" as a single "app" and have parts of that talk to CloudFoundry service A and other parts talk to service B. See 1) for drawbacks.
  5. From previous answers, the answer is NO. If you use e.g. RabbitMQ as your message broker though, then routing keys are used as a kind of "directory".

Hope this makes sense :)

like image 67
ebottard Avatar answered Sep 25 '22 15:09

ebottard