In an excellent article Distinguished Architect Randy Shoup outlines scalability practices accepted at eBay.
My top 3 list looks like this (bottom to top):
3. Best Practice #6: Virtualize At All Levels
Yes, there's a lot of buzz around VMware and no, this is not what the author is talking about in the article. The abstraction is the right keyword. Correctly chosen layers of abstraction are immensely important for a scalable architecture. Splitting your application into many tiers does not necessarily make it scalable. The problem of choosing application tiers and abstraction layers should be considered in the context of execution nodes (reads physical machines) that will be assigned the load at runtime.
2. Best Practice #3: Avoid Distributed Transactions
The main point here is that with rare exceptions data consistency should not be taken too literally. This simple and very important idea somehow proves to be very difficult to convey to the masses. Too many times I had to face people religious about data integrity in the ACID sense. Several hundred of tables dispersed over a couple of schemas with tight referential integrity constraints between the tables... The result? A system that is hard to extend, upgrade, and service.
1. Best Practice #1: Partition by Function
Modularity is paramount for a sound software system. Decouple all the way down to the database. The benefits are many: the modules can be developed, upgraded, and phased out independently on one another by independent teams on independent schedules.
0 comments:
Post a Comment