很难大规模操作有状态的分布式系统,redis 也不例外 。托管数据库通过承担大部分繁重工作使生活变得更轻松 。但是您仍然需要一个健全的架构并在服务器(Redis)和客户端(应用程序)上应用最佳实践 。
本博客涵盖了一系列与 Redis 相关的最佳实践、提示和技巧,包括集群可扩展性、客户端配置、集成、指标等 。虽然我会不时引用Amazon MemoryDB和ElastiCache for Redis,但大多数(如果不是全部) ) 一般适用于 Redis 集群 。
无论如何,这并不意味着是一个详尽的清单 。我只是选择了十,因为它是一个不错的、有益健康的数字!
让我们深入了解一下您在扩展 Redis 集群方面有哪些选择 。
1. 可扩展性选项
您可以放大或缩小:
扩展(垂直)- 您可以增加单个节点/实例的容量,例如从Amazon EC2db.r6g.xlarge类型升级到db.r6g.2xlarge
Scaling Out (Horizontal) - 您可以向集群添加更多节点
向外扩展的需求可能是由几个原因驱动的 。
如果您需要处理读取繁重的工作负载,您可以选择添加更多副本节点 。这适用于 Redis 集群设置(如MemoryDB)或非集群主副本模式,例如ElastiCache with cluster mode disabled的情况 。
如果您想增加写入容量,您会发现自己受到主副本模式的限制,应该选择基于 Redis 集群的设置 。您可以增加集群中的分片数量 - 这是因为只有主节点可以接受写入,并且每个分片只能有一个主节点 。
这还具有增加整体高可用性的额外好处 。

文章插图
图 1:Redis(已禁用集群模式)和 Redis(已启用集群模式)集群 – ElastiCache for Redis 文档
2. 扩展集群后,最好使用这些副本!
大多数 Redis 集群客户端(包括 )的默认行为redis-cli是将所有读取重定向到主节点 。如果您添加了只读副本来扩展读取流量,它们将处于空闲状态!
您需要切换到READONLY模式以确保副本处理所有读取请求,而不仅仅是被动参与者 。确保正确配置您的 Redis 客户端 - 这将因客户端和编程语言而异 。
例如,在Go Redis 客户端中,您可以设置ReadOnly为true:
【在云端使用 Redis? 以下是你应该知道的十件事】client := redis.NewClusterClient(
&redis.ClusterOptions{
Addrs: []string{clusterEndpoint},
ReadOnly: true,
//..other options
})
为了进一步优化,您还可以使用RouteByLatency或RouteRandomly,这两个都自动开启ReadOnly模式 。
您可以参考JAVA 客户端(例如 Lettuce)的工作原理
3. 使用只读副本时要注意一致性特征
您的应用程序有可能从副本中读取过时的数据——这就是最终一致性 。由于主副本节点复制是异步的,因此您发送到主节点的写入器可能尚未反映在只读副本中 。当您拥有大量只读副本(尤其是跨多个可用区)时,可能会出现这种情况 。如果这对您的用例来说是不可接受的,那么您也必须求助于使用主节点进行读取 。
MemoryDB 或 ElastiCache for Redis 中的ReplicationLag 指标可用于检查副本在应用来自主节点的更改方面落后多长时间(以秒为单位) 。
那么强一致性呢?
在这种情况下MemoryDB,来自主节点的读取是强一致的 。这是因为客户端应用程序仅在写入(到主节点)写入持久多可用区事务日志后才会收到成功的写入确认 。
4. 请记住,您可以影响密钥在 Redis 集群中的分布方式
Redis 没有使用一致性哈希(像许多其他分布式数据库一样),而是使用哈希槽的概念 。总共有16384槽,为集群中的每个主节点分配一定范围的哈希槽,每个键属于特定的哈希槽(从而分配给特定节点) 。如果键属于不同的哈希槽,则在 Redis 集群上执行的多键操作将无法进行 。
但是,您并非完全受集群的支配!可以通过使用hashtags来影响键的位置 。因此,您可以确保特定键具有相同的哈希槽 。例如,如果您将客户 ID 的订单存储42在HASHnamedcustomer:42:orders中,并将客户资料信息存储在 中customer:42:profile,您可以使用花括号{}来定义将被散列的特定子字符串 。在这种情况下,我们的键是{customer:42}:orders和{customer:42}:profile-{customer:42}现在驱动哈希槽的放置 。现在我们可以确信这两个键都在同一个哈希槽中(因此是同一个节点) 。
5. 您是否考虑过缩小(后退)?
您的应用程序很成功,它有很多用户和流量 。你扩展了集群,事情仍然很顺利 。惊人的!
但是,如果您需要缩减规模怎么办?
推荐阅读
- 德国大神的软件架构手册
- 陈萌|陈萌开车接朱小伟回家,介怀陈亚男的存在?称不愿做2婚妻子
- 背部肌肉 锻炼,背部肌肉锻炼八大动作-
- 伊丽莎白二世|现在谁来照看艾玛?这匹小马陪伴女王15年,现在是一笔宝贵的遗产
- 林志玲|志玲姐姐产后首次亮相,携新书签售复出在望
- 双脚冰冷是什么原因
- 不发烧的疹子是怎么了
- 肺结核盗汗是什么样子?
- 单手麻是什么病的前兆
- 眼肌痉挛吃什么药最好?
