首页 / 知识
Solaris上用于Java / C ++的高可用性和可扩展平台
2023-04-14 15:48:00

High availability and scalable platform for Java/C++ on Solaris我有一个在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。 我要做的第一件事是构造一个系统模型以映射数据流并尝试准确地了解瓶颈所在。如果您可以将系统建模为管道,那么您应该能够使用约束理论(大多数文献都是关于优化业务流程,但它同样适用于软件)来不断提高性能并消除瓶颈。 接下来,我将收集一些准确的经验数据,这些数据可以准确地描述系统的性能。您无法管理无法衡量的事情是一种陈词滥调,但是我看到许多人试图基于预感来优化软件系统,但失败却惨痛。 然后,我将使用帕累托原理(80/20规则)来选择少数会产生最大收益的事物,而只关注那些收益。 为了水平扩展Java应用程序,我广泛使用了Oracle Coherence。尽管有些人认为它是一个非常昂贵的分布式哈希表,但是它的功能却比它丰富得多,例如,您可以直接从C ++代码访问缓存中的数据。 水平扩展Java代码的其他替代方法是Giga Spaces,IBM Object Grid或Gemstone Gemfire。 如果您的C ++代码是无状态的并且仅用于数字运算,则可以考虑使用ICE Grid分发该过程,该ICE Grid具有所使用的所有语言的绑定。 安德鲁(除了建模为管道等),衡量事物很重要。您是否对代码运行了探查器,并获得了大部分时间花在哪里的指标? 对于数据库代码,它多久更改一次?您正在看缓存吗?我假设您已经查看了数据上的索引等以加快Db的速度? 您前端的流量水平是多少?您是否在缓存网页? (使用JMS类型的api在组件之间进行通信并不难。您可以将Web Page组件放在一台(或更多)机器上,然后将集成代码(c ++)放在另一台机器上,对于许多JMS产品通常有本机C ++ api(例如ActiveMQ),但它确实有助于了解Web(JSP?),C ++和数据库操作的时间。 数据库是存储业务数据,还是还用于在Java和C ++之间传递数据?您说您正在使用共享内存而不是JNI? APP中当前存在什么级别的多线程?您将代码描述为本质上是同步的还是异步的? Solaris代码和必须维护的设备之间是否存在物理关系(即,所有设备都向c ++代码注册,还是可以指定)。即。如果您要在前端放置一个Web负载平衡器,并且今天只安装2台机器,那么哪个设备是由预先或预先初始化的盒子来管理的关系? 房委会有什么要求?即。只是状态信息?是否可以通过对会话数据进行群集来仅在Web层中完成HA? 数据库是否在另一台计算机上运行? 数据库有多大?您是否优化了查询,即。尝试使用显式内部/外部联接有时可以帮助解决嵌套子查询(sometmes)的问题。 (再次查看sql统计信息)。 您需要横向扩展。也许像消息队列之类的东西可能是前端和处理之间的后端。 |
最新内容
相关内容
linux进程运行命令?
linux进程运行命令?,系统,工作,状态,地址,信息,进程,基础,命令,管理,软件,linux常用命令有哪些1、linux系统常用操作命令linux系统常用操作命linux运行vim命令?
linux运行vim命令?,系统,工具,官方网站,模式,基础,数据,代码,环境,入口,命令,如何使用Linux系统中的Vim编辑器1、vim编辑器的三种模式:一般模式linux监控命令运行?
linux监控命令运行?,系统,工作,地址,信息,工具,情况,标准,环境,命令,状态,linux服务器监控的几个方法和命令uptime 该命令直观的显示了服务器linux自动运行命令?
linux自动运行命令?,服务,系统,时间,代码,周期性,第一,命令,管理,在线,状态,linux计划任务(自动化执行任务的利器)1、Linux计划任务是一种自动linux开启运行命令?
linux开启运行命令?,系统,服务,工作,管理,状态,命令,标准,情况,环境,工具,linux中如何开机启动运行指定的应用程序或指令?1、开机启动时自动运linux运行wps命令?
linux运行wps命令?,软件,官网,名称,时间,电脑,系统,工具,环境,项目,数据,wps支持linux命令行下word转pdf吗?1、通过浏览器进入到wps官网,然后点linux运行cmd命令?
linux运行cmd命令?,电脑,系统,状态,情况,环境,命令,单位,管理,设备,数据,电脑运行命令怎么打开电脑运行命令需要同时按下“win图标”键和“R”linux运行两个命令?
linux运行两个命令?,网络,地址,系统,工作,暂停,命令,网站,密码,网上,入口,Linux下必须知道的11个网络命令1、netstat -r:打印路由表。路由表保linux命令运行代码?
linux命令运行代码?,代码,单位,系统,环境,连续,保险,工具,命令,文件,音乐,Linux中,运行一个C语言程序如何运行1、编译。由.c文件生成.o文件,写linux命令运行脚本?
linux命令运行脚本?,代码,系统,工作,设计,状态,命令,脚本,文件,目录,终端,运行linux脚本,遇到要按回车键,怎么让它自动应答,继续运行脚本?1、linux上运行的命令?
linux上运行的命令?,系统,工作,软件,网络,地址,信息,情况,命令,灵活,基础知识,linux系统常用操作命令linux常用命令有pwd命令、cd命令、ls命令linux怎么运行命令?
linux怎么运行命令?,系统,工作,首页,工具,终端,地址,命令,信息,电脑,情况,怎样把linux系统的命令行打开1、在Linux系统中,打开命令行窗口需要使