6

我们目前正在 Linux 机器上运行 Java 集成应用程序。首先是应用程序的概述。

Java 应用程序是一个独立的应用程序(未部署在任何 Java EE 应用程序服务器上,如 OracleAS、WebLogic、JBOSS 等)。独立我的意思是它不是桌面应用程序。但是,它是从 Main 类的命令行运行的。用户根本不直接与此应用程序交互。使用 API 将消息转储到队列中,然后由我的应用程序读取,该应用程序 24/7 持续运行。我不认为这是一个桌面应用程序,因为用户没有直接与之交互。(不确定这是否是有资格成为一个的正确理由)。

它使用 Spring 并连接到 WebSphere MQ 和 Oracle 数据库 我们使用 Spring 侦听器(Spring Message Driven POJOs)来侦听 WebSphere MQ 上的队列。一旦队列中有消息,应用程序从 MQ 读取消息并将其转储(插入/更新)到数据库中。

现在的问题是:

  1. 我们如何水平扩展这个应用程序?我的意思是只放置更多的盒子并运行同一个应用程序的多个实例,这是一种可行的方法吗?
  2. 我们是否应该考虑从 Spring MDP 迁移到 EJB MDB?从而将其部署在 Application Server 上。这样做有什么额外的好处吗?
  3. 是否有请求使应用程序高可用(HA)?可以采用哪些建议的方法或策略来制作独立的应用程序 HA?
4

6 回答 6

3

另一个选择是Terracotta,一个完全满足您需求的框架;同时在多台机器上运行您的应用程序并平衡它们之间的负载。

于 2009-02-18T17:19:29.870 回答
2

随着数据需求的增加,任何应用程序的水平扩展最终都会遇到限制。这些限制由负载和服务器/数据库性能决定。在某些时候,如果需求和负载随着扩展而增加,服务器/数据库的数量也必须增加。根据存储的数据,服务器/数据库要么必须被复制和同步,要么需要采用某种散列算法在多个服务器之间拆分数据。随着您增加同步数据源的数量,复制/同步这些服务器的成本也会增加。这就是为什么散列方法可能更有吸引力以最小化成本。

真正的高可用性解决方案实施起来非常昂贵。我也看到了不同程度的 HA,但根据定义,它意味着绝对最小或没有停机时间,或者失去对数据源的访问权限。为了实现这一点,需要大量冗余硬件、网络和软件,这些硬件、网络和软件能够在其中一个数据源发生故障时利用冗余硬件而不会失去获取数据的能力。硬件故障是不可避免的,它会发生,还有断电和其他随机自然行为。根据这些数据的重要性,HA 解决方案还需要多个独立电网上的多个数据中心。这显然会非常昂贵,所以这完全取决于这些数据对最终用户的重要性。

因此,HA 是一个需要昂贵架构的极端场景。我发现大多数时候人们只对最小化停机时间感兴趣,并且根据数据源的大小,这可以通过添加数据源的热备件相当便宜地实现。

于 2009-02-18T15:41:16.970 回答
2
  1. 水平缩放消息驱动的应用程序很容易......大多数时候。您当然可以添加另一个在同一队列上运行的消息侦听器。不过要小心,因为您可能对消息的顺序有微妙的依赖关系。它们现在可能不是问题,只有一个处理器,但如果有多个处理器,您可以保证消息在某些时候会“乱序”处理。
  2. EJB MDP 不提供 Spring MDB 之外的任何东西。坚持什么是有效的。
  3. 水平扩展处理器是一个开始,但这需要更多讨论。

对于 HA,您需要明确要求。“高可用性”对于基于队列的应用程序来说是一个有趣的问题。如果您的应用程序出现故障几分钟,消息就会堆积在队列中。只要您可以让您的应用程序重新启动并运行,这些消息仍将得到处理,只是延迟时间更长。可能值得问:“消息的最大可接受延迟是多少?”

可能存在一些关于硬件故障、数据中心丢失等方面的担忧。这些不会通过在同一位置进行水平扩展来解决。您需要在每一层复制所有组件:队列本身、处理器、后端数据库以及连接它们的所有网络硬件。

这是一个昂贵的提议,因此也值得一问,“HA 场景和非 HA 场景之间的停机时间预期损失的年化损失是多少?” ALE 包含直接损失和监管或法律成本,因此它是捕获停机成本的好方法。

于 2009-03-15T17:24:39.460 回答
1

“独立”==“桌面”吗?

用户如何与拥有消息驱动 bean 的控制器交互?

我对你的问题的看法:

  1. 您可以通过向侦听器池添加更多消息侦听器来进行扩展,因为每个侦听器都在自己的线程中运行。您应该将数据库连接池的大小与消息侦听器相匹配,这样也必须增加。在添加更多服务器之前执行此操作。确保您手头有足够的 RAM。
  2. 我看不出 EJB MDB 比 Spring MDB 给你带来了什么。您一直提到“应用服务器”。您是指 WebLogic、WebSphere、JBOSS、Glassfish 等 Java EE 应用服务器吗?因为如果您在 Tomcat 上部署 Spring,我会认为 Tomcat 是本次对话中的“应用服务器”。
  3. HA 意味着负载平衡和故障转移。您需要拥有同步或可热重新部署的数据库。与队列相同。F5 是一个很好的负载平衡硬件解决方案。如果你有一些,我会和你的基础设施人员谈谈。
于 2009-02-18T14:33:55.383 回答
0

.1。在队列上创建更多的侦听器可以扩展消费者的数量。当一个消费者死亡时,剩余的消费者可以继续运行。注意:您的 MQ 和数据库也需要具有高可用性解决方案。

.2. 不确定应用程序服务器会对您的情况产生什么影响。也许您可以解释您打算使用哪些功能?

.3. 请参阅我对 1. 对于 HA 的回答。

于 2009-03-15T18:27:26.143 回答
0

你试过做多个盒子吗?我想你可能会看到你的 MQ 的文档?运行多个盒子可能需要在您的 MQ 中进行一些配置,但它会运行 ISA

于 2009-07-08T14:52:28.483 回答