2.客户端的挑战

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介:

《全面剖析Redis Cluster原理和应用》中,我们已经详细剖析了现阶段Redis Cluster的缺点:

  • 无中心化架构
    • Gossip消息的开销
    • 不停机升级困难
    • 无法根据统计区分冷热数据
  • 客户端的挑战
    • Cluster协议支持
    • 连接和路由表的维护开销
    • MultiOp和Pipeline支持有限
  • Redis实现问题
    • 不能自动发现
    • 不能自动Resharding
    • 无监控管理UI
    • 最终一致性和“脑裂”问题
    • 数据迁移以Key为单位,速度较慢
    • 数据迁移没有保存进度,故障时不能恢复
    • Slave“冷备”,不能缓解读压力

当然之前也说过了:“这与Redis的设计初衷有关,毕竟作者都已经说了,最核心的设计目标就是性能、水平伸缩和可用性”。但综合来看,要想在生产环境中使用Redis Cluster,我们还是有一些工作要做的。本文就从宏观层面上,列举一些架构优化的参考方案。


1.P2P架构副作用1.1 Gossip通信开销

Gossip消息的通信开销是P2P分布式系统带来的第一个副作用。有一篇关于Gossip通俗易懂的文章《Life in a Redis Cluster: Meet and Gossip with your neighbors》。Redis为集群操作的消息通信单独开辟一个TCP通道,交换二进制消息:

  • PING/PONG:Cluster的心跳,每个结点每秒随机PING几个结点。结点的选择方法是:超过cluster-node-timeout一半的时间还未PING过或未收到PONG的结点,所以这个参数会极大影响集群内部的消息通信量。心跳包除了结点自己的数据外,还包含一些其他结点(集群规模的1/10)的数据,这也是“Gossip流言”的含义。
  • MEET/PONG:只有MEET后的受信结点才能加入到上面的PING/PONG通信中。

关于Gossip的问题不可避免,我们只能通过参数调整和优化,在通信效率和开销之间找到一个平衡点。因为笔者还未搭建过大规模的Redis Cluster集群,关于集群的性能和参数调优还不能给出建议,留到积累足够经验再做整理吧。

1.2 不停机升级困难

以Nginx为例,修改配置甚至升级版本都不需要停机,Master会逐一启动新的Worker实例去替代旧的Worker。对于单机版的Redis,我们也可以用类似的方式实现的。但目前不知道Redis Cluster或者其他P2P分布式系统像Cassandra,是否有比较好的方案。

1.3 冷热数据无法区分

由于集群内结点都是对等的,所以像数据热度这种整体的统计数据就无处存放。当内存有限时,要想实现层次化存储,将冷数据Swap到慢存储如磁盘上时,就变得有些棘手了!

解决方法就是计算机界号称万能的“增加中间层”方法。增加一层Proxy,负责做数据统计、Swap甚至L1缓存。关于冷热数据的统计和处理,请参考《微博CacheService架构浅析》


2.客户端的挑战

Redis Cluster的引入会给客户端带来一些挑战。要么“勇敢面对”,通过引入最新的支持Cluster协议的Jedis客户端,再加以改造来应对这些挑战。要么增加Proxy,像防洪堤坝一样将危险隔离在外。

2.1 Cluster协议开发

对于Java,最主流的Jedis客户端已经早早开始支持Cluster协议了,但仔细看了一下,貌似处理集群中结点Failover时有些问题。Slave替换上来了,Jedis的确可以根据”MOVED”消息更新Slot与结点的对应关系,但是:

  • 原来Master结点的连接池没有处理
  • 结点IP列表没有更新,极端情况下有问题

不知道这算不算Jedis由来已久的问题了。因为之前Jedis就是只支持要么用分片连接池,要么用Sentinel连接池,没有两者的结合!还好有热心的程序员“出手相助”,详见《Jedis分片Sentinel连接池实验》。上面两个问题对应的源码看得不是很细,突然想到的这两个问题,要是说的不对还请指正!






