分布式全局ID生成器作为分布式架构中重要的组成部分,在高并发场景下承载着分担数据库写瓶颈的压力。
之前实现过PHP+Swoole版,性能和稳定性在生产环境下运行良好。这次使用Java进行重写,目前测试情况表现还不错,下面我简要介绍下java版的项目情况。
 
技术架构:Netty + Zookeeper + Redis Protocol
  • Netty:是一个基于NIO的客户、服务端编程框架(类似于swoole)。使用netty作为服务端应用接收客户端请求,对Redis协议数据进行编解码,响应redis客户端请求。
  • Zookeeper:主要两个作用。一是生成器服务每个节点需预先定义唯一serverId,并注册到zk,由zk统一管理集群节点连接状态;二是自增序列sequenceId可交由zk管理,集群中的自增序列在毫秒级内共用一个值,不过这涉及到共享锁的资源竞争和网络传输,性能很差,默认没开启,下面有具体的压测情况。
 
下面是通过redis-benchmark压测工具在本机对php版、java版、及原生redis-server进行压测的QPS数据(使用默认并发50)
 
PHP版测试命令:redis-benchmark -h 127.0.0.1 -p 9501 -t get -n 200000 -q
 
Java版测试命令:redis-benchmark -h 127.0.0.1 -p 3308 -t get -n 200000 -q
 
自增序列sequenceId交由zk管理后性能堪忧~测试命令:redis-benchmark -h 127.0.0.1 -p 9300 -t get -n 2000 -q
 
原生redis-server测试命令:redis-benchmark -h 127.0.0.1 -p 6379 -t get -n 200000 -q
从压测数据上看,Java版相对于PHP版有接近一倍的性能提升,已经接近c语言编写的redis server。
仅支持get命令,key格式固定如下:
 
172.19.19.233:9303> get id.1
4612394007866114075
172.19.19.233:9303> get id.1.3
4612394014021255195,4612394014021271579,4612394014021287963
172.19.19.233:9303> get parse.4612393968093626395
[1, 2018:11:16 15:15:02.707, 0, 1, 11]
 
命令解释:
get id.1 获取单个id,1为业务id,支持0-1023
get id.1.3 一次性获取3个id,1为业务id
get parse.4612393968093626395 解析id信息,反解出时间戳,业务id,集群节点id,自增id信息 
 
敲其它命令会返回error信息。

Java版分布式ID生成器技术介绍的更多相关文章

  1. 分布式ID生成器的解决方案总结

    在互联网的业务系统中,涉及到各种各样的ID,如在支付系统中就会有支付ID.退款ID等.那一般生成ID都有哪些解决方案呢?特别是在复杂的分布式系统业务场景中,我们应该采用哪种适合自己的解决方案是十分重要 ...

  2. 来吧,自己动手撸一个分布式ID生成器组件

    在经过了众多轮的面试之后,小林终于进入到了一家互联网公司的基础架构组,小林目前在公司有使用到架构组研究到分布式id生成器,前一阵子大概看了下其内部的实现,发现还是存在一些架构设计不合理之处.但是又由于 ...

  3. CosId 1.1.8 发布,通用、灵活、高性能的分布式 ID 生成器

    CosId 通用.灵活.高性能的分布式 ID 生成器 介绍 CosId 旨在提供通用.灵活.高性能的分布式 ID 生成器. 目前提供了三类 ID 生成器: SnowflakeId : 单机 TPS 性 ...

  4. 分布式ID生成器(CosId)的设计与实现

    分布式ID生成器(CosId)设计与实现 CosId 简介 CosId 旨在提供通用.灵活.高性能的分布式 ID 生成器. 目前提供了俩类 ID 生成器: SnowflakeId : 单机 TPS 性 ...

  5. 常用的分布式ID生成器

    为何需要分布式ID生成器 **本人博客网站 **IT小神 www.itxiaoshen.com **拿我们系统常用Mysql数据库来说,在之前的单体架构基本是单库结构,每个业务表的ID一般从1增,通过 ...

  6. c#分布式ID生成器

    c#分布式ID生成器   简介 这个是根据twitter的snowflake来写的.这里有中文的介绍. 如上图所示,一个64位ID,除了最左边的符号位不用(固定为0,以保证生成的ID都是正数),还剩余 ...

  7. 分布式ID生成器PHP+Swoole实现(上) - 实现原理

    1.发号器介绍 什么是发号器? 全局唯一ID生成器,主要用于分库分表唯一ID,分布式系统数据的唯一标识. 是否需要发号器? 1)是否需要全局唯一. 分布式系统应该不受单点递增ID限制,中心式的会涉及到 ...

  8. CosId 通用、灵活、高性能的分布式 ID 生成器

    CosId 通用.灵活.高性能的分布式 ID 生成器 介绍 CosId 旨在提供通用.灵活.高性能的分布式系统 ID 生成器. 目前提供了俩大类 ID 生成器:SnowflakeId (单机 TPS ...

  9. CosId 1.0.0 发布,通用、灵活、高性能的分布式 ID 生成器

    CosId 通用.灵活.高性能的分布式 ID 生成器 介绍 CosId 旨在提供通用.灵活.高性能的分布式系统 ID 生成器. 目前提供了俩大类 ID 生成器:SnowflakeId (单机 TPS ...

随机推荐

  1. JavaScript编程题(含腾讯2016校招题)

    作者:ManfredHu 链接:http://www.manfredhu.com/2016/04/02/15-veryGoodForUsing/ 声明:版权所有,转载请保留本段信息,否则请不要转载 几 ...

  2. Docker容器的原理与实践 (下)

    欢迎访问网易云社区,了解更多网易技术产品运营经验. Docker原理分析 Docker架构 镜像原理 镜像是一个只读的容器模板,含有启动docker容器所需的文件系统结构及内容Docker以镜像和在镜 ...

  3. 从DevOps到Cloud Native,应用上云姿势全解锁

    本文由  网易云发布. 作者:林帆 序文 伴随着IaaS.PaaS等云端基础设施技术的成熟,“应用上云”成为许多企业软件部门的心头大事.通过把传统软件系统搬到云上,一方面可以让业务方获得更多的资源灵活 ...

  4. Organising the Organisation(uva10766)(生成树计数)

    Input Output Sample Input 5 5 2 3 1 3 4 4 5 1 4 5 3 4 1 1 1 4 3 0 2 Sample Output 3 8 3 题意: 有一张图上有\( ...

  5. Atcoder Tenka1 Programmer Contest 2019题解

    传送门 \(C\ Stones\) 最后肯定形如左边一段白+右边一段黑,枚举一下中间的断点,预处理一下前缀和就可以了 int main(){ // freopen("testdata.in& ...

  6. Core Data Tutorial for IOS: Getting Started

    http://www.raywenderlich.com/934/core-data-tutorial-for-ios-getting-started

  7. 转载:在spring中嵌入activemq

    转载:http://www.dev26.com/blog/article/137 web开发站中的邮件发送使用了activemq我这是从网上找的进行了一些修改,记录下来,为了避免发送邮件时程序对用户操 ...

  8. Requests库入门实例

    爬虫入门5个实例 实例1:京东商品页面的爬取 import requests def getHTMLText(url): try: r = requests.get(url,timeout = 30) ...

  9. 【LeetCode】 617. 合并二叉树

    题目 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否 ...

  10. SVN常用操作介绍

    SVN:全称subversion,开源代码版本控制系统,也就是常说的“版本控制工具”,实现代码.文档等的历史版本保存.共享和权限管理.常用于软件开发项目中,开发将最新的代码放到svn,其他同事可在这个 ...