我打算使用一个webapp,每个使用它的人都会有一个客户端在其计算机上运行计算(因为这些计算无法在服务器上完成,负载太多......),然后发送结果发送到服务器。
我想会有很多人对我的应用程序感兴趣,这就是为什么我想知道我的架构是否良好以及我是否能够处理成千上万的人。
我计划通过JNDI与Glassfish服务器公开远程EJB,因此1000人可以同时使用这些EJB(我猜可能有5-50个请求/秒)来检索本地计算所需的数据,然后发送结果......
将EJB暴露给许多客户端是否代价高昂? 使用webservices,rmi,另一种解决方案会更好吗?
你会为我要做的事情推荐另一种架构吗?
答案 0 :(得分:7)
首先,从纯粹的架构角度来看,EJB用于构建分布式应用程序,Web服务是一种集成技术,它们并不真正相互竞争。在您的情况下,EJB将是一个自然的选择(我们正在谈论EJB3,对吗?)和会话bean可以很好地扩展。
其次,如果服务器端代码仅用于从数据库检索数据并在客户端计算后保存结果,那么应用服务器很可能不会成为数据库的瓶颈。换句话说,没有太多担心。
因此,既然您的客户端都是100%的Java客户端,我只会公开无状态会话bean 1 并避免SOAP / XML编组/解组和编写WSDL的开销(如果有一天你需要的话)将您的服务公开为Web服务,这仍然是可能的,并且很容易)。
1 您可以自行决定使用JPA或其他方式进行数据访问。
答案 1 :(得分:1)
我的2p是从客户端的角度来看,提供Web服务或XML / http客户端更容易,更标准。 一个好处是,如果它是SOAP Web服务,它们不需要是Java客户端。
答案 2 :(得分:0)
我在一个论坛上看到,在客户端检索实体可能是一个坏主意,因为代理被保留并产生流量
一个人在wireshark中测试了一个30ko序列化的300个对象生成的3.6mo网络流量列表,但是如果你使用EntityManager.clear()来分离实体,或者你使用pojos dto将类型返回到远程函数那么就可以了:)< / p>