The Constellation Architecture — All the Little Apps
Shane Becker
My team and I were brought into The Company™ to help them take their One Big Monolithic Rails App™ and turn it into a a handful of smaller Rails apps that all work together… mumble mumble SOA mumble mumble.
When I started looking at it, I realized that 4 or 5 apps was only just scratching the surface. Instead of 5 apps, 1 for each product with a multi-tenant database, we've decided on 1 app per client, with NO multi-tenant database.
We have a few internal admin apps, then a whole slew of client apps. Each client has an admin app, a deployer app (to deploy the client admin), and n apps per client that are end-user facing.
- company admin apps:
- client admin deployer:
- client admin:
- end user site
- end user site
- end user site
- …
It's the classic Rails app story. Built in 2007 and piled onto for 6 years. Lotsa of version bumps and upgrades, but never any serious refactor. It's grown and grown. Clients have grown and grown. The technical requirements and cost of operating has grown and grown.
By doing this re-architecting we've reduced:
- the technical complexity of each app (each piece of the previous one big app)
- the resource requirements of each app
- the cost of operation
…considerably.
Oh, and we're doing all PULL (no push) and HTML with microformats as "API output" (no JSON).
Those three things (lots of little apps, pull, html) are changing everything for us.