我正在将胖客户端代码移植到具有瘦客户端的服务器架构中。
服务器需要为每个客户端运行一个代码实例。代码是多线程的,可以运行很长时间(几周),但只是偶尔与客户端进行交互。客户数量将达到数千。每个客户端需要大约20MB的堆。
我现在有两个选择,
我可以看到每个人的利弊。对于多个JVM:
优点:
缺点:
您有推荐的最佳做法吗?
你知道有关这个问题的任何好的参考书/文章吗?
是否存在仅使用一个JVM但运行多个代码副本的框架,就好像它是单独的进程空间(资源有限等)?
答案 0 :(得分:3)
遗憾的是,不可能在单个JVM中基于线程限制资源。但是,我仍然会尝试将您的应用程序移植到单个JVM中,原因如下:
使用单一应用程序方法,除非您真的无法控制用户可以启动哪些任务。
答案 1 :(得分:1)
您可以创建一个Web服务/代理服务,为每个客户端启动JVM,将其关闭。这将使您能够从长时间运行的客户端中删除请求/ JVM。
代理服务器可以为客户端提供一个他们需要与之通信的端口,因为服务器会将请求转发给该客户端正在运行的JVM。
顺便说一句:如果有许多客户端正在运行CPU密集型作业,那么只有很多内核可供使用。您可能会发现JVM需要跨多台计算机运行才能支持所有客户端。