EBAY可伸缩性策略
1、 Partition Everything 切分万物,能划分尽量划分 从领域数据到功能
2、 Asynchrony Everywhere 处处异步 EDA和消息广播
3、 Automate Everything 全部自动 保证专注自动配置 自动回复 机器学习
4、 Remember Everything Fails 记录失败
5、 Embrace Inconsistency与狼共舞,与不一致回旋。在CAP原则下权衡。亲不同是谓大同
6、 Expect (R)evolution 预言演变
7、 Dependencies Matter 重视依赖
8、 Be Authoritative 独断专行
9、 Never Enough Data
10、Custom Infrastructure 自定义基础设施
eBay 切分分层
scaling 数据层 数据存储分离 松耦合
scaling应用层
应用显示 控制 领域之间实现分层
scaling 数据层
按功能分段划分不同主机。再在段内再水平分割:
读写分离 write master/read slave
尽可能以主键Key读取
将数据映射到本地让数据库负担尽可能小
首先考虑无事务情况
创建数据库结构可替代技术
让数据库负担尽可能小
不要将业务逻辑放入数据库。没有存储过程,只有简单的一些触发器。
尽量不要让数据库进行复杂耗时查询及其计算。将这些工作移植到应用层,如排序,JOIN等。
最小化数据库事务
使用Auto-commit事务
无分布式事务,无客户端事务
有事务就有锁,避免事务就是避免锁。
避免耦合
可以实现并行更新
伸缩扩展应用层
根据不同业务领域分别部署。将不需要事务的业务从需要事务的业务中分离出来,使用异步EDA和同步SOA架构
正确对待不一致性
不要担心害怕不一致性,也不要苛求语言工具能够提供高可靠性 和高一致性。
使用事务是为了保证一致性,CAP原理适当降低一致性要求:切分缩小需要高一致性的需求。