UUID 生成服务器搭建
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
环境准备
本安装过程以centos为例
# 安装docker
yum install -y docker docker-compose
# 启动docker
service docker start
# 创建依赖目录
mkdir -y /data/uuid-server/conf
mkdir -y /data/uuid-server/sock基于docker + nginx 的环境搭建
本安装过程假设本地存在nginx,且打算复用本地nginx服务作为uuid-server的服务网关
- 配置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 - 配置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 - 配置Nginx SCGI转发
server {
listen 80;
location /uuid {
include scgi_params;
scgi_pass unix:/data/uuid-server/sock/unix.sock;
}
} - 访问测试
http://localhost/uuid, 正常结果可参照 https://uuid.icool.io
- 配置docker-comose.yml
docker 独立运行 的环境搭建
本服务镜像包涵独立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: {}创建配置文件
+– 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;
}
}
}启动服务容器
docker-compose start
#运行docker ps 检查服务启动成功
docker ps
# 检查unix socket套接字文件生成成功
ls /data/uuid-server/sock/unix.sock