设为首页 收藏本站
查看: 927|回复: 0

[经验分享] 转:redis实践经验分享

[复制链接]

尚未签到

发表于 2015-7-23 08:26:35 | 显示全部楼层 |阅读模式
  为了保证查询的速度,他们用redis来保存用户数据的索引信息,下面是它们使用redis的方式及扩展方法:
  
1、一共是16台redis数据服务器,每台服务器是96G内存,这样一共是1.3T的内存容量
  
2、每台服务器有16个核,每台机器上运行了160个redis实例(因为一个redis实例最多只能占用一个核,所以需要跑多个实例来充分利用机器的资源)
  
3、同一份数据会复制到另外两台机器上,采用redis自带的数据复制机制对数据进行复制。写到主redis实例上,轮询读取写实例和另外两个读实例
  
4、另外有几台机器上面也运行redis实例,以保存实例IP地址、实例端口、负责的数据位置、健康状态信息。它们管这个叫目录服务。也是采用redis的数据复制机制复制目录信息到多个目录redis实例上。
  
5、目录服务大部分是读取,修改的情况比较少,所以读写比例非常高。应用程序采取轮询的方式轮流访问主目录实例和多个辅目录实例
  
6、当应用程序发现一个实例没有响应,它会去修改该实例对应的目录信息,将健康状态标专为离线,这样别的应用和实例都不会再去访问出问题的实例
  
7、当数据分片对应的辅redis实例出错离线时,该分片对应的数据仍然能够正常读取,只是冗余性下降了
  
8、当数据分片对应的主redis实例出错离线时,该分片对应的数据只能提供读取服务,数据不能再被修改
  
9、运行了一个特殊的代理进程,它不断查询目录节点,当发现有一个分片的主redis实例离线时,由它来推动从剩下的辅redis实例中选举一个做新的主redis实例,并配置别的实例是它的辅redis实例,然后再清掉分片对应的目录信息,从只读模式中恢复成读写模式。这个过程还没有做到完全的自动化,他们有计划做到完全自动地恢复
  
  10、所有redis数据服务器用单独的网卡接到专用的网络中,里面有网络存储,这样所有redis实例会定时将数据快照存到网络存储上
  
  11、因为redis保存数据快照需要额外的内存,具体数据跟写的比例和io速度有关系,这样如果一台redis数据服务器上的所有实例同时都写快照,这样会因内存的占用而影响服务。为了避免这个问题,他们的作法是在每台redis数据服务器运行一个单独的进程,轮流访问上面的每个实例,调用save命令来保存快照
  
12、采用一致性哈希算法按用户邮件名,将用户索引数据分片到对应的redis实例上。具体是用sha1算法将邮箱名64位无符号整数空间内按实例数平均分配64位空间,每个实例占用相同的区间大小。用sha1计算用户邮箱对应的数值,按顺时针方面寻找最近的实例,由该实例负责对应的用户
DSC0000.png
DSC0001.png
  13、他们对比多个哈希函数,最后选定sha1,因为它能均匀分布用户到多个redis实例上
  
14、当增加新的实例时,它会占据在两个实例的中间位置。但不是从老的实例中搬移数据到新的节点上。当一个实例没有对应的数据时,会按顺时针方向转发请求到下一个实例
DSC0002.png
  15、当一个实例内存已经用满,它也会按顺时针方向转发请求给下一个实例
DSC0003.png
  16、在应用端会缓存用户对应的实例信息,这样避免每次都进行上面的定位和转发步骤
  
17、没有使用libredis(采用了ketama)原因是自己写的方式比较好一步一步地跟踪,同时能解决redis环境下的特定的问题
  
  18、一致性哈希采用C++实现,另外用了一些tcl脚本。开源了Redis C++客户端库, 计划把一致性哈希实现也发到这个开源客户端中

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-89608-1-1.html 上篇帖子: redis 在多个实例之间如何拆分数据 下篇帖子: redis研究记录
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表