將 Scalabilty 的需求分成兩種:
• Data Scalability: 單臺機器的容量不足以 (經濟的) 承載所有資料,所以需要分散。
如: NoSQL
• Computing Scalability: 單臺機器的運算能力不足以 (經濟的) 及時完成運算,所以需 要分散。
如:科學運算。 在之後幾天,我會試着就這兩種需求來解析其中會遇到的問題與常見解法。
不管是哪一種需求,在決定採用分散式架構時,就幾乎註定要接受一些犧牲:
• 犧牲效率:網路延遲與節點間的協調,都會降低執行效率。
• 犧牲 AP 彈性:有些在單機上能執行的運算,無法輕易在分散式環境中完成。
• 犧牲維護維運能力:分散式架構的問題常常很難重現,也很難追蹤。 另外,跟單機系統一樣,也有一些系統設計上的 tradeoffs
• CPU 使用效率優化或是 IO 效率優化
• 讀取優化或是寫入優化 • Throughput 優化或是 Latency 優化
• 資料一致性或是資料可得性