UUID 生成服务器搭建

  1. UUID

    UUID 通用唯一识别ID, 由32位16进制数字组成, 共128 bit, 形式如下。

    xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

    由于可靠的长度+可靠算法,UUID能保持1M/s生成速度使用100亿年,UUID生成规则分为4个版本,很多语言都提供了官方或者半官方库,如golang golang.google.com/uuid PHP uuid/guuid。

然而在实际使用中由于位数过长大部分语言只能使用string来表示uuid,使用过程有很多不便,所以我们经常采用一些顺序ID生成算法来替代uuid,其中twitter开源的snowflake就是其中的被经常使用的算法,算法本身很简单,这里不展开希望了解实现过程的话可以参阅 [github](https://github.com/hanskorg/snowflake-rust/blob/master/src/lib.rs)。

本服务就是SF算法的一个实现,uuid格式为uint64,内网部署接口ns级响应,1s中最多生成1000,000个ID

example
curl https://uuid.icool.io/api
  1. 环境准备

    本安装过程以centos为例

     
    # 安装docker
    yum install -y docker docker-compose
    # 启动docker
    service docker start
    # 创建依赖目录
    mkdir -y /data/uuid-server/conf
    mkdir -y /data/uuid-server/sock
  2. 基于docker + nginx 的环境搭建

    本安装过程假设本地存在nginx,且打算复用本地nginx服务作为uuid-server的服务网关

    1. 配置docker-comose.yml
      version: '3'
      services:
      uuid-server:
      image: hansk887/uuid-server:v0.0.5
      volumes:
      - /data/uuid-server/sock:/tmp/uuid-server
      - /data/uuid-server/conf:/etc/uuid
      environment:
      - SOCK=/tmp/uuid-server/unix.sock
      - ZID=1 # 集群Zone
    2. 配置server-id, 单实例本操作可忽略
          echo 1 > /data/uuid-sever/conf/server-id
      3. 启动服务容器
      ```bash
      docker-compose start
      #运行docker ps 检查服务启动成功
      docker ps
      # 检查unix socket套接字文件生成成功
      ls /data/uuid-server/sock/unix.sock
    3. 配置Nginx SCGI转发
      server {
      listen 80;
      location /uuid {
      include scgi_params;
      scgi_pass unix:/data/uuid-server/sock/unix.sock;
      }
      }
    4. 访问测试
      http://localhost/uuid, 正常结果可参照 https://uuid.icool.io
  3. docker 独立运行 的环境搭建
    1. 本服务镜像包涵独立nginx,编排配置如下

      version: '3'
      services:
      uuid-server:
      image: hansk887/uuid-server:v0.0.5
      volumes:
      - sock:/tmp/uuid-server
      - /data/uuid-server/conf:/etc/uuid
      environment:
      - SOCK=/tmp/uuid-server/unix.sock
      - ZID=1
      nginx:
      image: nginx:latest
      ports:
      - "81:80"
      volumes:
      - /data/uuid-server/conf/nginx.d:/etc/nginx/conf.d
      - sock:/tmp/uuid-server
      volumes:
      sock: {}
    2. 创建配置文件
      +– conf
      | +– nginx.conf
      | +– server-id
      +– docker-compose.yml
      nginx.conf 配置参照如下:

      user  nginx;
      worker_processes 2;

      error_log /var/log/nginx/error.log warn;
      pid /var/run/nginx.pid;

      events {
      worker_connections 4096;
      }

      http {
      include /etc/nginx/mime.types;
      default_type application/octet-stream;

      log_format main '$remote_addr - $remote_user [$time_local] "$request" '
      '$status $body_bytes_sent "$http_referer" '
      '"$http_user_agent" "$http_x_forwarded_for"';

      access_log /var/log/nginx/access.log main;

      sendfile on;
      #tcp_nopush on;

      keepalive_timeout 65;

      #gzip on;

      server {
      listen 80;
      location /uuid {
      include scgi_params;
      scgi_pass unix:/data/uuid-server/sock/unix.sock;
      }
      }
      }
    3. 启动服务容器

    docker-compose start
    #运行docker ps 检查服务启动成功
    docker ps
    # 检查unix socket套接字文件生成成功
    ls /data/uuid-server/sock/unix.sock