unicorn 是一个分布式uuid生成器, 具有以下特性:
-
最高1s内可以并发生成2^1024个不重复的id
-
核心组件采用了CAS无锁编程, 性能更高
-
部署简单, 无其他依赖
使用配置文件
etcd:
# etcd 集群节点
cluster:
- "192.168.10.10:2379"
- "192.168.10.11:2379"
# 开启tls连接
enableTls: false
# 当开启tls连接时, 可以设置该值为true, 可以不配置证书文件
insecure: false
# 开启客户端认证
clientAuth: false
# 如果clientAuth 是true, 需要配置ca证书路径
caFile: ""
# 如果开启了客户端认证或者开启了tls, 需要配置cert文件路径
certFile: ""
# 如果开启了客户端认证或者开启了tls, 需要配置key文件路径
keyFile: ""
# etcd客户端连接超时时间, 单位是秒
timeout: 5
# 定期同步时间戳到etcd, 单位是秒
report: 3
# 同步时间戳到本地文件路径
localReportFile: "unicorn-report.txt"
# 定期同步时间戳到本地文件, 单位是秒
localReport: 60
id:
# 起始时间戳, 要比项目启动时间小
epoch: 1539660973223
# 使用机器id获取方式, 0: 使用手动配置的id, 1: 通过ip地址向etcd集群获取
machineIdType: 0
# 手动配置的机器id, 当machineIdType = 0 是,需要配置它
machineId: 1
# 向etcd集群获取id的ip地址
machineIp: "127.0.0.1"
# id生成类型, 0: 秒级时间戳 1: 毫秒级时间戳
idType: 1
# 版本号, 可选值0和1, 目前暂未对版本号做出限制,默认使用0,可以根据业务来自行处理
version: 0
http:
# http地址
addr: ":6001"
# 开启https
enableTls: false
# 开启客户端认证
clientAuth: false
# 如果开启了客户端认证,需要配置ca文件路径
caFile: ""
# 如果开启https或客户端认证需要配置cert文件路径
certFile: ""
# 如果开启https或客户端认证需要配置key文件路径
keyFile: ""
grpc:
# grpc 地址
addr: ":6002"
# 开启tls
enableTls: false
# 开启tls 需要配置cert文件路径
certFile: ""
# 开启tls 需要配置key文件路径
keyFile: ""
# 开启tls 需要配置server name
serverName: ""
log:
# 日志输出级别
level: "info|warning|error|debug"
# 日志输出控制: console对应终端, file为文件
output: "console|file"
# 日志文件输出目录, 当output开启file时生效 默认为: /var/log/unicorn
filePath: "./"
# 日志默认格式为 unicorn-2006-01-02.log
# 日志文件前缀 默认为: unicorn
filePrefix: ""
# 日志文件后缀 默认为: .log
fileSuffix: ""
# 是否开启日志分割, 分割方式按天
split: true
使用环境变量 如果不指定配置文件, 也可以使用环境变量
下面是环境变量列表
# etcd
UNICORN_ETCD_CLUSTER # etcd集群 格式为: http://127.0.0.1:2379;http://127.0.0.1:2380;
UNICORN_ETCD_TLS # etcd是否开启tls 格式为: true/false
UNICORN_ETCD_INSECURE # etcd是否跳过配置文件 格式为: true/false
UNICORN_ETCD_CLIENT_AUTH #etcd是否开启客户端认证 格式为: true/false
UNICORN_ETCD_CA_FILE_PATH
UNICORN_ETCD_CERT_FILE_PATH
UNICORN_ETCD_KEY_FILE_PATH
UNICORN_ETCD_TIMEOUT #etcd客户端连接超时时间, 单位是秒
UNICORN_ETCD_REPORT
UNICORN_ETCD_LOCAL_REPORT
UNICORN_ETCD_LOCAL_REPORT_FILE
# grpc
UNICORN_GRPC_ADDR
UNICORN_GRPC_TLS
UNICORN_GRPC_CERT_FILE_PATH
UNICORN_GRPC_KEY_FILE_PATH
UNICORN_GRPC_SERVER_NAME
# http
UNICORN_HTTP_ADDR
UNICORN_HTTP_TLS
UNICORN_HTTP_CLIENT_AUTH
UNICORN_HTTP_CERT_FILE_PATH
UNICORN_HTTP_KEY_FILE_PATH
UNICORN_HTTP_CA_FILE_PATH
# id
UNICORN_EPOCH
UNICORN_MACHINE_ID_TYPE
UNICORN_MACHINE_ID
UNICORN_MACHINE_IP
# log
UNICORN_LOG_LEVEL
UNICORN_LOG_OUTPUT
UNICORN_LOG_FILE_PATH
UNICORN_LOG_FILE_PREFIX
UNICORN_LOG_FILE_SUFFIX
UNICORN_LOG_SPLIT
克隆项目
git clone git@github.com:Waitfantasy/unicorn.git
编译项目
windows用户:
cd cmd
go build -ldflags "-s -w -X \"main.BuildVersion=${COMMIT_HASH}\" -X \"main.BuildDate=$(BUILD_DATE)\"" -o ./bin/unicorn ./cmd
linux用户可以直接使用Makefile文件进行编译
运行项目
# 使用配置文件
unicorn -config path/unicorn.yaml
# 也可以配置好环境变量直接运行
unicorn
克隆项目
git clone git@github.com:Waitfantasy/unicorn.git
编译项目
注意编译到docker中的是二进制文件, 需要单独编译alpine分发版本
make alpine
编译docker镜像
# 进入Dockerfile所在目录, 运行
docker build -t youname/unicorn:latest .
启动docker
如果使用配置文件,无需将配置文件打包进docker, 可以直接使用环境变量
docker run -d -v path/unicorn.yaml:path/unicorn.yaml -e UNICORN_CONF=path/unicorn.yaml -p 6001:6001 -p 6002:6002 --name unicorn unicorn
如果不使用配置文件, 可以在运行容器时指定相关环境变量