我们有一个JAVA Web应用程序,它使用postgres(带有从属的单个数据库)来存储所有重要数据.
我们现在正在从单个服务器设置转移到多个服务器,因此我需要进行一些更改以满足新要求.
1)用于负载平衡和分区容差的非粘性会话ID.
2)可从所有Web服务器访问的频繁读取数据的缓存(在Memory/Memcache备选中).
3)队列(电子邮件,SMS,通过集群执行的任务).通常,所有这些都必须通过xml api或屏幕抓取来执行.
避免重复处理任务很重要,但有时可能会发生:-)
4)API请求和响应的持久存储(大量XML,大量行但列数很少).(可能通过删除旧请求和响应进行归档以保持数据集较小).
5)登录到一个公共场所.该表将继续增长.此外,我需要一个工具来访问生产日志而不停止它们.根据时间和/或搜索字符串,应该可以进行某种搜索.
我想要一个单一的解决方案来满足所有这些要求,并将redis,mongo和hazelcast(按照我个人喜好的顺序)作为可能的替代方案.
其他重要注意事项:1)减少对代码的干扰.2)简单的备份/复制策略.至少大师奴隶.3)可管理性,社区和经过试验和测试(在生产中运行).
哪个能够执行所有或大部分功能和要求?
编辑 - 我做了什么
我正在开发一个基于JAVA的Web应用程序.主要目标是在多个名为渠道的网站上销售产品库存.我们将担任所有这些渠道的经理.我们需要的是:
我正在寻找的解决方案是postgres(我们的db直到现在处于同步复制模式),NoSQL解决方案,如Cassandra,Redis,CouchDB和MongoDB.
我的约束是:
我对任何建议持开放态度.提前致谢.
我有一个带有源文件夹的eclipse项目,如:
/src/main/java/module1
/src/main/java/module2
/src/main/java/module3
Run Code Online (Sandbox Code Playgroud)
在这些src文件夹中我有像这样的包:
com.example.module1.xxx
com.example.module2.yyy
com.example.module3.zzz
Run Code Online (Sandbox Code Playgroud)
我使用java和eclipse插件创建了一个gradle构建源代码,如:
apply plugin: 'java'
apply plugin: 'eclipse'
sourceSets {
main {
java {
srcDirs = ['src/main/java/module1']
srcDir 'src/main/resources'
srcDir 'src/main/java/module2'
srcDir 'src/main/java/module3'
}
}
}
jar{
manifest {
attributes 'Implementation-Title': 'Example Project',
'Implementation-Version': '1.0.0'
}
}
repositories {
mavenCentral()
}
dependencies{
compile group: 'com.zaxxer', name: 'HikariCP', version: '2.2.5'
compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: log4j2Version
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: log4j2Version
compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: log4j2Version
compile group: 'org.apache.logging.log4j', …
Run Code Online (Sandbox Code Playgroud)