当前位置:  开发笔记 > 编程语言 > 正文

Solaris上的Java/C++高可用性和可扩展平台

如何解决《Solaris上的Java/C++高可用性和可扩展平台》经验,为你挑选了1个好方法。

我有一个在Solaris上混合使用Java和C++的应用程序.代码的Java方面运行Web UI并在我们正在与之交谈的设备上建立状态,并且C++代码实时处理从设备返回的数据.共享内存用于将设备状态和上下文信息从Java代码传递到C++代码.Java代码使用PostgreSQL数据库来保持其状态.

我们遇到了一些相当严重的性能瓶颈,而现在我们可以扩展的唯一方法就是增加内存和CPU数量.由于共享内存设计,我们被困在一个物理盒子上.


这里真正受到重创的是C++代码.Web界面相当轻松地用于配置设备; 我们真正苦苦挣扎的是处理设备配置后提供的数据量.

我们从设备返回的每一段数据都有一个标识符,指向设备上下文,我们需要查看它.现在有一系列共享内存对象由Java/UI代码维护并由C++代码引用,这就是瓶颈.由于该架构,我们无法将C++数据处理移动到另一台机器上.我们需要能够扩展,以便不同的机器可以处理各种设备子集,但是我们失去了进行上下文查找的能力,这就是我要解决的问题:如何卸载真实的时间数据处理到其他框,同时仍然能够引用设备上下文.

我应该注意到,我们无法控制设备本身使用的协议,并且情况不可能发生变化.


我们知道我们需要摆脱这种情况,以便能够通过向群集中添加更多计算机来扩展,并且我正处于确定如何执行此操作的早期阶段.

现在我正在将Terracotta看作是一种扩展Java代码的方法,但我还没有找到如何扩展C++来匹配的方法.

除了扩展性能之外,我们还需要考虑高可用性.应用程序需要几乎一直可用 - 不是绝对100%,这不符合成本效益,但我们需要做一个合理的工作来度过机器停机.

如果你必须承担我已经获得的任务,你会做什么?

编辑:基于@john channing提供的数据,我正在看GigaSpaces和Gemstone.Oracle Coherence和IBM ObjectGrid似乎只是java.



1> John Channin..:

我要做的第一件事就是构建一个系统模型来映射数据流,并尝试准确理解瓶颈所处的位置.如果您可以将系统建模为管道,那么您应该能够使用约束理论(大多数文献都是关于优化业务流程,但它同样适用于软件),以不断提高性能并消除瓶颈.

接下来,我将收集一些准确描述系统性能的经验数据.这是一种陈词滥调,你无法管理你无法衡量的东西,但我看到很多人试图基于预感来优化软件系统并且惨遭失败.

然后我会使用帕累托原则(80/20规则)来选择能产生最大收益的少数事物,并只关注那些.

为了横向扩展Java应用程序,我广泛使用了Oracle Coherence.虽然有些人认为它是一个非常昂贵的分布式散列表,但功能比这更丰富,例如,您可以直接从C++代码访问缓存中的数据.

用于水平扩展Java代码的其他替代方法是Giga Spaces,IBM Object Grid或Gemstone Gemfire.

如果您的C++代码是无状态的并且纯粹用于数字运算,那么您可以使用ICE Grid来分发流程,ICE Grid具有您正在使用的所有语言的绑定.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有