一口氣不能吃成胖子,難事需要化整為零。生活中的這個簡單道理在軟體架構或模組設計也常有體現:
redis通過拉鍊法來解決hash碰撞衝突。在redis應用中,由於資料的增加,同乙個hash bucket裡碰撞衝突的概率增加,造成效能成倍下降。這時候就需要增大hash空間size來,減少衝突,即為rehash。但rehash過程中,redis不能停止服務,這時候問題來了?如何在rehash過程中保證增刪改查操作仍然繼續進行。
redis設計者採用了很巧妙的設計,定義的hash_bucket_index = hash_key & size_mask裡hashkey不變,size是以2的冪次來進行。這樣對於每個hashbucket只是一分為二的簡單操作,不會耗時太長,而hash bucket之間不會相互影響。採用rehash_index變數來記錄rehash進度。這樣,定義兩個hash table, ht[0]作為正常,和ht[1]作為遷移備用。rehash過程中,ht[0]資料需要遷移到ht[1]。因為遷移是以bucket為單位執行原子操作,所以給定單個bucket, 不存在腦裂問題。對於乙個請求,如果在ht[0]中 hash_bucket_index < rehash_index,則用ht[1]中處理;否則用ht[0]處理。遷移完成後,再互換ht[0]和ht[1]位置,並清除ht[1]記憶體。
乙個load balancer後有多個back end server提供服務,這是負載均衡的典型配置。公升級過程中需要保證服務對外不能中斷,這時候也才用漸進式部署的概念。把back end server分成n批,分批部署。對於每一批server,先deregister, 然後公升級,公升級完了之後重新register。這樣始終用(n-1)/n的容量可使用,公升級過程中只有1/n的效能下降。
vue是乙個漸進式的框架,如何理解「漸進式」
場景1 如果你的技術團隊技術選型比較保守,沒有新技術的使用場景,比如讓你去維護乙個管理後台。管理後台,日常就是提交各種表單了,這部分現有的方案,比如form表單提交或者jquery收集資訊ajax提交。這時候你可以把vue 當成乙個js庫來使用,就用來收集form表單,和表單驗證。場景5 年終獎,拿...
對系統穩定性的一些理解
對系統穩定性的一些理解 在數字訊號處理中,系統的穩定性是乙個很重要的問題,比如說在濾波器的設計中,都要求系統必須穩定,否則是無法使用的。那麼,如何判斷系統是否穩定呢?從定義上說,如果輸入有界,則輸出必定有界的系統是穩定的。從數學上可以推導出,因果系統衝擊響應z變換的收斂域包含單位圓的系統是穩定的。從...
阿里雲馬勁 保證雲產品持續擁有穩定性的實踐和思考
對所有的技術人員來說,業務可靠性提公升是乙個系統工程,涉及網路管理 idc管理 伺服器管理 交付管理 變更管理 故障管理 監控管理 預案管理 根因分析 容量規劃 容災演練 標準化建設 整合測試 泛操作管理 許可權管理 資料安全管理等方方面面,隨著先進技術的應用 業務雲化 微服務化等,業務架構變得更加...