用于在集群中共享分布式事务和/或数据的Java解决方案
集群/分发Java服务器应用程序的最佳方法是什么? 我正在寻找一种方法,它允许您通过添加更多的应用程序服务器和数据库服务器来横向扩展用于在集群中共享分布式事务和/或数据的Java解决方案,java,concurrency,transactions,scalability,optimistic-locking,Java,Concurrency,Transactions,Scalability,Optimistic Locking,集群/分发Java服务器应用程序的最佳方法是什么? 我正在寻找一种方法,它允许您通过添加更多的应用程序服务器和数据库服务器来横向扩展 您建议采用什么技术(软件工程技术或特定技术)来解决此类问题 您使用什么技术来设计一个持久层以扩展到许多读写器 扩展应用程序事务并扩展对共享数据的访问(最好的方法是消除共享数据;您可以应用什么技术来消除共享数据) 根据您的事务是读重还是写重,似乎需要不同的方法,但我觉得如果您能够优化一个“写”重的应用程序,它对“读”也是有效的 “最佳”解决方案将允许您为单个节点
- 您建议采用什么技术(软件工程技术或特定技术)来解决此类问题
- 您使用什么技术来设计一个持久层以扩展到许多读写器 扩展应用程序事务并扩展对共享数据的访问(最好的方法是消除共享数据;您可以应用什么技术来消除共享数据)
- 根据您的事务是读重还是写重,似乎需要不同的方法,但我觉得如果您能够优化一个“写”重的应用程序,它对“读”也是有效的
在扩展数据持久性层方面,在将数据分区到多个读卡器/多个写卡器(通常我会基于单个主数据库拥有的给定用户(或通常是“根”对象实体的任何核心实体)对数据进行分区方面,哪种配置类型的扩展效果最好感谢您在一个地方很好地总结了所有可能性 不过,这里缺少一项技术。这是MapReduceHadoop。如果有可能将问题放入MapReduce范例中,那么它可能是最广泛可用的解决方案。我还想知道Actor框架模式(时差、Kilim等)是否可以扩展到集群。别忘了Erlang的 Mnesia为您提供了像事务这样的东西,您在普通数据库中已经习惯了这些东西,但它提供了实时操作和容错能力。此外,您还可以在不停机的情况下重新配置设备。缺点是它是一个内存驻留数据库,所以您必须对非常大的表进行分段。最大表大小为4Gb。
- 别忘了,还有
- 也许这些会有帮助。根据我们的经验,我推荐Oracle(Tangosol)Coherence和GigaSpaces作为最强大的数据和处理分发框架。根据问题的确切性质,其中一个可能会发光。Terracotta也非常适用于一些问题。认为我找到了一个很棒的Java集群/分布式平台,想重新打开这个平台-
结帐
我运行了测试程序,它很酷,重量很轻,使用简单。它会自动检测对等配置中的集群成员。机会是无限的。而Oracle Coherence和许多其他建议的解决方案对
public class SequenceCounterProcessor
extends AbstractProcessor
{
public Object process(InvocableMap.Entry entry)
{
long l = entry.isPresent() ? (Long) entry.getValue() + 1 : 0;
entry.setValue(l);
return l;
}
}
public Object process(InvocableMap.Entry entry)
{
try
{
BinaryEntry binentry = (BinaryEntry) entry;
long l = entry.isPresent() ? binentry.getBinaryValue()
.getBufferInput().readLong() + 1 : 0L;
BinaryWriteBuffer buf = new BinaryWriteBuffer(8);
buf.getBufferOutput().writeLong(l);
binentry.updateBinaryValue(buf.toBinary());
return l;
}
catch (IOException e)
{
throw new RuntimeException(e);
}
}
public static final SequenceCounterProcessor INSTANCE =
new SequenceCounterProcessor();
long l = (Long) sequences.invoke(x, SequenceCounterProcessor.INSTANCE);