扩展 Java EE 应用程序的阶段
Stages of scaling a Java EE application
我真的很好奇专业程序员如何扩展 Web 应用程序。我进行了大量的研究工作,但未能获得有关扩展阶段的信息,这可能与服务器性能取决于许多因素这一事实有关。但是,我很确定可以大致确定一些细节。
例如,
1.)单个 Tomcat 服务器可以处理多少个并发请求,具有良好的实现和良好的硬件?
2.)什么时候应该涉及负载均衡服务器?
3.)完整的 Java EE 堆栈 (JBoss/Glassfish) 什么时候开始有意义?
我觉得这有点基于意见,但最终,"it depends"。
例如,Tomcat 可以处理多少负载?这取决于。如果您为每个请求发送一个静态 HTML 页面,那么答案是 "alot"。如果您每次都尝试计算前 100,000 个质数,那么可能不会太多。
一般来说,最好尝试将您的应用程序设计为 clustering/distributed 使用。不要在会话中指望太多 - 保持会话同步可能会很昂贵。尽最大努力使每个方法真正无状态。有时这可能很难,因为消费者(即网站)可能必须在每次调用时传递更多信息,以便任何集群机器都知道请求的当前状态。等等。
我将 Web 应用程序从 Tomcat 转移到 Glassfish,然后是 Wildfly,因为我想利用一些额外的 Java EE 功能 - 特别是 JMS、CDI 和 JPA。我本可以使用 TomEE 并将其固定,但具有统一管理 UI 的统一环境也是一个很好的好处。不过,您可能永远不需要这样做。您可以很容易地将所需的部分(即 CDI 和 JPA)添加到 Tomcat。
请注意,我没有从 Tomcat 迁移到完整的 EE 服务器以提高性能 - 我想利用 EE 堆栈的更大一部分。虽然 Wildfly 有一些管理界面可以让管理集群更容易一些,但我仍然可以毫无问题地使用 Tomcat。
所以,再一次,"it depends"。如果您不需要比 Tomcat 提供的完整 EE 服务器更多的 EE 堆栈,则很可能有点矫枉过正。将一组 Tomcat 服务器置于 Apache HTTPD 负载均衡器(或亚马逊负载均衡器)之后,并置于同样集群化的数据库之上,实施起来还算不错。如果这对你来说足够了,那么我会坚持下去。不要为了性能而跳转到 Wildfly 等,因为您不太可能看到任何方向的巨大变化。
我真的很好奇专业程序员如何扩展 Web 应用程序。我进行了大量的研究工作,但未能获得有关扩展阶段的信息,这可能与服务器性能取决于许多因素这一事实有关。但是,我很确定可以大致确定一些细节。
例如,
1.)单个 Tomcat 服务器可以处理多少个并发请求,具有良好的实现和良好的硬件?
2.)什么时候应该涉及负载均衡服务器?
3.)完整的 Java EE 堆栈 (JBoss/Glassfish) 什么时候开始有意义?
我觉得这有点基于意见,但最终,"it depends"。
例如,Tomcat 可以处理多少负载?这取决于。如果您为每个请求发送一个静态 HTML 页面,那么答案是 "alot"。如果您每次都尝试计算前 100,000 个质数,那么可能不会太多。
一般来说,最好尝试将您的应用程序设计为 clustering/distributed 使用。不要在会话中指望太多 - 保持会话同步可能会很昂贵。尽最大努力使每个方法真正无状态。有时这可能很难,因为消费者(即网站)可能必须在每次调用时传递更多信息,以便任何集群机器都知道请求的当前状态。等等。
我将 Web 应用程序从 Tomcat 转移到 Glassfish,然后是 Wildfly,因为我想利用一些额外的 Java EE 功能 - 特别是 JMS、CDI 和 JPA。我本可以使用 TomEE 并将其固定,但具有统一管理 UI 的统一环境也是一个很好的好处。不过,您可能永远不需要这样做。您可以很容易地将所需的部分(即 CDI 和 JPA)添加到 Tomcat。
请注意,我没有从 Tomcat 迁移到完整的 EE 服务器以提高性能 - 我想利用 EE 堆栈的更大一部分。虽然 Wildfly 有一些管理界面可以让管理集群更容易一些,但我仍然可以毫无问题地使用 Tomcat。
所以,再一次,"it depends"。如果您不需要比 Tomcat 提供的完整 EE 服务器更多的 EE 堆栈,则很可能有点矫枉过正。将一组 Tomcat 服务器置于 Apache HTTPD 负载均衡器(或亚马逊负载均衡器)之后,并置于同样集群化的数据库之上,实施起来还算不错。如果这对你来说足够了,那么我会坚持下去。不要为了性能而跳转到 Wildfly 等,因为您不太可能看到任何方向的巨大变化。