如何为Redis支持的服务器实现冗余和故障转移策略

时间:2016-08-24 19:05:08

标签: redis load-balancing redundancy

我有一个用于送餐的网络/移动应用程序。问题是,我的服务器比读取对数据库做了更多写入。现在我正在运行PostgreSQL,问题是很多服务器请求都是在短时间内(中午和晚上)发生的,所以我需要各种实例(加上S3进行备份)才能实现写入吞吐量,我认为这并不是什么好事,因为事情正在扩展,这些PG实例看起来像兔子再现。

我的约束:

  • 更多
  • 写入并且正在增长
  • 大约25.000 req / s
  • 在系统中注册后,我需要保证数据的强一致性(未经处理的消费者订单)(在数据库中写
  • 最好没有服务运行而不是有故障(牺牲可用性以支持一致性)

使用我的生产服务器进行一些基准测试,Redis能够仅使用1台服务器处理当前峰值的1.5倍,并且具有List结构,对于管理订单队列非常有用。

我读到Redis,开箱即用的Sentinel / Cluster无法提供强大的一致性,因此,为了实现这一点,我想到了以下两件事之一:

  1. 使用配置了Waitappendfsync always策略的3个实例(1个主服务器和2个从服务器)设置Sentinel,并在Wait返回小于2时检入客户端。这样,Sentinel将负责复制和故障转移,并在我的服务器的帮助下,它将始终保持强大的一致性。
  2. 第二个选项是与appendfsync always具有相同的3个实例,但只需通过我的应用程序服务器在这3个中应用软件RAID 1,但是这样,我必须考虑控件逻辑实现冗余和故障转移功能。问题在于尝试在代理后面扩展我的应用程序(node.js),因为为了提供完全冗余,我必须管理每个Redis实例中的写入尝试,如果此应用程序出现故障,另一个可能不知道3是否同步以及要同步的最新数据是什么。
  3. 从我的观点来看,第二个选项似乎比第一个选项更强大,因为在这个中我只能松开1个服务器,而在第二个选项中我可以使用3个中的任何一个,只要我保证一致性。

    我错过了什么?建议?

1 个答案:

答案 0 :(得分:0)

  

写入比写入多得多   写入和增长大约25.000 req / s

您是否看过Cassandra(https://cassandra.apache.org/),如果您不需要定期更改数据结构,那么它可能是您的不错选择。

  

我读到Redis,开箱即用的Sentinel / Cluster无法提供强大的一致性

是的,这是真的。

如果您有25.000次写入/秒,则WAITappendfsync always不是一个好选择。

此致