博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tair学习小记
阅读量:6602 次
发布时间:2019-06-24

本文共 2171 字,大约阅读时间需要 7 分钟。

hot3.png

##Tair架构 ![Tair架构][1]

本文只关注Client,ConfigerServer,DataServer三者之间的交互,不关注DataServer的存储引擎

##Client,ConfigServer,DataServer三者之间的交互

  1. 情况1:Client在访问dataserver时,先对自身进行检测,查看是否有缓存的路由表,如果没有,则访问configserver获取路由表并缓存,之后,再去访问dataserver获取数据
  2. 情况2:client访问dataserver获取数据时,会携带路由表,dataserver对路由表的版本进行检测,若版本过旧,则通知client去configserver获取最新的路由表后再来访问
  3. 情况3:client访问dataserver时,若出现超时,则判定访问的dataserver已经宕机,然后主动的去访问configserver获取最新的路由表

##什么情况下dataserver会进行数据迁移?迁移策略? 当dataserver数量增加时或者数量减少时比如宕机,会进行数据迁移

tair 的分布采用的是一致性哈希算法, 对于所有的key, 分到Q个桶中, 桶是负载均衡和数据迁移的基本单位. config server 根据一定的策略把每个桶指派到不同的data server上. 因为数据按照key做hash算法, 所以可以认为每个桶中的数据基本是平衡的. 保证了桶分布的均衡性, 就保证了数据分布的均衡性.

假设有3台机子,有3个桶,初始化的时候路由表信息如下,Tair不允许一台机子上存在相同的桶(为什么?你懂的):<br> 192.168.1.1 桶A 桶B <br> 192.168.1.2 桶B 桶C <br> 192.168.1.3 桶C 桶A <br>

  1. 情况1:当192.168.1.1发生宕机时,configserver会计算哪些桶的备份少了,在这里桶A和桶B只存在一个备份,故需要将桶A的数据从192.168.1.3迁移到192.168.1.2上,桶B的数据从192.168.1.2上迁移到192.168.1.3。
  2. 情况2:当新增加机器192.168.1.4后,configserver会重新根据负载均衡算法,进行数据迁移 当上述迁移完成后,configserver会重新更新路由表的信息,然后通过心跳发给所有的dataserver,所以说dataserver上的路由表信息永远都是最新的,且一致。

##当dataserver正在进行数据迁移时,客户端访问该怎么办

  • 正常情况下引发的迁移比如机器新增, 我们举个例子, 假设192.168.1.1 要把 桶 A,B,C 迁移给192.168.1.4 因为迁移完成前, 客户端的路由表没有变化, 客户端对桶 A, B, C 的访问请求都会路由到192.168.1.1 现在假设 桶A还没迁移, 桶B又正在迁移中, 桶C已经迁移完成. <br> 情况1:对桶A的访问, 则没什么特别, 跟以前一样.访问192.168.1.1<br> 情况2:对桶C的访问, 则192.168.1.1会把该请求转发给192.168.1.14,并且将192.168.1.4的返回结果返回给客户<br> 情况3:对桶B的访问, 则在192.168.1.1上处理, 这里有一种特殊的情况:假设客户端对桶B是put操作, 则192.168.1.1会记录修改 log.当桶B迁移完成的时候, 还要把log发送到192.168.1.4, 然后根据这些log完成数据同步. 最终两台机器对于桶B来说, 数据完全一致才是真正的迁移完成.

  • 宕机时引发的迁移,客户端会收到一张中间临时状态的分配表. 这张表中, 把宕机的data server所负责的桶临时指派给有其备份dataserver来处理. 这个时候, 服务是可用的, 但是负载可能不均衡. 当迁移完成之后, 才能重新达到一个新的负载均衡的状态.

##桶在dataserver上的分布策略

  • 负载均衡优先 具体参考文档
  • 位置安全优先 举个例子,比如192.168.1.1上存在桶A,桶B,桶C 192.168.1.2也存在桶A,桶B,桶C 位置安全优先就是说机器192.168.1.1和机器192.168.1.2不要同时放在同一个机房上,不然机房着火了,你的机器全都挂掉了,还有什么意义呢?

##总结 ###ConfigServer的功能

  • 通过维护和dataserver心跳来获知集群中存活节点的信息
  • 根据存活节点的信息来构建数据在集群中的分布表。
  • 提供数据分布表的查询服务。
  • 调度dataserver之间的数据迁移、复制。 ###DataServer的功能
  • 提供存储引擎
  • 接受client的put/get/remove等操作
  • 执行数据迁移,复制等
  • 插件:在接受请求的时候处理一些自定义功能
  • 访问统计 ###Client的功能
  • 在应用端提供访问Tair集群的接口。
  • 更新并缓存数据分布表和invalidserver地址等。
  • LocalCache,避免过热数据访问影响tair集群服务。
  • 流控 [1]:

转载于:https://my.oschina.net/linuxfelix/blog/204371

你可能感兴趣的文章
Java查找算法——二分查找
查看>>
如何构建微服务架构
查看>>
【前端笔记】彻底理解变量与函数的声明提升
查看>>
Android 反编译利器,jadx 的高级技巧
查看>>
Mycat 读写分离 数据库分库分表 中间件 安装部署
查看>>
二叉搜索树(递归实现)
查看>>
Spring Retry重试机制
查看>>
Android官方架构组件LiveData: 观察者模式领域二三事
查看>>
[Android组件化]组件化数据分享
查看>>
你必须知道的HTTP基本概念
查看>>
当下拉列表数据过大时,该如何应对?
查看>>
使用OpenGrok搭建 可搜索可跳转的源码 阅读网站
查看>>
HTML5开发中的javascript闭包
查看>>
Android ContentProvider调用报错"Bad call:..."及相关Binder权限问题分析
查看>>
ionic3 教程(二)登录页制作
查看>>
Python正则表达式初识(四)
查看>>
不明恶意攻击致<搜狗搜索><搜索结果>跳转<百度搜索>技术原理分析
查看>>
不务正业的前端之SSO(单点登录)实践
查看>>
配置通过VLANIF实现跨设备VLAN内通信
查看>>
一站式计费解决方案——腾讯计费首次亮相昆明
查看>>