@cholerae 大神已經做了詳細回答,http://zenlife.tk/interview-for-distributed-storage.md
寫于幾年前,內容有點稚嫩,WAL辨識度很高, 其他問題一般.
CAP不會再問了,專業的存儲文獻中很少(幾乎不)提及CAP或PACELC, 這個詞用于市場和銷售,用于和業務系統對接. 反而是,面試官問CAP問題,候選人可以由此斷定面試官沒有做過存儲builtin研發,應聘團隊可能不符合預期.
現在加一個問題,failstop的故障基本假設和處理原則是什么? 這個問題比較重要,企業可信環境(不發生或者避免發生拜占庭故障)的分布式存儲構建一定要滿足的基本原則,不符合預期的處理,就是設計上的缺陷或bug. 大家可以試著分析,共識算法,復制協議,集群的上下線管理,元數據的HA是如何實現failstop的.
設計一種詰問(打破砂鍋問到底)的面試套路.
1. 用cas實現spinlock.
2. 實現單機kv存儲系統, 多節點共享kv存儲服務, 怎么解決external consistency的問題?
kv存儲N=0
用戶A和B操作kv存儲系統按照下面時序:
1.用戶A執行操作: INC N;
2.用戶A通知用戶B執行操作;
3.用戶B執行操作: if (N % 2 == 0) {N*=2;} else {N +=3;}怎么保證結果符合預期呢? 在網絡傳輸影響操作到達次序的情況下, 怎么保證B后于A完成操作.如果這個過程插入了C, 又如何做呢?
3. 鎖實現和版本控制用那個呢?
4. kv系統數據要持久化, 怎么保證在供電故障的情況下, 依然不丟數據.
5. flush/fsync/WAL/磁盤和ssd的順序寫
6. 單機kv存儲系統, 從掉電到系統重啟這段時間, 不可用, 如何保證可用性呢?
7. 數據復制, 日志復制, 有哪些實現方法呢?
8. 做主從復制, 采用pull和push操作, 那個好呢?
9. 如何保證多副本的一致性? RSM
10. 分布式共識算法: zab, paxos, raft.
11. commit語意是什么呢?
12. 單機或者單個leader的qps/tps較低, 如何擴大十倍?
13. 怎么做partitioning和replicating呢?
14. 存儲或者訪問熱點問題, 應該怎么搞?
15. CAP原理
16. 元數據怎么管理?
17. membership怎么管理?
18. 暫時性故障和永久性故障有哪些呢?
19. failover和data replication怎么搞呢?
20. 磁盤的年故障率預估是多少?
21. kv系統存儲小王, 小李, 小張三個人的賬戶余額信息, 數據分別在不同的節點上, 怎么解決小王向小李, 小李向小張同時轉款的問題呢?