将 Scalabilty 的需求分成两种:
• Data Scalability: 单台机器的容量不足以 (经济的) 承载所有资料,所以需要分散。
如: NoSQL
• Computing Scalability: 单台机器的运算能力不足以 (经济的) 及时完成运算,所以需 要分散。
如:科学运算。 在之後几天,我会试着就这两种需求来解析其中会遇到的问题与常见解法。
不管是哪一种需求,在决定采用分散式架构时,就几乎注定要接受一些牺牲:
• 牺牲效率:网路延迟与节点间的协调,都会降低执行效率。
• 牺牲 AP 弹性:有些在单机上能执行的运算,无法轻易在分散式环境中完成。
• 牺牲维护维运能力:分散式架构的问题常常很难重现,也很难追踪。 另外,跟单机系统一样,也有一些系统设计上的 tradeoffs
• CPU 使用效率优化或是 IO 效率优化
• 读取优化或是写入优化 • Throughput 优化或是 Latency 优化
• 资料一致性或是资料可得性