idgo 基于 MySQL 的 ID 生成器 idgo

blov • 3614 次点击    
这是一个分享于 的项目,其中的信息可能已经有所发展或是发生改变。
idgo是一个利用MySQL批量生成ID的ID生成器, 主要有以下特点: * 每次通过事务批量取ID,性能较高,且不会对MySQL造成压力. * 当ID生成器服务崩溃后,可以继续生成有效ID,避免了ID回绕的风险. 业界已经有利于MySQL生成ID的方案,都是通过: <pre class="brush:sql;toolbar: true; auto-links: false;">REPLACE INTO Tickets64 (stub) VALUES (&#39;a&#39;); SELECT LAST_INSERT_ID();</pre> 这种方式生成ID的弊端就是每生成一个ID都需要查询一下MySQL,当ID生成过快时会对MySQL造成很大的压力. 这正是我写这个lib库的原因. ### idgo服务正确性和高可用保障措施 #### 1. 压力测试结果 压测环境 类别 名称 OS CentOS release 6.4 CPU Common KVM CPU @ 2.13GHz RAM 2GB DISK 50GB Mysql 5.1.73 本地mac连接远程该MySQL实例压测ID生成服务。 每秒中可以生成20多万个ID。性能方面完全不会有瓶颈。 #### 2.ID生成正确性验证 模拟4个进程(cmd/example.go)以每秒生成100个ID的频率并发向MySQL IDGEN服务申请ID,并将生成的ID写入MySQL。 测试16小时后,生成330万个ID,未发现有重复ID。 #### 3.ID生成服务宕机后的恢复方案 当idgo服务意外宕机后,可以切从库,然后将idgo对应的key加上适当的偏移量。 #### 4. 使用方法 参考cmd/example.go文件使用, 用起来很简单. :) 编译并运行example.go <pre class="brush:shell;toolbar: true; auto-links: false;">. ./dev.sh make ./bin/cmd</pre>
授权协议:
MIT
开发语言:
Google Go 查看源码»
操作系统:
跨平台
3614 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传