I like what I'm reading about improved performance via Service
Oriented Architecture for my Rails app. Stepping in that direction
will require some code reorganization, though. Has anyone regretted
the time invested in Rails SOA or suffered any other drawbacks that
might -- from a business perspective -- have disinclined them from
going SOA?
One potential problem is providing satisfactory security. The
traditional security model has all the protection features built into
individual applications, but opening access to all applications as
services can and is likely to result in structural vulnerabilities. This
problem is being researched; however, the technologies are still, for
the most part, emerging.
SOA and performance are two of the most abused terms in IT, so definitions matter a lot. I take the first to mean a set of principles applied to the design and development of systems and complex solutions (go to Wikipedia or Google define:SOA for a list) and the second as the ability of a system or a component of a system to do its work efficiently (more operations in the same amount of time, the same number of operations in a shorter time). That being the case, I have a hard time understanding the original question because all of these concepts seem to be more or less orthogonal to one another. Architecture and implementation technology are certainly going to have an effect on performance, but they don’t determine performance or scalability (related term, though not the same, also badly abused) as much as how they’re applied which is largely determined by application complexity and the skill of the development team.
I have the feeling that none of the answers you’ve received are really answering your question though. Could you further specify what you’ve heard and what you’re looking to find out?
I allow that I likely mangled the use of the term 'performance', but I
think the question stands, because anyone consciously refactoring
their Rails app to accommodate an SOA approach would surely know it:
models now implemented as services would respond to HTTP requests or
messaging services like RabbitMQ.
Before I list the purported benefits as I have read them, let me set
context. A part of my Rails app could possibly succeed as its own app,
while its existence also benefits the rest of the app I have underway.
Shouldn't I want to develop this independent piece as an autonomous
service while also allowing for its use by the rest of the app?
It is said...
+ organizational efficiency - services are isolated, so development
teams focus on their assigned service(s) alone
+ robustness - services have their own data stores and modifications
to them is independent from other services
+ scalability - rather than optimize the common Rails data store to
meet all cases entailed by use of the app, each service and its
associated use case entails its own particular database optimization
sinatra is WAAAY better than rails for building a web service API - I’ve built two API’s in sinatra in the past week, one of them took only 1.5h (this w/ oauth, get/put/post/delete, etc.). Compare this to when I tried to build an API in “The Rails Way” , which at the time was ActiveResource (which has since gone fallow), which took weeks.
If you’re using something like amazon’s S3 or SQS or SimpleDB, then congrats, you’re doing SOA. My understanding is that the culture inside Amazon was always very heavily SOA-oriented, and top management frowned on efforts that involved reinventing commodity functions like storage or queueing - and this led to their cloud business.
The S is SOA is Service - if you want to provide a service, then SOA may be a good idea. If you want a nice clean separation between API and everything above, and if you think your web service API might some day be used by other business units, partners, mashups, etc., then sure, you can think of it as a service and you’re doing SOA.
AFAIK the only connection between SOA and performance is that you can focus on optimizing your service, and if you provide a really good service you could perhaps have economies of scale - but on the other hand you can focus on optimizing any section of code.