我来自客户端编程背景(主要是C ++)。但是,我现在偶尔需要进入Java和Java的一些小型服务器端项目。因此需要经验丰富的服务员方面的一些建议。我对应用程序服务器的了解并不多。
是否有任何拇指规则或注意事项来决定程序何时需要应用程序服务器(如GlassFish或JBoss)?
我有两台用Java编写的服务器都在专用机器上运行。一台服务器在没有任何App Server的Tomcat上运行。第二台服务器在应用程序服务器(Glassfish)上运行。
我需要编写一个位于中间的相当简单的程序。这就是程序将要做的事情
听一个套接字。当连接来自第一台服务器时,它会创建一个线程来接受连接&继续听。
线程从第一台服务器获取少量数据(例如100-200字节),对数据进行非常小的格式化。通过webservice调用将其传递给第二台服务器。它接受webservice调用的返回值,并基于它进行一些处理 - 可能是大约10-20行代码 - 这不是一些主要的处理 - 只是在不同的(第三)服务器上的一些webservice调用。在此之后,它将一些数据返回给第一台服务器 - 再次不多 - 可能是50字节。
我的程序不是网络服务。它只是以特定格式从第一台服务器获取消息。根据从第一台服务器收到的数据,对第二台服务器进行Web服务调用。在某种程度上,您可以通过这种方式来考虑它 - 它充当第一台服务器的代理,以便对第二台服务器进行Web服务调用。
所有主要工作都是由运行在Tomcat服务器上的应用程序运行的第一台服务器完成的。在GlassFish上运行的Web服务。这些都是经过良好测试的程序。我想写的中间程序非常简单&我可以在半天内完成。但是,我担心的是它是否能够承受负荷。
有什么样的规则/注意事项可以确定我是否可以将此Java程序作为常规Windows服务运行,还是需要Glassfish或任何其他Application Server。
我应该考虑每分钟/小时的连接数量吗?我将为每个连接分配一个线程,但线程本身不会很长。我应该考虑应用服务器的连接数阈值?还有其他考虑因素吗?如果可能的话,我更倾向于避免使用Application Server。
是否在App Server下运行它只是一个问题 - 我在这里还有其他问题吗?
答案 0 :(得分:4)
应用程序服务器并不神奇,因为它们不能创造更好的性能。实际上,对于像您所概述的简单应用程序,应用程序服务器可能会产生相反的效果,因为大多数应用程序服务器都会引入所有额外开销。
应用程序服务器提供基础架构组件,用于企业级开发的实用模式以及标准规范的实现。它们主要用于组织更大规模的开发工作,并为大量相对短暂的连接设置规模。也就是说,如果您已经熟悉它们提供的基础架构,可以使用Tomcat或Jetty等轻量级服务器。特别是,它们将为您提供入站HTTP连接处理。
我认为,基于您的问题描述,您最好使用Apache HttpComponents之类的库来编写独立的Java服务来处理HTTP和WebService客户端功能。目前尚不清楚处理入站连接需要多少额外工作。如果是简单的套接字,那么很容易自己编程。
关于您需要同时支持多少个连接的描述是模糊的(而且都是相对的)。如果每个连接需要一个线程并且希望支持数百个连接,那么我建议使用线程连接池实现连接处理,确保在耗尽服务器功能之前阻止新连接。如果走这条路线,请查看Java 5+ ExecutorService及相关课程。
我怀疑如果您的需求很简单,应用服务器将提供很多好处。
答案 1 :(得分:1)
评估任何工具时的基本规则也应适用于此:它是否会使我的工作更轻松。
所以问题是:应用服务器为我的用例提供的功能是否有用,限制不会限制我。
根据您的用户案例说明:
JavaEE
应用服务器将提供Servlet抽象,以便轻松管理HTTP
请求(理论上,您可以通过向实现中添加新内容来实现其他类型的请求。应用程序服务器)。它还将通过Jax-WS
或Jax-RS
抽象提供给Web服务端点创建。
这些抽象的成本是应用服务器将管理线程。大多数实现都将使用线程池进行HTTP
连接,因此不需要为每个请求创建线程。
此外,完整的JavaEE
将为您提供简单的声明式事务和安全性(EJB
),与JMS
及其他人的永久性消息传递。
由您来平衡所提供抽象的附加值和它们的成本(控制较少,在大多数情况下,较少的控制将导致更好的行为,因为Java标准已经与大多数用例相匹配,然后更好地执行比一般的程序员代码......)。
因此,在您的情况下,您应该检查您需要的功能,使用最简单的方法(quickets)来满足您的功能,并使POC进行负载测试。
顺便说一句,Tomcat 是一个应用服务器,它只是没有实现所有JavaEE部分,它只实现了basique web相关功能(servlet,但默认情况下没有WS或restfull ws但是这可以通过libs轻松添加)。新的Jboss和Glassfich提供了更多的功能(在部署时轻松加载),其大小和性能与Tomcat相似。
答案 2 :(得分:1)