我们目前正在Linux机器上运行Java集成应用程序。首先是应用程序的概述。
Java应用程序是一个独立的应用程序(未部署在任何Java EE应用程序服务器上,如OracleAS,WebLogic,JBOSS等)。 By Stand Alone我的意思是它不是桌面应用程序。但是它是从Main类的命令行运行的。用户根本不直接与此应用程序交互。使用API将消息转储到队列中,然后由我的应用程序读取,该应用程序一直24/7运行。我不认为这是一个桌面应用程序,因为用户没有与它直接交互。(不确定这是否是合格的正确推理)。
它使用Spring并连接到WebSphere MQ和Oracle数据库 我们使用Spring Listener(Spring Message Driven POJO)来监听WebSphere MQ上的队列。一旦队列中有消息,应用程序就会从MQ读取消息并将其转储(插入/更新)到数据库中。
现在的问题是:
答案 0 :(得分:3)
另一个选项是Terracotta,这个框架可以完全按照您的要求进行操作;同时在多台计算机上运行您的应用程序并平衡它们之间的负载。
答案 1 :(得分:2)
随着对数据的需求增加,任何应用程序的水平扩展最终都会遇到限制。这些限制由负载和服务器/数据库性能决定。在某些时候,如果需求和负载随着扩展而增加,那么服务器/数据库的数量也必须增加。根据所存储的数据,服务器/数据库必须被复制和同步,或者需要采用某种散列算法来跨多个服务器分割数据。随着您增加同步数据源的数量,复制/同步这些服务器的成本也会增加。这就是为什么散列方法可能更有吸引力,以最大限度地降低成本。
真正的高可用性解决方案实施起来非常昂贵。我已经看到了不同程度的HA,但根据定义,它意味着绝对最小或没有停机时间或丢失对数据源的访问权限。要实现这一目标,需要大量冗余硬件,网络和软件,这些硬件,网络和软件能够利用冗余硬件,而不会在其中一个数据源出现故障时失去获取数据的能力。硬件故障是不可避免的,它将发生,以及停电和其他随机性行为。根据HA数据的重要性,HA解决方案还需要多个独立电网上的多个数据中心。这显然是非常昂贵,所以这一切都取决于这些数据对最终用户的重要程度。
因此,HA是一种需要昂贵架构的极端场景。我发现大多数时候人们只对最小化停机时间感兴趣,并且根据数据源的大小,这可以通过添加数据源的热备份来相当低廉地实现。
答案 2 :(得分:2)
对于HA,您需要澄清要求。对于基于队列的应用,“高可用性”是一个有趣的问题。如果您的应用程序停机几分钟,则消息会堆积在队列中。只要您可以恢复并运行您的应用程序,这些消息仍会得到处理,只是会有更多延迟。可能值得一提的是,“消息的最大可接受延迟是多少?”
可能存在一些关于硬件故障,数据中心丢失等问题的组件。这些不会通过在同一位置进行水平扩展来解决。您需要在每个层复制所有组件:队列本身,处理器,后端数据库以及连接它们的所有网络硬件。
这是一个昂贵的主张,因此值得一提的是,“HA情景和非HA情景之间的停机时间年化损失预期增量是多少?” ALE包含直接损失和法规或法律成本,因此它是捕获停机成本的好方法。
答案 3 :(得分:0)
“独立”==“桌面”吗?
用户如何与拥有消息驱动bean的控制器进行交互?
我对你的问题的看法:
答案 4 :(得分:0)
0.1。在队列上创建更多侦听器可以扩展使用者数量。当消费者死亡时,剩下的消费者可以继续运行。注意:您的MQ和数据库也需要具有高可用性解决方案。
0.2。不确定应用程序服务器在您的情况下会有什么区别。也许您可以解释一下您打算使用哪些功能?
0.3。对于HA,请参阅我的答案。
答案 5 :(得分:0)
你试过制作多个盒子吗? 我想你可能会看到你的MQ的文档? 运行多个框可能需要在MQ中进行一些配置,但它将运行ISA