本文针对Redis以及redis的几种集群方案的调研日期在2016年8月,后续如果各框架有更新与本文不符,请自行甄别。
有序集合(Sorted Set)
HyperLogLog
基本操作
事务
缓存(ttl LRU...)
原理如下所示:
client-partition
特性
优点
缺点
开源方案
基本原理如下所示:
proxy-based-partition
特性
透明接入
开源方案
基本原理如下所示:
query-routing
涉及多个key的操作通常是不被支持的。
不能保证集群内的数据均衡。
增加或删除容量也比较复杂。
Twemproxy高可用部署架构
支持失败节点自动删除
自动分片到后端多个redis实例上
Redis功能支持不完善
集群功能不够完善
失去维护
Twitter内部已经不再使用。
redis-cluster architecture
Hash slot。
redis-cluster借助客户端实现了混合形式的路由查询
查询路由并非直接从一个redis节点到另外一个redis,而是借助客户端转发到正确的节点。根据客户端的实现方式,可以分为以下两种:
查询路由的流程如下所示:
query router of redis cluster
Redis cluster采用这种架构的考虑:
- 减少redis实现的复杂度
- 降低客户端等待的时间。Smart client可以在客户端缓存 slot 与 redis节点的映射关系,当接收到 MOVED 响应时,会修改缓存中的映射关系。请求时会直接发送到正确的节点上,减少一次交互。
官方未提供图形管理工具,运维比较复杂
Redis命令支持不完整
集群管理与数据存储耦合
运维友好
Codis部署拓扑
比如后端有3组codis-server,每个server负责的slot范围可以这样设置:
Codis Server
Codis Proxy
Codis Dashboard
Codis Admin
Codis FE
Codis HA
Storage
对自动主从切换的支持比较弱
单条数据迁移过程:
迁移过程如下所示:
迁移过程中,Codis-dashboard与proxy通过zk通信,路由表信息全部存放在zk,保证所有proxy的视图一致。
Codis如何保证数据迁移过程的正确及透明?
迁移过程中, 如果客户端请求 slot 的 key 数据,proxy 会将请求转发到group2上。
对比参数
Codis
Redis-cluster
Redis版本
基于2.8分支开发
= 3.0
部署
较复杂。
简单
运维
Dashboard,运维方便。
运维人员手动通过命令操作。
监控
可在Dashboard里监控当前redis-server节点情况,较为便捷。
不提供监控功能。
组织架构
Proxy-Based, 类中心化架构,集群管理层与存储层解耦。
P2P模型,gossip协议负责集群内部通信。去中心化
伸缩性
支持动态伸缩。
支持动态伸缩
主节点失效处理
自动选主。
自动选主。
数据迁移
简单。支持透明迁移。
需要运维人员手动操作。支持透明迁移。
升级
基于redis 2.8分支开发,后续升级不能保证;Redis-server必须是此版本的codis,无法使用新版本redis的增强特性。
Redis官方推出,后续升级可保证。
可靠性
经过线上服务验证,可靠性较高。
新推出,坑会比较多。遇到bug之后需要等官网升级。
- 理论上,redis-cluster的性能更高,单次请求的延时低。另外,经过实测,两种架构后端单台redis-server的条件下,TPS基本没有差别。
- Codis的高可用依赖jodis,或者使用LVS进行高可用部署。
压测结论
不支持的命令
防止key冲突
使用spring data redis操作codis时,只能使用RedisTemplate系列接口,Cache系列接口不可用
避免key value巨大的数据
Original url: Access
Created at: 2019-11-18 20:11:28
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论