1

我正在探索 Azure 平台,但遇到了问题。

其实,有一点我不明白...

我了解网络角色和工作者角色之间的区别。但是如何专门为 Java 应用程序创建一个 Web 角色?

因为在eclipse中为azure开发java应用程序时,我们必须复制/粘贴一个java服务器(我选择了tomcat7)+ jdk。我假设它只是在模拟器中运行 java 应用程序。

但是,将应用程序部署到 azure 作为 webrole 时.....它是仅上传 war 包 + xml 配置文件(cscfg 和其他文件)还是还上传服务器和 jdk ?我尝试使用“Cloud”参数而不是“Emulator”参数来构建项目,它创建了一个 150Mb 的巨大 cspkg 文件……我每次必须更新应用程序时都无法上传 150Mb……

为什么不允许上传 .war 文件?如果我们必须上传服务器分布,那么故障转移和会话复制如何设置?

我可能想念什么...

感谢您的回答


编辑 :

实际上,从我从网上了解到的情况来看,Java 应用程序并不是由 Azure 原生处理的,因此您必须在包内提供自己的应用程序服务器(tomcat、glassfish 等),并且启动脚本将运行服务器里面有你的应用程序。每次要重新部署新包时,都必须上传 jre + 服务器二进制文件 + 应用程序代码。

没有对会话复制或任何东西的内置支持。如果您希望会话在多个实例之间“可共享”,则必须使用表存储服务来存储会话信息。

注意:使用 eclipse,最新的插件允许您设置粘性会话,但我对此一无所知

因此,Java 应用程序不会部署为 webrole,而是部署为工作角色,您可以在其中添加自己的服务器。

Webroles 仅适用于 .NET 和 PHP 应用程序。

如我错了请纠正我。

4

2 回答 2

1

谢谢你们的回答。

这带来了另一个问题:当您部署新版本的 java 包时,“幕后”会发生什么?

让我们想象一下 tomcat 发布了一个主要的安全修复程序,您需要使用新版本的 tomcat 或者通过将其嵌入到 cspkg(heavyyyyy)中,或者按照您(David)的建议,通过存储在 blob 中(light !!)和当然,Java 代码更新很少。您将此包部署在已运行的实例上。

他们怎么了?他们是否使用新软件包重新启动?它会产生新实例并终止当前运行吗?它是否会杀死每个实例中正在运行的应用程序服务器并在新包中运行新的应用程序服务器?(非持久性)本地存储(如果用作廉价缓存)会发生什么?正在使用的会话会发生什么(如果它们不存储在 blob 中而仅存储在内存中)?

Azure 中是否有不同 Java 服务器的基准/比较表?(内存占用、并发连接等。

我的问题可能看起来很奇怪,但我目前正在使用 Google App Engine(并愿意迁移到 Azure),而部署/更新应用程序唯一要做的就是单击 Eclipse 中的部署按钮。所以目前,事情仍然很混乱。但实际上,您必须上传自己的 jre 和自己的应用程序服务器这一事实增加了很多自由度。它在 PaaS 中带来了一块 IaaS。

于 2012-02-06T10:13:52.457 回答
1

你说的对。一般来说,您也可以在 web 角色中运行 java/Tomcat,但在 web 角色中,IIS 内必须至少有一个站点(不要将端口 80 绑定到该站点,因为 IIS 和 Tomcat 不能共享 TCP 端口)。

您应该尝试使用 Azure VM Role在这种情况下,您可以在本地创建具有所有系统要求(JRE、Tomcat、...)的虚拟机。将此虚拟映像作为 VM 角色的模板上传到 Azure。现在您只能上传您的应用程序文件。

您还可以使用从 Blob 存储下载和解压缩 JRE 和 Tomcat 的启动任务来加快上传/部署过程。Azure 引导程序可以帮助你。

于 2012-02-05T23:05:57.033 回答