我们有一个JAVA Web应用程序,使用Postgres(单个数据库带有从库)存储所有重要数据。
由于我们现在从单服务器设置转移到多个服务器的设置,因此我需要进行一些更改以满足新的要求。
1)负载平衡和分区容错的非粘性会话ID。
2)所有Web服务器都可以访问的频繁读取数据的缓存(内存/ Memcache替代品)。
3)队列(电子邮件,短信,要在集群上执行的任务)。通常它们都必须通过xml api或屏幕抓取来执行。避免重复处理任务很重要,但有时可能会发生。
4)API请求和响应的持久存储(大量XML,大量行但列数较少)。 (可能通过删除旧的请求和响应进行归档,以保持数据集小)。
5)记录到公共位置。表将继续增长。还需要工具来在不停止生产的情况下访问日志。基于时间和/或搜索字符串应该可以进行某种搜索。
我想要一个单一的解决方案来满足所有这些要求,并考虑Redis,Mongo和Hazelcast作为可能的替代方案(按我的个人偏好顺序)。
其他重要考虑因素: 1)尽量少干预我们的代码。 2)易于备份/复制策略。至少是主从。 3)可管理性、社区和经过测试(在生产中运行)。
哪个将能够执行所有或大部分这些特性和要求?
编辑-我所做的
- Redis支持Tomcat的会话管理器。
- Redis用于缓存。
- 由Redis支持的Jesque(Respue的Java版本)。
- Postgres
- SLF4J,由Log4j2支持。