分布式唯一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();

下载服务源代码

posted @ 2013-12-02 10:51  beetlex  阅读(10004)  评论(12编辑  收藏  举报