分布式唯一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生成.這個數量級足可以滿足大部份的需要.

        

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

        

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

<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();

下載服務源代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM