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
1
curl https://uuid.icool.io/api
  1. 环境准备

    本安装过程以centos为例

     
    1
    2
    3
    4
    5
    6
    7
    # 安装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
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      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, 单实例本操作可忽略
      1
      2
      3
      4
      5
      6
      7
      8
          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转发
      1
      2
      3
      4
      5
      6
      7
      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,编排配置如下
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    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: {}
    1. 创建配置文件
      ±- conf
      | ±- nginx.conf
      | ±- server-id
      ±- docker-compose.yml
      nginx.conf 配置参照如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    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;
    }
    }
    }
    1. 启动服务容器
    1
    2
    3
    4
    5
    docker-compose start
    #运行docker ps 检查服务启动成功
    docker ps
    # 检查unix socket套接字文件生成成功
    ls /data/uuid-server/sock/unix.sock

评论