Note: I'm in the process of moving to an awesome new blogging platform by the insanely great Dave Winer. If you blog I highly encourage you to look into Fargo. My new blog can be found at http://looselycoupledthinking.com.
I'm hearing the term "modern architecture" used quite a bit but haven't seen much clarification about what it actually means. Here are some principles and capabilities that I would expect to see in "modern architecture":
- Cloud first
- Loosely coupled, distributed services
- Support Postel's Law
- Distributed storage and caching
- Weak/Eventual Consistency (CAP) - committed reads
- REST APIs where appropriate
- Scale out, not up
- No apparent downtime
- No biz logic in sprocs (prefer no sprocs at all)
- No ref integrity in db - enforce in service/app if needed
- No distributed txns
- Simple data abstractions for data access
- Multiple service versions in production
- Active-active failovers across DCs where appropriate
- No singletons, at least 4 instances of a service running in prod (2 per DC)
- Consistent approach to monitoring/logging/SLE threshold compliance•
- Real-time access to service health/activity
- Design for/expect failure - degrade gracefully
- Test in production
- No reporting from txn data - keep OLTP and OLAP separate
- Asynchronous user experiences (no blocking)
- Avoid designing for a single device or form factor (user-scalable=0 is evil)
I'll plan to drill into more detail on several of these topics over the next couple of posts.
What do you think is missing from this list? What shouldn't be in this list?
- Mike Kavis suggested via FB that "Modern solutions have a combo of SQL, nosql, cache, CDN, and many other data and storage technologies under the hood". I'd interpret this as: Data stores should be abstracted without regard to where/how they should be accessed. The abstraction hands off to a more granular access component/service with specific awareness to location/access requirements/etc.
BTW I'm currently reading Mike's new book. I'm liking what I've read thus far - I'll post a full review when I've finally finished it.