本文作者:geelou
本文来自云栖社区合作伙伴rediscn,了解相关信息可以关注redis.cn网站。
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
24天前
|
存储 缓存 人工智能
未来发展趋势下的后端技术挑战与应对策略
21世纪是信息化快速发展的时代,后端技术作为支撑整个系统架构的重要组成部分,面临着诸多挑战和机遇。本文将探讨未来发展趋势下后端技术的挑战,并提出相应的应对策略,旨在引领读者深入思考如何更好地应对技术发展带来的变革。
13 1
|
2月前
|
安全 Cloud Native 大数据
未来发展趋势下的后端技术挑战与应对
【2月更文挑战第5天】随着科技的不断进步,后端开发在未来将面临更多挑战与机遇。本文将探讨未来发展趋势下后端技术的变化与应对策略,为广大开发者提供思路与启示。
39 4
|
10月前
|
缓存 JSON 前端开发
✨✨✨ ServiceWorker 让你的网页拥抱服务端的能力
ServiceWorker 是一个运行在浏览器背后的独立线程,它拥有访问网络的能力,可以用来实现缓存、消息推送、后台自动更新等功能,甚至可以用来实现一个完整的 Web 服务器。
152 0
✨✨✨ ServiceWorker 让你的网页拥抱服务端的能力
|
测试技术 网络安全
软件测试面试题:一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?
软件测试面试题:一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?
254 0
|
人工智能 安全 JavaScript
前后端通讯:非敏感信息Cookie的"强化"之路
我们公司鉴权走的是JWT, 但是有些数据走Cookie更方便通讯, 纵观今天,网上一大把说Cookie不好的文章. 但是我们还是要用,那怎么安全一丢丢呢?
121 0
|
存储 传感器 监控
化“被动”为“主动”,如何构建安全合规的智能产品
物联网时代,智能产品的应用越来越广泛,然而想要构建一款满足合规要求的智能产品却并非易事。智能产品的构建通常涉及较长的产业链条,包括智能设备端、云设备端及用户操作端,而大多数从事 IoT 智能设备构建的开发者更多的经验集中在嵌入式设备的开发,对于在云平台上该如何轻松、安全地构建智能产品缺乏经验,且常常被一些设备端的问题所困扰。近日,亚马逊云科技 Tech Talk 特别邀请解决方案架构师郑辉作为嘉宾带来《使用 Amazon IoT Core 构建安全合规的智能产品》的主题分享。
150 0
化“被动”为“主动”,如何构建安全合规的智能产品
|
安全 大数据 Unix
网络安全应急响应的回顾与展望
当前,世界各国纷纷将网络空间安全纳入国家安全战略,制定和完善网络空间安全战略规划和法律法规。我国高度重视网络空间安全,总书记曾明确提出“没有网络安全就没有国家安全”,而网络安全应急工作是网络安全的最后一道防线,完善网络安全应急标准体系,规范网络安全应急工作,提升应急能力,对于捍卫国家安全至关重要。
706 0
网络安全应急响应的回顾与展望
|
算法 Java 数据库
从服务端视角看高并发难题
服务端处理请求需要耗费服务端的资源,比如能同时开启的进程数、能同时运行的线程数、网络连接数、cpu、I/O、内存等等,由于服务端资源是有限的,那么服务端能同时处理的请求也是有限的。高并发问题的本质就是:资源的有限性
948 0
|
Web App开发 编解码 网络协议
以网游服务端的网络接入层设计为例,理解实时通信的技术挑战
本文参考并引用了部分腾讯游戏学院的相关技术文章内容,感谢原作者的分享。 1、前言 以现在主流的即时通讯应用形态来讲,一个完整的即时通讯IM应用其实是即时通信(英文简写:IM=Instant messaging)和实时通信(英文简写:RTC=Real-time communication)2种技术组合在一起的一整套网络通信系统。
3593 0