分佈式 環境的 sequence 處理方式

    咱們都很清楚單機單庫中的sequence處理,像oracle就直接提供sequence的支持,在mysql,則有 auto increament 字段的支持,咱們很方便的就是先一個自增的不重複的id序列,但在分庫分表後,sequence 就遇到了一點麻煩。
mysql

    sequence 在多機的狀況下,咱們能夠從惟一性、連續性考慮解決問題。
sql

    若是不考慮連續性,uuid 就是一個能保證惟一性的生成方式,或者根據本身的業務狀況使用各類種子(例如,ip,mac,機器名,時間,本機計數器等因素)來生產惟一的id。併發

    在考慮惟一性和連續性的狀況下,咱們能夠把全部id都集中在一個地方進行管理,即提供一個統一id生成器服務,每臺機器都從這裏獲取id,可是,這個服務會面臨幾個問題:oracle

    1. 性能問題,每次都須要跟服務打交道,獲取id。
性能

    2. 生成器穩定性問題,id生成器服務成爲一個關鍵的集羣穩定性因素
ui

    3. 存儲問題,底層存儲須要的空間比較大,須要根據不一樣類型進行對應的容災處理。
ip

 關於存儲問題,能夠選擇同一存儲,控制併發,也能夠將id生成器的連續id分段,分別分配給各個機器,各個機器上有本身的id生成器(根據分配到的id段生產id),各個機器的id生成器須要跟id生成服務保持心跳,確保id段不夠用時,能分配到下一段可用的id段,以適應業務的需求。集羣

相關文章
相關標籤/搜索