我有一个用于送餐的网络/移动应用程序。问题是,我的服务器比读取对数据库做了更多写入。现在我正在运行PostgreSQL,问题是很多服务器请求都是在短时间内(中午和晚上)发生的,所以我需要各种实例(加上S3进行备份)才能实现写入吞吐量,我认为这并不是什么好事,因为事情正在扩展,这些PG实例看起来像兔子再现。
我的约束:
使用我的生产服务器进行一些基准测试,Redis能够仅使用1台服务器处理当前峰值的1.5倍,并且具有List
结构,对于管理订单队列非常有用。
我读到Redis,开箱即用的Sentinel / Cluster无法提供强大的一致性,因此,为了实现这一点,我想到了以下两件事之一:
Wait
和appendfsync always
策略的3个实例(1个主服务器和2个从服务器)设置Sentinel,并在Wait
返回小于2时检入客户端。这样,Sentinel将负责复制和故障转移,并在我的服务器的帮助下,它将始终保持强大的一致性。appendfsync always
具有相同的3个实例,但只需通过我的应用程序服务器在这3个中应用软件RAID 1,但是这样,我必须考虑控件逻辑实现冗余和故障转移功能。问题在于尝试在代理后面扩展我的应用程序(node.js),因为为了提供完全冗余,我必须管理每个Redis实例中的写入尝试,如果此应用程序出现故障,另一个可能不知道3是否同步以及要同步的最新数据是什么。从我的观点来看,第二个选项似乎比第一个选项更强大,因为在这个中我只能松开1个服务器,而在第二个选项中我可以使用3个中的任何一个,只要我保证一致性。
我错过了什么?建议?
答案 0 :(得分:0)
写入比写入多得多 写入和增长大约25.000 req / s
您是否看过Cassandra(https://cassandra.apache.org/),如果您不需要定期更改数据结构,那么它可能是您的不错选择。
我读到Redis,开箱即用的Sentinel / Cluster无法提供强大的一致性
是的,这是真的。
如果您有25.000次写入/秒,则WAIT
和appendfsync always
不是一个好选择。
此致