每個第一次構建分布式系統的人都可能會做出8個錯誤的對網絡的假設:
翻譯過來就是:
1、網絡是穩定可靠的
2、沒有延遲
3、帶寬無限
4、網絡是安全的
5、網絡拓撲不會改變
6、只有一個管理員
7、傳輸成本為0
8、網絡是均勻的,現實是各種網絡環境都有。
更多錯誤假設:
1、網絡IO跟磁盤IO一樣
網絡IO比之磁盤IO更不可預測、不可靠和不可控,網絡IO包括了軟硬件兩方面的限制。
2、你與對端能夠同步
你無法假設對端是否關閉、接收到數據,這些通常需要你在應用協議里同步。
3、所有的錯誤都可以被檢測到。
很多錯誤例如對端關閉引起的讀阻塞都需要應用層來處理。
4、資源無限可用。
5、應用可以無限等待一個遠程服務
任何大規模的應用都需要慎重設計超時、過期策略
6、遠程服務總能響應及時。
7、只有單點失敗
8、只有一個資源分配器
9、只有一個時間,也就是全局時間的問題。
1. | The network is reliable |
2. | Latency is zero |
3. | Bandwidth is infinite |
4. | The network is secure |
5. | Topology doesn't change |
6. | There is one administrator |
7. | Transport cost is zero |
8. | The network is homogeneous |
翻譯過來就是:
1、網絡是穩定可靠的
2、沒有延遲
3、帶寬無限
4、網絡是安全的
5、網絡拓撲不會改變
6、只有一個管理員
7、傳輸成本為0
8、網絡是均勻的,現實是各種網絡環境都有。
更多錯誤假設:
1、網絡IO跟磁盤IO一樣
網絡IO比之磁盤IO更不可預測、不可靠和不可控,網絡IO包括了軟硬件兩方面的限制。
2、你與對端能夠同步
你無法假設對端是否關閉、接收到數據,這些通常需要你在應用協議里同步。
3、所有的錯誤都可以被檢測到。
很多錯誤例如對端關閉引起的讀阻塞都需要應用層來處理。
4、資源無限可用。
5、應用可以無限等待一個遠程服務
任何大規模的應用都需要慎重設計超時、過期策略
6、遠程服務總能響應及時。
7、只有單點失敗
8、只有一個資源分配器
9、只有一個時間,也就是全局時間的問題。