繁体   English   中英

如何构建分布式Java应用程序?

[英]How to build a distributed java application?

首先,我有一个概念性的问题,“分布式”这个词是否只意味着应用程序在多台机器上运行? 或者还有其他方法可以将应用程序视为分布式(例如,如果有许多独立的模块在同一台机器上进行交互,这是分布式的吗?)。

其次,我想建立一个执行四种类型任务的系统,会有多个客户,每个客户都会定期运行每种类型的许多任务。 例如:customer1今天将有task_type1,两天后会有task_type2,依此类推,可能会有customer2同时执行task_type1,如customer1的task_type1。 即需要并发。 执行任务的配置将存储在DB中,这些任务的结果也将存储在DB中。 客户将使用Web浏览器(html页面)中的系统与系统交互(基本上,配置任务并查看结果)。 我想过使用一个休息webservice(使用JAX-RS),其中html页面将与后端通信并在后端使用线程进行并发执行。 问题:

  1. 这听起来很简单,但我是朝着正确的方向前进吗? 或者我应该使用其他技术或概念,例如Java Beans?

2.如果我的方法很好,我是否需要使用像JSP这样的脚本语言,或者我可以直接将html表单提交给其他URL并获得结果(例如使用JSON)?

  1. 如果我想分发应用程序,我的想法是否可行? 如果不是我需要使用什么?

很抱歉有很多问题,但我对此感到很困惑。

我只想在已发布的答案中添加一点。 请大家指点我的评论,因为我构建的所有Web应用程序都只在一台服务器上运行(除了部署到Heroku的应用程序,可能会为您“分发”您的应用程序)。

如果您认为可能需要分发应用程序以实现可伸缩性,那么您首先要考虑的不是 Web服务,多线程和消息队列以及Enterprise JavaBeans和...

首先要考虑的是您的应用程序域本身以及应用程序将要执行的操作。 CPU密集型部件在哪里? 这些部分之间有什么依赖关系? 系统的各个部分是否会自然地分解为并行进程? 如果没有,你能重新设计系统吗? 重要提示:线程/进程之间需要共享哪些数据(无论它们是在相同还是不同的计算机上运行)?

理想的情况是每个并行线程/进程/服务器可以获得自己的数据块并在其上工作而无需共享。 更好的是,如果系统的某些部分可以变为无状态 - 无状态代码可以无限可并行化(轻松自然)。 并行进程之间更频繁和细粒度的数据共享,应用程序的可伸缩性越低。 在极端情况下,您可能甚至无法通过分发应用程序来提高性能。 (你可以用多线程代码看到这一点 - 如果你的线程经常争用相同的锁,你的程序甚至可能比多线程+ CPU更慢,而不是一个线程+ CPU。)

要完成的工作的概念性细分比实际用于分发应用程序的工具或技术更重要。 如果您的概念分解是好的,那么如果您只使用一台服务器,那么稍后分发应用程序将会容易得多。

术语“分布式应用程序”意味着应用程序系统的各部分将在不同的计算节点上执行(这些计算节点可以是不同机器上或同一机器上的多个CPU /核心之间的不同CPU /核心)。

关于如何构建系统的问题有许多不同的技术解决方案。 因为您询问Java技术,所以您可以使用Google的Web Toolkit构建Web应用程序,这将为您提供丰富的基于浏览器的客户端用户体验。 对于系统的服务器部署部分,您可以使用在诸如Tomcat之类的servlet容器中运行的简单servlet开始。 将使用基于HTTP的远程过程调用从浏览器调用您的servlet。

稍后,如果遇到可伸缩性问题,您可以开始将业务逻辑的一部分迁移到EJB3组件,这些组件本身最终可以部署在应用程序服务器的上下文中的许多计算节点上,例如Glassfish。 我认为你不需要解决这个问题,直到你运行它。 很难说您是否会更多地了解客户将要执行的任务的性质。

要回答您的第一个问题 - 您可以将表单直接提交给其他网址。 显然,这完全取决于您的要求。

正如@AlexD在上面的评论中提到的,你并不总是需要分发一个应用程序,但是如果你想这样做,你应该考虑查看JMS ,这是一个消息传递API,它可以让你运行几乎任何工作者应用程序计算机的数量,从消息队列中准备消息并处理它们。

如果您想生成动态分布式应用程序,运行多个资源不足的虚拟机(例如Amazon EC2 Micro实例)或物理硬件,可以随意添加和删除以满足需求,那么您可能希望考虑将它与Project Shoal集成,后者是一个Java框架,允许集群应用程序节点,并让它们随时出现/消失。 Project Shoal使用JXTA和JGroups作为底层通信协议。

另一种方法可能是使用在应用程序服务器上运行的EJB来分发应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM