【第五讲,Redis架构及介质选择指引】
讲师:民科,阿里云NoSQL内核工程师。
课程内容:如何进行Redis选型;云Redis版集群架构及对比;如何使用Redis做缓存。
答疑汇总:特感谢班委@邓小兵 同学
Q1:读写分离的实现原理是什么?
A1:读写分离实际上是分为分两部分,一部分是访问链路,一部分是数据同步。数据同步:基本的主备同步的过程中,如果读副本的个数比较多的话,采用链式负责任的方式,这样可以降低主节点的压力。访问链路:在开通了读写分离方式后,会有一个 proxy 做代理,有 proxy 去区分用户发送来的命令,判断读请求还是写请求,写请求会转发到主节点处理,读请求会按一定的比例分发到其他的只读节点上。
Q2:Redis 一直保持单线程串行数据处理的优势是什么(或者说 Redis 多线程会存在哪些问题)?没有发挥多核的优势,后面有考虑多线程版本吗?
A2:Redis 一直使用单线程模式,主要是因为 Redis 支持多种复杂的数据结构,比较难实现多线程并行访问,除非是按照每个 key,按照每个 slot 去分,按 key、slot的粒度去加锁,这样确实可以实现。社区版 6.0 现在是支持 IO 多线程的。阿里云的 5.0企业版也支持IO 多线程,后续的企业版还会开放更深入的多线程能力。
Q3:单实例和集群有对应 QPS的参考值吗?
A3:简单命令参考:纯社区版 在 10W 左右 可以选择单实例,如果超过了建议使用集群版。阿里云简单的命令上限能到20W 左右。
Q4:集群间取消迁移会产生脏数据吗?
A4:开源实现会出现这种问题的,在阿里云上会做数据回滚,不会有产生脏数据的问题。
Q5:阿里云 Redis 怎么做到内存+SSD/HDD 的还能做到机会和社区版纯内存版相差无几的效果的,相差有多少呢?
A5:目前是没有 HDD 的这种实现,而通过SSD实现的产品性能也是没有纯内存的性能高的。
Q6:开源版的监控有没有细粒度到命令级别的?
A6:阿里云提供的都是有相应的监控运维上的改进,这些细粒度的功能都是有的(包括 慢查询,读写审计等)
Q7:阿里云在数据迁移时候 RT 没有变高?
A7:如果是开源版本实现,RT 会受到大 KEY 影响,需要在源端打包发送到目的端,这中间打包、发送、再到目的端解开来恢复这个过程会锁住 DB,这会有一定的影响,而阿里云的做法是把整个数据迁移的过程是在后台做的,先做后台的数据copy,copy 完之后再到目的端,这中间不会对用户有 RT 影响,除了网络带宽上可能会有一些波动,RT一般不会受数据迁移的影响。