如你在标题中看到的那样,问题很清楚,我将很高兴听到你对adv./disadv的看法.他们之间的差异.
更新: 我决定使用Hazelcast,因为它具有分布式缓存/锁定机制等优点,并且在适应您的应用程序时非常容易配置.
Redis与Hazelcast如果我的应用程序:
我的问题是 - 我应该选择在Redis和Hazelcast之间存储和查询数据 - 哪一个更快的读写? - 哪一个更可靠? - Cassandra可能是更好的选择吗?
回答任何问题都有帮助
有没有人对Hazelcast分布式数据网格和执行产品有任何实际经验?它对你有用吗?它有一个非常简单的API和功能,对于这样一个简单易用的工具来说似乎很不错.我做了一些非常简单的应用程序,它似乎像目前为止宣传的那样工作.所以我在这里寻找现实世界的'现实检查'.谢谢.
对于(Java8 + Oauth2 + MySql + Hazelcast +无群集http会话)组合,我在prod模式下遇到错误.开发模式运行良好.
Unable to register MBean [HikariDataSource (HikariPool-0)] with key 'dataSou
rce'; nested exception is javax.management.InstanceAlreadyExistsException: com.z
axxer.hikari:name=dataSource,type=HikariDataSource
Run Code Online (Sandbox Code Playgroud)
在日志中,数据源(hazelcast)创建的第一部分表示[dev]模式.不确定这是故意的.
请帮助我解决问题.
Dec 12, 2014 2:44:11 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive D:\tools\apache-tomcat-7.0.55\webapps\re
tailenergy.war
[INFO] com.fg.re.ApplicationWebXml - Running with Spring profile(s) : prod
2014-12-12 14:44:19.125 WARN 1368 --- [ost-startStop-1] o.s.b.l.LoggingApplicat
ionListener : Logging environment value '-Djava.util.logging.config.file="
D:\tools\apache-tomcat-7.0.55\conf\logging.properties"' cannot be opened and wil
l be ignored (using default location instead)
log4j:WARN No appenders could …
Run Code Online (Sandbox Code Playgroud) 您如何以编程方式为多播发现机制配置hazelcast?
细节:
该文档仅提供TCP/IP的示例并且已过时:它使用不再存在的Config.setPort().
我的配置看起来像这样,但发现不起作用(即我得到输出"Members: 1"
:
Config cfg = new Config();
NetworkConfig network = cfg.getNetworkConfig();
network.setPort(PORT_NUMBER);
JoinConfig join = network.getJoin();
join.getTcpIpConfig().setEnabled(false);
join.getAwsConfig().setEnabled(false);
join.getMulticastConfig().setEnabled(true);
join.getMulticastConfig().setMulticastGroup(MULTICAST_ADDRESS);
join.getMulticastConfig().setMulticastPort(PORT_NUMBER);
join.getMulticastConfig().setMulticastTimeoutSeconds(200);
HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg);
System.out.println("Members: "+hazelInst.getCluster().getMembers().size());
Run Code Online (Sandbox Code Playgroud)
如果我偶然发现MulticastTimeout,我要么得到"Members: 1"
或者
2013年12月5日下午8:50:42 com.hazelcast.nio.ReadHandler警告:[192.168.0.9]:4446 [dev] hz._hzInstance_1_dev.IO.thread-in-0关闭套接字到端点地址[192.168.0.7] :4446,原因:java.io.EOFException:远程套接字已关闭!2013年12月5日下午8:57:24 com.hazelcast.instance.Node严重:[192.168.0.9]:4446 [dev]无法加入群集,关闭!com.hazelcast.core.HazelcastException:300秒内无法加入!
如果我将配置更改为以下内容,我仍然只能获得1个成员:
Config cfg = new Config();
NetworkConfig network = cfg.getNetworkConfig();
network.setPort(PORT_NUMBER);
JoinConfig join = network.getJoin();
join.getMulticastConfig().setEnabled(false);
join.getTcpIpConfig().addMember("192.168.0.1").addMember("192.168.0.2").
addMember("192.168.0.3").addMember("192.168.0.4").
addMember("192.168.0.5").addMember("192.168.0.6").
addMember("192.168.0.7").addMember("192.168.0.8").
addMember("192.168.0.9").addMember("192.168.0.10").
addMember("192.168.0.11").setRequiredMember(null).setEnabled(true);
//this sets the allowed connections to the cluster? necessary for …
Run Code Online (Sandbox Code Playgroud) 我正在使用redis for pub/sub以及服务器端缓存.我的意思是我的应用服务器将redis服务器作为一个进程运行(也用作缓存).我有几个瘦客户端(运行redis客户端)以pub/sub模式连接到这个app服务器.我想知道redis存储缓存数据的位置?仅在服务器中,或者客户端中也会有副本.如果有近100个redis客户端通过pub/sub通道连接到服务器,那么以这种方式使用Redis也是个好主意.
谢谢
试图围绕这3个项目,他们似乎都处理尝试集群时出现的稍微不同的问题.但是他们的所有文档都是为那些已经"知情"的开发人员编写的,并且像我这样的新手很难理解.
提前感谢您对这些好奇但难以捉摸的框架的任何见解!
我正在开发Vert.x(基于Netty和Hazelcast),我正在尝试在两个服务器实例之间共享数据(在同一局域网中不同机器中的那些实例的eache).
我的问题是我不知道如何配置vert.x服务器以允许它们共享它们的并发内存映射(理论上说这是可能的).
我已经阅读了Vert.x和Hazelcast的许多文档,但我还没有结果.(我不知道如何强制vert.x加载hazelcast xml配置文件).
提前致谢!
我使用数据网格作为我的主要"数据库".我注意到Hazelcast和Ignite查询性能之间存在巨大差异.我通过适当的自定义序列化和索引优化了我的数据网格使用情况,但差异仍然是明显的IMO.
由于没有人在这里问过,我将回答我自己的问题以供将来参考.这不是一个抽象(学习)练习,而是一个真实的基准测试,用于模拟大型SaaS系统中的数据网格使用 - 主要用于显示已排序和过滤的分页列表.我主要想知道,与原始无框架Hazelcast和Ignite使用相比,我的通用JDBC-ish数据网格访问层增加了多少开销.但由于我比较苹果和苹果,所以这里是基准.
我的基于Hazelcast的程序可以在两种模式下工作:提交者和工作者.
提交者通过某些键将一些POJO放入分布式地图,例如: hazelcastInstance.getMap(MAP_NAME).put(key, value);
Worker有一个无限循环(Thread.sleep(1000L);
内部为超时),它必须处理map中的实体.现在我只是在这个循环中打印地图大小.
现在这是问题所在.我开始工作的应用程序 然后我同时启动四个提交者(每个提交者都添加一个条目并终止它的工作).但是在完成所有提交者应用程序之后,工作者应用程序打印出任意大小:有时它会检测到只添加了一个条目,有时是两个,有时是三个(实际上它从未见过所有四个条目).
这个简单的流程有什么问题?我在Hazelcast文档中读到put()
方法是同步的,因此它保证在它返回后,将条目放入分布式映射并进行复制.但在我的实验中似乎并非如此.
UPD(代码)
发布者:
public void submit(String key) {
Object mySerializableObject = ...
IMap<String, Object> map = hazelcastInstance.getMap(MAP_NAME);
map.putIfAbsent(key, mySerializableObject, TASK_TTL_IN_HOURS, TimeUnit.HOURS);
}
Run Code Online (Sandbox Code Playgroud)
工人:
public void process() {
while (true) {
IMap<String, Object> map = hazelcastInstance.getMap(MAP_NAME);
System.out.println(map.size());
// Optional<Map.Entry<String, Object>> objectToProcess = getObjectToProcess();
// objectToProcess.ifPresent(objectToProcess-> processObject(id, objectToProcess));
try {
Thread.sleep(PAUSE);
} catch (InterruptedException e) {
LOGGER.error(e.getMessage(), e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我注释掉了"处理"部分本身,因为现在我只是试图获得地图的一致状态.上面的代码每次打印不同的结果,例如:"4,3,1,1,1,1,1 ......"(因此它甚至可以看到4个提交的任务片刻,但随后它们......消失) .
UPD(日志)
工人:
...
tasksMap.size() = …
Run Code Online (Sandbox Code Playgroud) hazelcast ×10
java ×4
redis ×2
benchmarking ×1
caching ×1
datagrid ×1
ehcache ×1
ignite ×1
jgroups ×1
jhipster ×1
multicast ×1
replication ×1
scalability ×1
spring-boot ×1
terracotta ×1
vert.x ×1