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