Java 独立应用程序的可扩展性和高可用性

Fra*_*lin 6 java spring scalability high-availability

我们目前正在 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?从而将其部署在应用程序服务器上。这样做有什么额外的好处吗?
  3. 有使应用程序高可用 (HA) 的请求?可以采用哪些建议的方法或策略来制作独立的应用程序 HA?

duf*_*ymo 1

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

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

对于你的问题我的看法:

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