分散式唯一ID生成服務

smark發表於2013-12-02

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

下載服務原始碼

相關文章