<分区>
我正在将胖 Java 客户端代码移植到具有精简客户端的服务器架构。
服务器需要为每个客户端运行一个代码实例。该代码是多线程的,运行时间很长(数周),但只是偶尔与客户端交互。客户数量将达到数千。每个客户端需要大约 20MB 的堆。
我现在有两个选择,
- 在服务器上为每个客户端启动一个单独的 JVM
- 修改我的代码,以便所有请求和计算都在每个客户端的共享空间中完成(就像在网络应用程序中一样)
我可以看到每一个的优点和缺点。对于多个 JVM:
优点:
- 进程是独立的,如果一个进程挂起就杀死它并重新启动。所有其他人都不会在意。
- 可以限制资源,这样一个客户端就不会吃光所有的 CPU/内存
- 轻松分布在多台机器上
缺点:
- 多次加载完整的JRE类库
- 不是 Java EE 的做事方式
- 是否每个客户端都需要通过单独的端口进行通信?
您有推荐的最佳做法吗?
你知道关于这个主题的任何好的引用书/文章吗?
是否有一个框架只使用一个 JVM 但运行多个代码副本,就好像它是单独的进程空间(资源有限等)?