`
thecloud
  • 浏览: 881959 次
文章分类
社区版块
存档分类
最新评论

在Windows Azure上运行Java程序

 
阅读更多

Windows Azure提供了充分的开放性,在IaaS层面,用户可以选择Windows或Linux虚拟机,这样用户可以运行各种程序。在PaaS层面,除了使用.NET之外,用户还可以使用Java, Python, Node.js, PHP, Ruby这5种语言。其中,Node.js, Python和PHP使用IIS作为Web服务器,Java使用的运行环境可由用户选择,如Tomcat, JBoss, Jetty, GlassFish等。同时,Azure为各种语言提供了SDK,从而方便各种程序调用Azure的各种服务,比如Storage、Service Bus等

Azure在计算部分的主要PaaS服务为Websites和Cloud Service。其中Websites是一组配置好的IIS集群,用户只需把应用代码文件通过FTP等方式上传,即可运行该应用。用户无法配置IIS以底层的OS。Cloud service比Websites更灵活,它为用户提供了IIS集群和Windows集群,用户同样只需要上传代码,但用户可以获得OS的管理员权限,可以安装各种服务器端软件,也可以修改各种配置。

由于Websites服务由IIS实现,所以.NET,Node.js, Python和PHP应用可以选择部署在Websites服务上或是Cloud Service上,而Java应用只能部署在Cloud Service上。即使如此,Java应用仍然可以从PaaS服务获得许多IaaS没有的好处。其中最大的好处是,PaaS环境可以提供更好的弹性,大幅度简化管理。在IaaS上,用户需要自己安装、部署Java中间件、部署应用,比如JDK和Tomcat,当应用的负载变化时,用户需要手动添加新的虚拟机实例,并且重复安装这些中间件并配置应用,而在Cloud service上,这些的安装配置都已由Cloud service运行环境完成,用户按一个按钮即可完成应用的扩容、收缩,甚至可以通过程序实现应用性能的监测并自动触发应用的扩容、收缩动作。这样可以让应用以更经济的方式快速响应流量变化。

下面是在Windows Azure下部署Java应用到Cloud Service的步骤。

首先,最好使用Eclipse EE版作为Java的开发环境:Eclipse IDE for Java EE Developers。可以从Eclipse网站下载http://www.eclipse.org/downloads/.

另外,我们还需要有一个可用的Azure订阅

启动Eclipse后,选择Help->install New software

输入dl.msopentech.com/eclipse作为插件安装源,然后选择所有插件,进行安装

安装会持续一段时间。这些插件包括:Azure开发环境、SQL server的JDBC驱动、Azure storage/queue/access controll service的API库

安装完毕后重启Eclipse。如果能看到工具栏上如下的按钮,代表Azure插件安装成功。

下面开始创建一个普通的Java项目。在菜单中选择File->New->Dynamic Web Project,输入项目名,并在Target runtime里面选择目标运行环境,如Tomcat 7.0。如果没有定义运行环境,点击New Runtime创建一个新的,建议选择Tomcat,然后指定Tomcat的安装路径。如果本机没有安装Tomcat,则需要先下载一个

创建之后开始添加第一个JSP文件。在菜单中选择File->New->New JSP File。选中刚才建立项目的WebContent作为目标路径,并文件名为index.jsp

创建完成后对文件进行编辑,添加如下内容

<body>
  <b><% out.println("Hello World!"); %></b>
</body>


这样一个简单的Java项目就完成了

下面要进行该项目的发布。为了发布需要创建一个Azure发布项目。在菜单中选择File->New->New Windows Azure Deployment Project. 为该发布项目起一个名字。在第二步中,选择Java运行所需的JDK

下面的部署选项有三个,它们代表了在云端使用JDK的方式:

  • 第一种方式是将本机JDK打包到部署包里,这样部署比较简单,但由于JDK比较大,会导致部署包太大而造成上传时间太长
  • 第二种方式是自动上传本机JDK到Azure存储账户,在云服务部署时,每台虚拟机会自动从存储账户下载JDK。这样首次发布后,Azure存储账户上就会保留一份JDK的拷贝,下次发布时就无需上传JDK了
  • 第三种方式是指定一个位置让虚拟机去下载JDK,这需要提前将JDK手动上传到某个网络地址或Azure存储账户

这里我们选择第二种方式。此时下面的URL和存储账户是空的,我们需要指定。首先,我们要去Azure门户上创建一个存储账户用来存放上传的文件

创建完存储账户后,进入存储账户管理页,记录存储账户名称、Blob服务的URL。

然后点击页面底部的“密钥”按钮,查看并记录密钥

接下来,回到Eclipse页面,在刚才的对话框中点击Accounts

点击右侧的Add,在弹出的对话框中输入刚才在Azure门户上记录的账户名、密钥和Blob URL

之后,在对话框中选中该存储账户,Eclipse会自动生成一个URL位置作为JDK的上传位置

在下一页Server页中,选择Java中间件,并在部署选项中作出同样的选择


在Application页中,选择要部署的Java应用,这里面有个默认的HelloWorld应用,是系统自带的。我们要添加刚才创建的JavaWeb项目。

点击Add,从下列框中选择刚才的Web项目。这样Eclipse就将该项目与Azure项目关联。



点击Finish后,Eclipse会创建该项目,并从微软网站下载安装Azure SDK。该SDK包含了一个本机Azure模拟环境,以及一系列Azure API库。

安装结束后,就可以开始测试了。首先,我们可以在本地Azure模拟环境测试该Java项目。选中Azure发布项目,然后到工具栏上按下第一个按钮(在本地模拟环境运行该项目)

运行后,Eclipse就会启动Azure的本地模拟环境,运行刚才创建的Java项目。在后台,Azure模拟器会将Tomcat拷贝到一个临时目录下启动,然后把MyHelloWorld.WAR拷贝到Tomcat目录下运行。这样,当我们通过浏览器访问http://localhost:8080/MyHelloWorld时, 就会看到如下界面:

这代表该Java程序在本地运行成功。接下来,我们可以停止该本地模拟环境(按下工具栏第二个按钮),然后把应用发布到Azure上。

在Eclipse中,选中要发布的Azure项目,按下工具栏第5个按钮,会弹出一个对话框,要求选择一个Azure订阅,也就是要设定Azure账号。点击Import from publish-setting file

在弹出的对话框中,点击Download publish-setting file,此时会弹出一个浏览器窗口,要求登陆Windows Azure。输入用户名密码后,浏览器会下载一个文件,该文件是描述当前用户已激活的订阅。在对话框中选中刚才下载的文件

接下来回到前一步的对话框,选中一个订阅,并且选择Storage acount,service name, target environment. 如果列表为空,则点击New 新建。其中storage account用于存储应用发布包,发布应用时,Eclipse先将所有代码打包,然后上传到该Storage account,再将该account将代码包发布到Azure的Cloud service中。service name代表该应用发布后对应的Azure Cloud Service实例名称,会成为该应用域名的一部分,比如实例名NewJava2013的完整URL是newjava2013.cloudapp.net.Target environment指的是部署目标,每个Cloud service都可以部署两套环境,分别是Staging和Production,对应测试和生产环境。两套环境可以快速切换。下面的Remote Access是设定目标虚拟机的用户名和密码。尽管云服务不建议用户直接登录虚拟机进行设定,用户还是可以登录进去进行调试和日志查看。最下面的Connect to deployment when ready的意思是,发布成功后立即连接到虚拟机。


点击Publish后,Eclipse就开始发布过程。首先,Eclipse会将Azure项目的代码,包括所有的WAR包打包为一个大的zip包,然后,会上传该文件到Azure storage account上。最后,Azure会根据应用情况,创建相应的虚拟机,再将应用代码包从storage account发布到cloud service的各个虚拟机上。虚拟机接到文件后,会进行解压缩,然后运行初始化脚本,下载启动JDK和Tomcat,最后启动WAR包

在Eclipse视图中,我们可以看到发布的状态,这里面比较耗时的是JDK和Tomcat的上传过程。从下面的日志中,我们可以看到两个上传是并行的。而且第二次发布时,这两个文件就不需要再上传了,速度会快很多


发布成功后,系统会自动弹出远程桌面登录对话框,输入刚才设定的用户名密码即可登录Cloud service对应的虚拟机

打开虚拟机上的资源管理器,可以看到3个盘,其中D盘为Windows系统盘,C盘为Azure使用的系统盘,E盘为应用运行的磁盘。打开E盘,进入approot目录,可以看到所有的文件,这些文件跟Eclipse中Azure项目的文件类似,不过多了JDK和apache,这些文件是系统脚本自动下载安装的。

打开apache的webapps目录,可以看到WAR包已经成功解压

在虚拟机中启动任务管理器,可以找到Java进程,这代表Tomcat已经顺利启动,同时,我们也可以进入tomcat的log目录查看Tomcat日志

进入Azure的管理界面https://manage.windowsazure.com,从左侧的列表中找到Cloud service,进入,在右侧的实例列表里面找到刚才创建的服务名

点击服务名,进入其Dashboard,点击Staging。可以看到该服务实例的基本信息,包括性能信息、URL、IP地址等等。

点击右下侧的URL,可以打开Tomcat默认页。修改URL,加上Java项目名,就可以进入自己Java项目的页面。

至此,一个简单的Java项目发布完毕。

接下来,就可以对该Cloud Service进行管理了。回到Cloud service 的Dashboard,我们发现Site URL并不是以service名开头,而是一个古怪的字符串,这是因为这个环境是staging环境。点击底部的菜单SWAP,可以将其切换为Production环境,切换后,URL将变为service名开头

在SCALE里面,我们可以看到当前集群的虚拟机数量。拖动滚动条,并点击底部的SAVE按钮,就可以实时改变虚拟机数量。如果改大,Azure会立即部署一台新的虚拟机,并自动安装配置JDK/TOMCAT/Java应用,并自动配置负载均衡器。这样再次访问服务的地址时,请求就会自动分发到多台虚拟机上。可见系统的扩容有多么方便。当然,虚拟机数量增多会产生更多的费用。

在Instance页面,可以看到具体的每台虚拟机的名称和状态。点击页面底部的Connect,可以弹出远程桌面登录窗口

如果忘记远程桌面密码,可以进入Configure页面,点击页面底部的Remote,会弹出一个窗口配置远程桌面登陆信息

另外,Configure页面底部还可以选择虚拟机的OS版本

这里可以下载更详细的说明,包括:

  • 如何从Java读取配置文件
  • 如何从Java访问数据库
  • 如何访问Azure Storage
  • 如何配置Caching
  • 如何配置Session持久化和Sticky Session
  • 如何远程调试

参考资料:

MSDN 上对于Java Eclipse插件的描述http://msdn.microsoft.com/en-us/library/windowsazure/hh694271

Azure主页上对Java开发的说明http://www.windowsazure.com/en-us/develop/java/

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics