Web应用程序在群集环境中的要求是什么

时间:2011-05-06 15:47:48

标签: java java-ee-6 cluster-computing

我需要检查现有的Web应用程序是否已准备好部署在集群环境中。
群集
几个Linux盒子。该流程由负载均衡器控制,该负载均衡器使用简单的循环算法和粘性会话 的应用 无状态(希望)java Web应用程序,它从后台检索内容并对其进行适当格式化。

我可以访问源代码。我应该检查代码以确保它将在群集中运行?

  • 检查某些内容是否未缓存在存储应用程序状态的内存或文件系统中。
  • ......还有别的吗?

4 个答案:

答案 0 :(得分:0)

如果您正在使用EJB(如果您访问数据库时建议使用EJB),那么这里是一个限制列表:

http://java.sun.com/blueprints/qanda/ejb_tier/restrictions.html

我猜类似的限制适用于网络应用程序。

答案 1 :(得分:0)

检查应用程序的最简单方法是首先让它在具有相同数据的2台服务器上运行,这样在启动时两者都处于相同的状态。让我们假设一个用户完成一个操作,浏览器会向你的网络应用程序发出2个连续的HTTP请求 - 你需要做的就是点击第一个呼叫的网络服务器1和第二个呼叫的网络服务器2;然后尝试相反的方式,然后将两个请求转到同一个Web服务器 - 如果每次您很可能获得相同的结果,那么您就可以使用现成的群集应用程序。 (这并不意味着应用程序 IS 已准备好进行集群,因为它可能存在对象状态等,它存储在内存中,不容易从前端发现,但是它给出了更高的概率 IT MIGHT BE 可以在群集中运行。)

答案 2 :(得分:0)

如果它真正“无国籍”,那就没有问题,你可以随时提出任何服务器的任何请求,一切都会正常工作。大多数事情都不是那么容易,所以当任何类型的状态从客户端移动到服务器或者存储在后端时,任何类型的状态都必须从页面流入和流出,并且具有来回传递的某种令牌为了从您正在使用的任何共享数据存储中检索它。如果他们正在使用HttpSession,那么从会话中检索到的任何内容(如果已修改)都需要使用session.setAttribute(key,value)重新设置到会话中。此设置属性充当一个信号,表示会话中存储的任何内容都需要复制到冗余服务器。确保会话中存储的任何内容都实现,实际上是Serializable。有些服务器允许你存储对象,(我正在看你weblogic),但是当它试图复制对象时会抛出异常。我有很多同事抱怨说不得不把东西放回会议应该是多余的,也许应该是,但这只是事情的运作方式。

答案 3 :(得分:0)

如果做得好,拥有州不是一个大问题。无论如何,所有应用程序都有状态。即使提供某种静态文件,与URL关联的文件内容也确实是状态的一部分。

问题在于如何传播和共享此状态。

  • 用户会话中的状态是没有道理的。使用会话复制机制(节点崩溃时缓慢但没有会话丢失)或会话粘性负载均衡器,您的问题就解决了。

所有其他共享状态确实是个问题。特别是即使缓存状态也必须共享并且完全一致,否则同一页面上的刷新可能会随机生成不同的结果,具体取决于巫婆网络服务器,从而导致您点击的缓存。

您仍然可以使用共享缓存(如ehcache)缓存数据,或者无法返回会话粘贴。

我想很难确定应用程序确实可以在集群化的环境中工作,因为在一些不起眼的服务中是单例,某个地方是静态成员,任何东西都可能产生奇怪的结果。您可以肯定地验证通用架构,但是在开始生产之前,您需要实际执行并执行一些验证测试。