I am working on a couple of web apps that are in the early phase of the life cycle. We are in the PRD/Architecture phase, so we have not started to code yet. Both apps have some functional requirements that are similar to many web apps: - User/Group management with permissions-based access to data
- Secure and persistent data store - preferably no-sql
- Cloud-based and horizontally scalable
- Server-side processing accessible by client via RESTful API
In addition, one of the apps had some specific requirements for:
- storing multiple file types
- versioning
- full text search
- encryption
These basic requirements probably fit most new web apps as they are being developed. Nothing new and ground-breaking, so we looked at the usual suspects for providing the application infrastructure:
Amazon Web Services and
Google App Engine.
AWS
AWS is the big dog on the block and they have they most wide array of virtualized infrastructure. We looked at a simple architecture such as this:
This is a lot of components to manage and write software for. Pretty much the same, from a software perspective, as building a dedicated hosted solution. We needed to add all the server-side logic for processing the data and storing it. And we had to develop our own User Management system.
Google AppEngine
Next we looked at Google AppEngine. This was a lot closer to what we needed. Rather than just virtualizing the hardware components in a 3-tiered architecture as AWS does, Google AppEngine provides a higher level of abstraction. We don't need to worry about machine instances with Google AppEngine because they take care of all the scaling issues. But there were quirks that made it less than perfect for our needs:
- The User Management that comes with AppEngine requires Google Accounts. That would not work for our app so we still needed to develop our own user management system.
- Much of the file manipulation that we needed - except for search, of course, still needed to be coded by us.
We probably would have decided on Google AppEngine had I not been familiar with the Apstrata service. Full disclosure: Apstrata is one of Consensio's clients. I was not bound to use Apstrata in these projects because of our existing relationship - the working paradigm was to pick the best technology - but we took a look for completeness. We were very pleased to see that almost all of our server-side requirements are met by Apstrata out-of-the-box. Apstrata's basic API offers:
- Document-style, no-sql database
- versioning
- full text search
- User management with ACL-based permissions
- RESTful API with Javascript support
- Server-side scripting for managing complex actions
- Horizontal scalability provided as part of the service
Conclusion
We are going to use the Apstrata service because it makes our life much easier and allows us to get to market more quickly and reliably than if we had to roll our own. I am impressed (again) with the breadth of the functionality that Apstrata offers and this allows us to focus on the User Experience - which is our real value add in these projects.
Apstrata has a hard time getting noticed in the shadow of AWS and Google (and Rackspace and Salesforce.com) - but this unique service is something that all web developers should at least review prior to making final architecture/design decisions.