本月微软的架构师 David Chou 将会在 JavaOne 的大会上做一个演讲,主题是在微软的Azure 云平台上部署Java 应用。考虑到Azure 是典型的基于.Net 应用的微软技术平台,InfoQ 与Chou 先生探讨了Java 能在Azure 上做什么,不能做什么。
首先,David Chou 鼓励开发人员把Azure 看作“另一个基于Windows 服务器的开发环境,你可以往上部署代码… 其模型可以理解为一个巨大的zip 文件。如果你能把应用放入一个闪存驱动器,而且还能从驱动器中启动应用,那么就可以在Azure 上运行你的应用了”。理论上这意味着只要Java 开发人员为自己的应用绑定完整的JRE,然后写个小的C#引导程序就可以在Azure 上运行Java 了。
但实际上,一个典型的Java 程序必须克服一些障碍才能运行。据Chou 先生所言,依赖 Java 的 NIO 功能或使用了内部网络通信(例如 Jboss 集群)的应用是不能在 Azure 的网络沙箱内运行的。
为了说明这些限制,Chou 先生描述了他是如何让一个基于 Jetty 的应用程序运行在 Azure 上的:
- 使用 Visual Studio 创建 Azure 应用框架;
- 把 Jetty NIO ChannelConnector 换为阻塞的 IO ChannelConnector;
- 以 C#程序员的视角编写逻辑代码找到内部和外部端口,并用正确的端口参数启动 Jetty;
- 在 Java 应用的包内绑定 Jetty 应用容器和 JRE;
- 把 Jetty 的配置中涉及写文件系统的信息全部注释掉(这是个可选项,但如果你想绕过它,就需要编写更多的 C#代码)。
Chou 先生认为目前在 Azure 上进行 Java 开发具备如下特点:
这是漫长旅途中的第一步,我感觉又回到了刚开始用 Java 开发的时候,而且我们没有 IDE 集成开发环境。构建客户端应用时我们不得不使用文本编辑器处理 AWT。现在的阶段是:我们可以使用 Java 和部署一个完整的 Java 应用,但事实上还有很大的改进空间。
4 季度会发布 SDK1.3 版本,Chou 先生保证开发人员会更容易使用网络沙箱,减少限制,并提供更多的管理回调机制,用来启动进程、解压缩、用 C#脚本引导应用。当问道哪种类型的用户试图把 Java 部署到 Azure 上时,Chou 先生介绍了 Domino’s Pizza 项目,微软提供帮助把基于 Tomcat 的应用迁移到了 Azure 上。除了把应用迁移到 Azure 的计算资源上,同时也把数据存储迁移到了微软的云存储中。这次迁移的动机是为了解决晚餐期间超过 50% 的交通高峰期,特别是在周五和周日的超级杯(美式足球冠军)。当问及这个试点项目是否着手实施了,他表示该项目仍处于构思阶段。
总的来说,如果你是个 Java 开发人员,而且安装了 Visual Studio,同时还有一个对网络需求不敏感的 Web 应用,该应用没有使用太多的 J2EE 特性,那么你可以尝试将其部署到 Azure 的云上。其他人最好等年底 SDK1.3 的发布。想了解更多信息,请参加 JavaOne 周四早八点 Chou 先生的演讲。
评论