在Amazon AWS上使用Glassfish集群无状态Java EE应用程序

时间:2011-10-02 22:37:23

标签: java java-ee glassfish amazon-web-services jms

在分布式环境中部署无状态Java EE 6应用程序以实现高可用性和可伸缩性的最佳方法是什么?我的申请是无国籍的。因此,我不需要复制任何会话状态(HTTP会话,EJB状态bean等)

具体来说,我想知道以下内容:

  • 我是否需要Glassfish 3.1的群集功能(假设我不需要复制会话状态)?
  • 我大量使用JMS队列和消息驱动Bean。如何设置JMS以使其在群集环境中工作?
  • 我也在使用EJB计时器服务。这在群集环境中如何工作?除了使用共享数据库存储计时器(而不是嵌入式Derby DB)之外,还有什么我需要做的吗?

我计划使用Amazon AWS(具有多AZ部署的RDS,弹性负载平衡,EC2)。

3 个答案:

答案 0 :(得分:11)

我处于类似情况,我现在正在发现GF群集对我能做什么/不能做什么。

Re 1)我是否需要Glassfish 3.1的集群功能

由于您的EJB是无状态的,因此您不需要GF集群进行会话/状态复制(正如您自己所说)。您可以设置多个独立实例,并将应用程序单独部署到它们。但是,即使在无状态应用程序中,我发现GF集群的好处非常值得 - 从管理的角度来看。

GF群集将确保配置自动应用于所有实例。 JNDI会自动复制。应用程序自动部署。这是一个向外扩展并添加其他实例的命令 - 不久之后,您的群集将得到扩展,新实例已配置,部署,启动并准备就绪。对我来说,只要我有超过1个实例,这就是行政天堂和足够理由使用GF集群!

要考虑的一件事(我现在正在努力解决这个问题)可能是分布式/协调的L2缓存,以防您的应用程序与数据库通信。

重新2)...如何设置JMS以使其在群集环境中工作?

不确定我理解你的问题......如果你想在GF之外拥有一个高可用的消息代理,你需要相应地设置它并自己管理它。例如,ActiveMQ有几种设置群集/ HA /横向扩展的方法。如果您使用GF提供的OpenMQ,则设置GF群集还会提供群集消息代理。开箱即用。

但是经纪人聚类本身就是一个话题,不容小觑。您可能需要考虑持久性和共享消息存储等 - 无论使用外部还是GF提供的集群代理。

如果JMS是您申请中不可或缺的一部分,我建议您对经纪人给予适当的关注。我可能不会使用GF代理,而是使用单独的代理群集(关注点分离;例如,您可以相互独立地升级GF /代理)。

Re 3)EJB计时器服务...除了使用共享数据库存储计时器之外,还有什么需要做的吗?

如果您需要计时器仅在您的(appserver-)实例组中自动触发一次,我相信您执行需要GF群集(当然还有共享数据库)。否则我不知道,每个实例应该知道它是否应该开火。但是,这很容易测试...

<强> TL;博士

  • 使用GF群集保存管理工作
  • 使用外部的,易于理解的高可用消息代理
  • 为EJB计时器使用共享数据库

答案 1 :(得分:2)

我对你各自观点的看法:

1)会话复制是集群管理的一部分,它不是创建集群服务器环境的目标。您从群集中获得的好处是:

  • 改进的可扩展性
  • 更高的可用性
  • 更大的灵活性 群集的副作用是基础架构复杂性,额外设计和代码要求等的增加。因此,如果您正在考虑群集,那么您的决策应该由诸如您希望应用程序的可扩展性,可用性和灵活性等因素驱动。

2)您可以将Apache ActiveMQ与glassfish服务器一起使用,以使您的JMS在集群环境中工作。

3)我认为共享DB应该足够了

答案 2 :(得分:0)

如果您真的希望应用程序顺利运行,您可能需要一个工业级EJB框架....但是,您当然不仅限于玻璃鱼。需要记住的重要一点是EJB是一个规范,不一定限于任何一个实现!

  

1)我是否需要Glassfish 3.1的群集功能(假设我不需要复制会话状态)?

不,你绝对没有。如果您的申请是无国籍的,那么Glassfish就没有必要了。

  

2)我大量使用JMS队列和消息驱动Bean。如何设置JMS以使其在群集环境中工作?

JBoss是一个选项。我JBOSS集群服务只是重新选择新的主节点来管理消息,如果一个发生故障,那么可用性是可靠的。

  

3)我也在使用EJB计时器服务。这在群集环境中如何工作?除了使用a之外还有什么我需要做的吗?   共享DB用于存储计时器(而不是嵌入式Derby DB)?

如果您使用weblogic或Jboss ejb实现,则可以透明地对时间进行聚类。在这种情况下,我认为您不需要嵌入式数据库:框架可以直接处理:http://community.jboss.org/wiki/DeployingEJB3TimersInCluster