如果系統有使用資料庫,最常想到的全域性唯一id是利用資料庫的自增字段來保證唯一性。這種方法生成的長度不同,並且與資料為互動,效能較差。
其它兩個常用的兩個演算法是: uuid與snowflake
演算法1,2可以保證唯一性;
演算法3、5除了利用的hash演算法不同外,其它都相同,可以保證區域性唯一,有極小的概率重複,可忽略不計。
演算法4,使用偽隨機演算法,不建議使用
嵌入到業務**中,不涉及服務呼叫效能更高,但機器id數有限制,過多會有重複
作為服務提供,可以通過服務數,來降低機器id數,可以用多餘的位表示其它資訊。
全域性唯一
單調遞增
包含業務含義id
依賴於系統的時間戳,一旦系統時間不准,就有可能生成重複的 id,要防止系統時間回跳。
nosql區別於關係型資料庫系統,不使用sql查詢語言,提供優秀的橫向擴充套件能力和讀寫效能,非常適合於高併發大資料的系統。
常見的:redis, leveldb這樣的kv儲存;hbase、cassandra列式儲存資料庫(關聯式資料庫是行式);mongodb、couchdb文件型資料庫。
nosql雖然有很多優點,但它不能完全替換關係型資料庫,每種都有其適應的場景,可以與關系統資料庫做到互補。
在平常的開發過程中,對於io的效能的優化,較常想到的方式就是增加快取。
從概念上講,快取是一種儲存資料的元件,可以讓對資料的請求更快地返回。由於裝置之間讀寫效能差距較大,能過將資料放入讀寫效能較高的裝置中,提高讀寫效能。
靜態快取:從字面意思就是對靜態資料的快取,常見的靜態頁面快取就屬於這類,一般位於負載均衡層。
分布式快取:支援動態資料,能過在服務前部署分布式快取來提高服務效能,一般位於應用層與資料層之間。
本地快取,位於應用層,在應用中直接實現。
高併發系統設計
高併發系統主要是為了解決在有限的資源下解決最核心的問題,並發現以後可能會出現的問題。高併發原則一般遵守如下幾個設計原則 1.無狀態 指的是應用在處理業務邏輯期間盡量減少鎖的使用 降低網路通訊延遲 無資料持久化操作等,以此來增加應用系統的效能。2.拆分 大而全的系統,可根據實際的訪問量來拆分系統,來實...
設計乙個高併發系統
公升級過程為 最初系統 新增負載均衡 資料庫分庫分表 讀寫分離 快取集群 訊息中介軟體集群 假設系統機器是4核8g,資料庫伺服器是16核32g。日活使用者1w,系統層面每秒10次請求,資料庫層每秒30次請求。使用者量增長了50倍,日活使用者50萬,高峰期對系統每秒請求500 s,對資料庫的每秒請求1...
高併發系統設計 限流
前面學習過的熔斷和降級都是通過暫時關閉某些非核心服務或者元件來保護核心系統的可用性。但是並不是所有的場景下都可以使用熔斷降級的策略,例如當核心服務產生比較大的影響時,總不能把核心服務進行熔斷與降級,些時一般採用限流方案來進行保護。限流指的是通過限制到達系統的併發請求數量,保證系統能夠正常響應部分使用...