分佈式的唯一ID生成服務

     SNService是一款基於分佈式的唯一ID生成服務,主要用於提供大數量業務數據建立唯一ID的需要;服務提供最低10K/s的唯一ID請求處理.如果你部署服務的CPU資源達到4核的情況下那該服務最低可以提供100K/s的請求處理能力.服務支持部署到Linux mono 3.2.3和Windows .Net4.0

ID生成規則

     服務生成的ID是64位無符號長整型,其中48位是現有時間和2013年1月1日時間差的毫秒數,另外16位則是針對當前毫秒的遞增值.即每毫秒支持6萬多個唯一ID生成,每秒則支持多達6千萬個ID生成.這個數量級足可以滿足大部份的需要.

      132535319.jpg

     爲了保證所有服務器上的業務數據獲取得全局唯一ID,所以通過服務的方式提供.如果考慮更大的獲取量和服務的可靠性,可以部署兩臺ID生成服務,分別生成序列爲奇和偶數,應用端通過虛擬IP指向即可.

       132537102.jpg

     可以通過修改以下配置項來確定遞增值的起始和步增長值

<sNServiceSection xmlns="urn:IKende.com.SNService">
    <sequence start="1" step="1"/>
  </sNServiceSection>

     如果生成規則不滿足需要,則可以自行修改ID生成方式

部署服務

     服務是通過TCP的方式提供訪問,分別提供Console和windows service兩種方式來加載服務.可以通過修改以下配置來改動服務監聽的IP和端口,默認情況下是監聽本機所有IP和8088端口.

<serverSection xmlns="urn:Beetle.Express">
    <listens>
      <add name="SN_SERVER" type="TCP" port="8088" handler="IKende.com.SNService.SNServer,IKende.com.SNService" syncSend="true" useReceiveQueue="false" useSendQueue="false"/>
    </listens>
  </serverSection>

     服務的執行情況可以通過程序或服務目錄下的log目錄查看日誌.

     [注意:由於ID是通過時間截來處理,所以在部署前需要同步一下網絡時間,保證以後即使服務重啓也不會導致ID生成上出現問題.]

調用

     服務通過TCP方式提供,所以只需要TCP接入到相關服務併發送GETSN指令,服務即可響應BYTE[8]ulong的數據.如果是使用.NET訪問那可以引用IKende.com.SNService.dll.,通過以下代碼來獲取唯一ID.

private static IKende.com.SNService.Api.SNClient client=new Api.SNClient("127.0.0.1", 8088);
ulong value = client.GetValue();

下載服務源代碼


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章