Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可用性问题_Java_Design Patterns_Oop - Fatal编程技术网

Java 可用性问题

Java 可用性问题,java,design-patterns,oop,Java,Design Patterns,Oop,架构: 一组客户端向VIP后面的服务器发送消息。显然,此服务器存在可用性风险 客户端监视资源,服务器负责根据大多数客户端向其报告的状态采取行动,因此只需要一个服务器/领导者 我正在考虑在VIP上添加另一台服务器作为备份,只有在第一台服务器出现故障时才打开。但是,当备份出现时,它将没有要处理的信息,并且会浪费时间等待客户端报告和等待所需的阈值等 问题: 让两台服务器只与一个接收客户端通信共享客户端状态信息的最佳和最简单的方法是什么 解决方案1: 我曾想过让服务器将客户机状态信息转发给备份服务器,如

架构: 一组客户端向VIP后面的服务器发送消息。显然,此服务器存在可用性风险

客户端监视资源,服务器负责根据大多数客户端向其报告的状态采取行动,因此只需要一个服务器/领导者

我正在考虑在VIP上添加另一台服务器作为备份,只有在第一台服务器出现故障时才打开。但是,当备份出现时,它将没有要处理的信息,并且会浪费时间等待客户端报告和等待所需的阈值等

问题: 让两台服务器只与一个接收客户端通信共享客户端状态信息的最佳和最简单的方法是什么

解决方案1: 我曾想过让服务器将客户机状态信息转发给备份服务器,如果备份服务器出现故障,它可以从备份服务器获取


还有别的办法吗?我考虑使用一个公共/共享位置来存储状态信息,两台服务器都可以从中读取客户端状态信息。但这并不奏效,因为共享空间也是一个单点故障。

一个选项是使用预写日志。本质上,您对状态所做的任何修改都会发送到备份服务器,备份服务器会在其自己的状态副本上重播更改。只要它能跟上流日志,备份总是最新的

这是大多数数据库普遍使用的方法;如果你使用一个作为你的后端,你可能能够得到支持,这与很少的工作


要小心制定从通信故障中恢复的计划-要么将日志保存到磁盘并重新发送丢失的部分,要么发送状态快照,以及重新连接快照后的所有日志项。

有各种分布式缓存产品可以完成您在这里讨论的这类工作。有些是随应用服务器提供的,如WebSphere的dynacache和对象网格。事实上,ObjectGrid可以在JSE中使用,不需要应用服务器


这些分布式缓存产品使用各种push和pull模型以及pub-sub消息传递来实现实例间的一致性。在IBM工作时,我是ObjectGrid的粉丝,但更重要的是,我不喜欢重新发明轮子。我的看法是,这些东西可能会变得非常复杂,因此找到现成的东西可能会节省大量工作-这里有各种链接。

这在很大程度上取决于您的解决方案需要多少可用的9。有一系列的解决方案


一个轻量级的工具可以围绕着:极快的分布式状态设备来设计。例如,它在谷歌AppEngine上被广泛使用。

hmmm。。。我正在寻找一种设计,以保持两台服务器同步。我不关心预写日志,因为如果通信失败,我们可以重试。有没有一种设计可以帮助两台主机保持同步?同步延迟不是问题。提前写入日志会使它们保持同步-您只需将日志写入另一台服务器即可。由于日志具有所有状态更改,通过重放日志,您可以获得与主机上相同的状态。如果您定义VIP,可能会有所帮助。