昨天看了 ebay-scalability-best-practices ,做了简单的摘要记录:
可扩展的衡量:性价比
Best Practice #1: Partition by Function
Further, the more decoupled that unrelated functionality can be, the more flexibility you will have to scale them independently of one another.
代码层,应用层,数据库层都需要进行功能分割,好处:可以独立的扩展
Best Practice #2: Split Horizontally
垂直分割?
减少耦合后,任何一个单个模块可以搞定自己的系统,不依赖其他
无状态的应用服务器,没有事务,任意扩展--scale out
数据库:肯定是有状态的 shard 简单的取模分割,扩展 取模的key可以是很多
Best Practice #3: Avoid Distributed Transactions
The CAP theorem, postulated almost 10 years ago by Inktomi's Eric Brewer, states that of three highly desirable properties of distributed systems - consistency (C), availability (A), and partition-tolerance (P) - you can only choose two at any one time. For a high-traffic web site, we have to choose partition-tolerance, since it is fundamental to scaling. For a 24x7 web site, we typically choose availability. So immediate consistency has to give way.
避免分布式事务,用另外的方法尽量保证一致性
Best Practice #4: Decouple Functions Asynchronously
Techniques like SEDA (Staged Event-Driven Architecture) can be used for asynchrony inside an individual component while retaining an easy-to-understand programming model. Between components, the principle is the same -- avoid synchronous coupling as much as possible.
异步解耦,减少系统间的耦合
Best Practice #5: Move Processing To Asynchronous Flows
异步处理
Best Practice #6: Virtualize At All Levels
对上层调用者屏蔽实现细节 O-R LVS-balance都是属于这种
Best Practice #7: Cache Appropriately
避免cache滥用,造成系统对cache 可用性的依赖,影响系统的可靠性。
--EOF--
Leave a comment