在redis集群中存储会话信息安全高效吗

31moq8wy  于 2021-06-10  发布在  Redis
关注(0)|答案(2)|浏览(452)

这个问题听起来很像:这个,但我相信不是。虽然这个问题非常具体,但我认为它不足以掩盖我的疑虑。
我正在尝试为我的应用程序部署设置redis集群。我使用redis来存储各种信息,如会话信息、计划作业元信息等。到目前为止,我只使用了一个节点示例。不过,我正在考虑为ha迁移到redis集群。我知道redis是单线程的,只提供尽力而为的一致性,而不是一个强大的一致性提供者。因此,就我所处的单个节点而言,我在一致性方面没有任何问题(除了容错方面)。但是,当我移动到集群设置时,这仍然不是真的(至少根据我的理解)。
我的问题如下:
如果我转向redis集群设置,我是否会在一致性上妥协以获得ha?redis网站本身表示,由于采用了异步复制方法,集群设置没有提供强大的一致性保证。在这种情况下,使用/建议redis作为存储会话的可行解决方案的人有什么理由?这是否仅适用于单节点设置?还是说每次都会有一次失传就没事?
要使redis真正具有容错性,我们必须使用持久性特性,否则就不能重新生成状态(我相信这也带来了性能上的轻微妥协)
我的理解是正确的吗?redis cluster只提供ha,即数据是分片和分布的,不提供自动故障转移?必须使用哪个redis sentinel?
人们还使用哪些解决方案来快速访问具有强烈一致性要求的数据?

r1zk6ea1

r1zk6ea11#

我可能无法深入回答所有的问题。在详细讨论你的问题之前;
可用性和一致性之间的关系不仅与redis有关,而且是分布式系统的核心原则之一。可以用cap定理来解释。是的,你会妥协的 consistency 对于高 availability 因为你不能牺牲 partition tolerance 在分布式系统中。一些分布式数据库技术提供的配置与仲裁的折衷可用性具有“强”一致性(例如 Cassandra ).
如果你想要ha,那么redis集群可能不是你想要的。当您需要在多个节点上共享数据(分配负载)时,redis cluster是一个很好的解决方案。当您达到示例的内存限制时,它是“必须的”。你可能需要的是redis sentinel。 Redis Sentinel 提供 high availability 为了redis。实际上,这意味着使用sentinel可以创建一个redis部署,在没有人为干预的情况下抵抗某些类型的失败。
你分享的帖子已经有8年的历史了,它可能无法涵盖或回答今天的所有要求。这篇文章也没有要求任何场景或解决方案来覆盖分布式redis。
redis仍然是一个很好的会话解决方案(key/value的完美例子)。您可以垂直扩展并停留在一个节点上,以实现会话的强一致性。
您可以切换到其他一些具有可配置一致性(数据准确性)的数据库,如cassandra,并设置 quorum 根据业务需要。这将不是一个银弹,总是有一个权衡。
您可以为quorum寻找第三方工具,或者实现一个在redis中具有强一致性的工具。redis的法定人数与cassandra的不同。
仲裁仅用于检测故障。为了实际执行故障转移,其中一个哨兵需要被选为故障转移的领导者并被授权继续。这只有在大多数sentinel进程投票的情况下才会发生。
redis sentinel也可能是一个答案。官方文件涉及很多细节。
如果主服务器不能按预期工作,sentinel可以启动故障转移过程,其中一个副本升级为主服务器,其他额外的副本被重新配置为使用新的主服务器,并且使用redis服务器的应用程序在连接时被告知要使用的新地址。
redis集群的规范和用例与sentinels不同。redis哨兵最重要的力量之一来自于故障转移期间的领导人选举。afaik,cluster没有这个功能(没有尝试,但是在文档中看到了一些细节)。
我间接地回答了这个问题,并举例说明。可以选择垂直(而不是水平)缩放。您可以向示例添加更多资源(ram等)。另一个选择是考虑cassandra并进行调优以获得即时一致性。权衡的结果还是可用性。如果节点关闭,则读写都会失败。

xxb16uws

xxb16uws2#

对于具有强一致性要求的快速访问数据,请使用cassandra。它固有的仲裁机制有助于确保一致性,p2p架构以最小的配置开销提供可伸缩性

相关问题