我正在探索Azure平台,但我遇到了问题。
实际上,有些东西我没有得到......
我理解Web角色和辅助角色之间的区别。 但是如何专门为Java应用程序创建Web角色?
因为在eclipse中为azure开发java应用程序时,我们必须复制/粘贴一个java服务器(我选择了tomcat7)+ jdk。我假设它只是在模拟器中运行java应用程序。
但是,当将应用程序部署为azure作为webrole时.....它是仅上传war包+ xml配置文件(cscfg和其他)还是上传服务器和jdk? 我尝试使用“Cloud”参数而不是“Emulator”参数构建项目,它创建了一个150Mb的巨大cspkg文件......每次我必须更新应用程序时,我认真无法上传150Mb ...
为什么不允许上传.war文件?如果我们必须上传服务器分发,那么如何设置故障转移和会话复制?
我可能会错过一些东西......
感谢您的回答
编辑:
实际上,根据我从网上读到的内容,Azure应用程序本身不是由Java处理的,因此您必须在程序包内部提供自己的应用程序服务器(tomcat,glassfish等..),启动脚本将在你的应用程序里面运行服务器。每次要重新部署新软件包时,都必须上传jre +服务器二进制文件+应用程序代码。
没有内置支持会话复制或任何东西。如果您希望会话在多个实例之间“可共享”,则必须使用表存储服务来存储会话信息。
注意:使用eclipse,最新的插件允许你设置粘性会话,但我不知道更多关于它的事情
因此,Java应用程序不是作为webrole部署的,而是作为辅助角色添加自己的服务器。
Webroles仅适用于.NET和PHP应用程序。
如果我错了,请纠正我。
答案 0 :(得分:1)
你是对的。通常,您也可以在Web角色中运行java / Tomcat,但在Web角色中,IIS中必须至少有一个站点(不要将端口80绑定到此站点,因为IIS和Tomcat无法共享TCP端口)。
您应该尝试使用Azure VM Role。在此方案中,您可以在本地创建具有所有系统要求(JRE,Tomcat,...)的虚拟macine。您将此虚拟映像上载到Azure作为VM角色的模板。现在您只能上传您的应用程序文件。
您还可以使用starup任务加速上传/部署过程,该任务从Blob存储中下载并解压缩JRE和Tomcat。 Azure Bootstrapper可以帮助您。
答案 1 :(得分:1)
感谢您的回答。
这带来了另一个问题:当您部署新版本的Java包时,“幕后”会发生什么?
让我们假设tomcat发布了一个主要的安全修复程序,您需要使用新版本的tomcat,方法是将其嵌入到cspkg(heavyyyyy)中,或者,正如您(David)建议的那样,通过存储在blob中(光!!)当然,几乎没有更新的java代码。您可以在已运行的实例上部署此程序包。
他们会怎么样?他们用新包装重新启动吗?它会产生新的实例并杀死当前运行的吗?它是否会在每个实例中杀死正在运行的应用程序服务器并在新包中运行新服务器? (非持久性)本地存储(如果用作廉价缓存)会发生什么?使用中的会话会发生什么(如果它们没有存储在blob中但只存储在内存中)?
Azure中是否有不同Java服务器的基准/比较表? (内存占用,并发连接等。
我的问题可能看起来很奇怪,但我目前正在使用Google App Engine(并且愿意转移到Azure),我必须采取的部署/更新应用程序的唯一操作就是单击eclipse中的Deploy按钮。所以目前,事情仍然令人困惑。 但实际上,你必须上传自己的jre和你自己的应用程序服务器这一事实增加了很多自由。它在PaaS中带来了一块IaaS。