注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

逍遥子 曰:

得失失得 何必患得患失 舍得得舍 不妨不舍不得

 
 
 

日志

 
 

[原] 如何快速开发一个支持高效、高并发的分布式ID生成器(二)  

2016-04-09 10:42:55|  分类: 分布式-服务器相 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

前面介绍的是利用redis快速搭建一个ID生成器服务,这种方式搭建的ID生成器服务还存在一些缺陷:

(1)    与应用耦合高,没有对外屏蔽掉内部实现细节,例如redis,用户完全不需要知道ID生成器使用什么产生的ID;

(2)    扩展性差,在项目规模较大时,ID的应用会非常多,如果用一组redis无法满足需求时,不方面扩展;

下面将对上述的ID生成器进一步改进,改进方式为通过thrift将redis封装起来,形成一个独立的ID生成器服务,对外以rpc方式提供ID服务,采用thrift框架可以带来如下好处:

(1)    高性能,thrift框架提供多种服务运行方式,能提供高性能的rpc服务;

(2)    多语言支持,thrift框架对多语言支持非常好,而ID生成器本身作为一个基础的、通用性的服务,它需要为各种应用场景都能提供ID服务,因此多语言的支持对其提供服务非常有帮助。

修改之后的框架如下所示:

 [原] 如何快速开发一个支持高效、高并发的分布式ID生成器(二) - 逍遥子 - 逍遥子 曰:

 

上述架构中,IdGen是通过thrift框架开发的ID生成器服务,为无状态服务,可根据需要水平扩展,它内部管理多个redis主从对,每个redis主从对都按照:主Redis提供服务不持久化,从Redis不提供服务但持久化的方式;IdGen内部屏蔽对redis的操作,并完成对redis主从对的管理,它可根据ID的类型,将不同的Id类型放在不同的redis主从对中,这样在项目规模扩大,ID的类型和请求量增加时,访问压力将会被分散到各个Redis分组中;

另外IdGen需要能动态管理数据源Redis的分组,即满足两个条件:

(1)    动态添加新的ID类型;

(2)    动态添加Redis分组;

要实现上述两种要求的方法非常多,最简单的可以采用数据库来存储Redis分组信息和ID类型与Redis分组的对应关系,如下图所示:

[原] 如何快速开发一个支持高效、高并发的分布式ID生成器(二) - 逍遥子 - 逍遥子 曰:

 

在该框架中,提供如下方式的RPC接口服务:

long getId(String idType)

调用方只需提供他需要的ID类型,ID生成器即可为之产生一个对应类型的ID。

  评论这张
 
阅读(195)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017