多数据中心解决方案.docx

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多数据中心解决方案Redis在携程内部得到了广泛的使用,根据客户端数据统计,整个携程全部Redis的读写请求在200W QPS/s,其中写请求约10W QPS/S,很多业务甚至会将Redis当成内存数据库使用。这样,就对Redis多数据中心提出了很大的需求,一是为了提升可用性,解决数据中心DR(Disaster Recovery)问题;二是提升访问性能,每个数据中心可以读取当前数据中心的数据,无需跨机房读数据。在这样的需求下,XPipe应运而生 。从实现的角度来说,XPipe主要需要解决三个方面的问题,一是数据复制,同时在复制的过程中保证数据的一致性;二是高可用,xpipe本身的高可用和Redis系统的高可用;三是如何在机房异常时,进行DR切换。下文将会从这三个方面对问题进行详细阐述。最后,将会对测试结果和系统在生产环境运行情况进行说明。为了方便描述,后面的行文中用DC代表数据中心(Data Center)。1. 数据复制问题 多数据中心首先要解决的是数据复制问题,即数据如何从一个DC传输到另外一个DC,通常有如下方案:客户端双写 从客户端的角度来解决问题,单个客户端双写两个DC的服务器。初看没有什么问题。但是深入看下去,如果写入一个IDC成功,另外一个IDC失败,那数据可能会不一致,为了保证一致,可能需要先写入一个队列,然后再将队列的数据发送到两个IDC。 如果队列是本地队列,那当前服务器挂掉,数据可能会丢失;如果队列是远程队列,又给整体的方案带来了很大的复杂度。目前的应用一般都是集群部署,会有多个客户端同时操作。在多个客户端的前提下,又带来了新的问题。比如两个客户端ClientA和ClientB:ClientA: ?set key value1ClientB: ?set key value2由于两个客户端独立操作,到达服务器的顺序不可控,所以可能会导致两个DC的服务器对于同一个key,value不一致,如下:Server1: set key value1; set key value2;Server2: set key value2; set key value1;在Server1,最终值为value2,在Server2,最终值为value1。服务器代理 Proxy模式解决了多客户端写可能会导致数据不一致的问题。proxy类似于一个client,和单个client双写的问题类似,需要一个数据队列保数据一致性。为了提升系统的利用率,单个proxy往往需要代理多个Redis server,如果proxy出问题,会导致大面积的系统故障。这样,就对系统的性能和可用性提出了极大的挑战,带来实现的复杂度。此外,在特殊的情况下,仍然会可能带来数据的不一致,比如value和时间相关,或者是随机数,两个Redis服务器所在系统的不一致带来了数据的不一致。考虑到以上情况,为了解决复制问题,我们决定采用伪slave的方案,即实现Redis协议,伪装成为Redis slave,让Redis master推送数据至伪slave。这个伪slave,我们把它称为keeper,如下图所示:有了keeper之后,多数据中心之间的数据传输,可以通过keeper进行。keeper将Redis日志数据缓存到磁盘,这样,可以缓存大量的日志数据(Redis将数据缓存到内存ring buffer,容量有限),当数据中心之间的网络出现较长时间异常时仍然可以续传日志数据。Redis协议不可更改,而keeper之间的数据传输协议却可以自定义。这样就可以进行压缩,以提升系统性能,节约传输成本;多个机房之间的数据传输往往需要通过公网进行,这样数据的安全性变得极为重要,keeper之间的数据传输也可以加密,提升安全性。2. 高可用 任何系统都可能会挂掉,如果keeper挂掉,多数据中心之间的数据传输可能会中断,为了解决这个问题,需要保证keeper的高可用。我们的方案中,keeper有主备两个节点,备节点实时从主节点复制数据,当主节点挂掉后,备节点会被提升为主节点,代替主节点进行服务。提升的操作需要通过第三方节点进行,我们把它称之为MetaServer,主要负责keeper状态的转化以及机房内部元信息的存储。同时MetaServer也要做到高可用:每个MetaServer负责特定的Redis集群,当有MetaServer节点挂掉时,其负责的Redis集群将由其它节点接替;如果整个集群中有新的节点接入,则会自动进行一次负载均衡,将部分集群移交到此新节点。Redis也可能会挂,Redis本身提供哨兵(Sentinel)机制保证集群的高可用。但是在Redis4.0版本之前,提升新的master后,其它节点连到此节点后都会进行全量同步,全量同步时,slave会处于不可用状态;master

文档评论(0)

智慧IT + 关注
实名认证
内容提供者

微软售前技术专家持证人

生命在于奋斗,技术在于分享!

领域认证 该用户于2023年09月10日上传了微软售前技术专家

1亿VIP精品文档

相关文档