编者注:本文作者是Persistent Systems 的云计算助理副总裁Shreekanth Joshi,描述了该公司是如何使用Windows Azure为他们的ISV客户开发和交付基于Java的应用程序。
Persistent Systems是一家全球性的公司,专门从事软件产品和技术服务。我们专注于在下一代技术领域的四个主要领域开发最佳解决方案,它们是:云计算、移动性、BI及分析和协作。Persistent Systems很早就涉及云计算领域并且曾经和很多初创企业和创新型企业合作帮助开发和部署各种云计算应用程序。我们利用精心定制的产品工程流程为北美、欧洲和亚洲各地的300多个客户开发创新的解决方案。
在软件即服务(SaaS)能力和经验的基础上,我们为先进的云计算平台建立了专门的能力中心。作为Windows Azure社区的积极参与者,我们发布了开源的项目,包括:
Persistent Systems最近推出一个新的开放源码项目,CloudNinja for Java,如下所述。
CloudNinja for Java
Windows Azure上基于Java的应用程序的数量在不断增长,因为客户意识到Windows Azure的开放性能够为他们的Java应用程序提供可扩展性和高可用性。我们从怎样设计各种项目组件来管理单租户和多租户应用程序到怎样使用Windows Azure服务整合项目组件的过程中遇到了很多问题。客户学习Windows
Azure时面临的普遍问题是除.NET平台以外很少有详细的文章和代码示例。
Windows Azure通常被视为.NET云计算平台,实际上这是错误的。出现这种误解的原因是相关的演示和how-to博客都是围绕Microsoft Visual Studio来写的。事实证明,Windows Azure提供虚拟机,Windows Server 2008 SP2 或 Windows Server 2008 R2,也就是说大部分的基于Windows的可执行文件或脚本都可以运行在Windows Azure上。
要增加对Windows Azure开放性的认识,我们最近发布了基于Java的CloudNinja项目(CloudNinja for Java),该应用说明了如何为Windows Azure构建多租户应用程序。CloudNinja for Java包括以下的特性和功能:
- 租户寄宿
- 租户级自定义项(例如,管理徽标)
- 每个租户的数据隔离
- 每个租户计量
- 通过不同标示提供程序提供登录支持。例如Yahoo!、Google和Windows Live ID
- 一般拥堵任务计划程序
此应用程序是建立在几个常见的开源软件库中,例如Spring、 Hibernate、Log4j和jqPlot。
该项目运行在Windows Azure里并且完全基于Java的Windows Azure Plugin for Eclipse。下图描绘了CloudNinja的体系结构。
我们在CloudNinja for Java的开发和部署过程中利用各种Windows Azure服务。下面是主要用到的几个:
我们相信CloudNinja for Java将对Java社区有用并将鼓励Java开发人员创建自己的Windows Azure应用程序。
当部署Windows Azure的Java应用程序时,有几个注意事项:
- 部署中是否要捆绑第三方工具和运行时
- 监测应用程序
- 处理缺失的SDK功能
部署中是否要捆绑第三方工具和运行时
Windows Azure plugin for Eclipse结合Java应用程序,与Windows Azure项目一起被放到一个包中,上传并部署到Windows Azure。Windows Azure项目包括负责设置Java环境和启动应用程序的启动脚本,包括:
- Web Server设置(该例使用Apache Tomcat)
- JRE设置
- WAR文件部署
- 环境变量配置
当启动一个Windows Azure虚拟机实例时需要设置环境。通过启动脚本来完成这一点。因为Tomcat和JRE不是Windows Server VM影像的一部分,我们需要自己提供这些。在Windows Azure部署包中引入这些东西很简单。不过,Tomcat和JRE添加项导致包大小增长70MB,是运行时应用程序部署的两倍。有几个问题:
- 将部署包上传到Windows Azure时间较长。
- 如果我们想要更新Tomcat 或 JRE 的版本就必须要重新部署整个包。
我们不需要在部署包中包含Tomcat和JRE。为了避免上面提到的问题,我们将运行时存储在Windows Azure Blob存储里。启动脚本从Blob存储中下载Apache Tomcat 和 JRE,然后启动Apache Tomcat。从Windows Azure Blob存储中下载东西到虚拟机存储速度极快,因为我们的虚拟机和存储账户被放在同一个数据中心中。此类Java应用程序的包大小随着Apache Tomcat和可安装JRE的大小的减小而变小。
在将我们的部署升级到最新的Tomcat和JRE的同时,需要将新版本复制到Blob存储。然后,使用Windows Azure门户将所有托管应用程序的虚拟机实例重新映像,这样我们的应用程序就运行着最新版本的Tomcat/JRE了而不需要重新部署我们的任何代码!
检测应用程序
Windows Azure提供一个诊断监视器,能够捕获性能计数器、事件日志、文件目录、Windows Azure基础设施日志和崩溃转储。Java版的Windows Azure项目默认情况下不提供诊断信息配置。我们为CloudNinja for Java创建了一个独立的实用程序,设置我们想要观察数据(主要是CPU利用率)的特定的性能计数器。
我们还需要观察Tomcat访问日志和存储分析日志来为每个租户生成使用情况统计信息。为了捕获Tomcat日志,我们配置Windows Azure Diagnostics来监控Tomcat存储其访问日志文件的目录中的文件。诊断监控将访问日志推送到blob,后面可以从worker进程中访问它们。这样很好,因为我们能为Tomcat的每个运行实例访问日志。由于这些文件被存储在Windows Azure存储中,也很容易从外部程序访问它们,所以一旦出现异常可以手动检查日志文件。
检测blob存储时情况又有点不同。在CloudNinja for Java项目中,我们将租户徽标存储在blob存储中。在html输出中有图像标记直接指向这些徽标而不用穿过Apache Tomcat服务端。为了捕获这些blob访问和相关带宽,Windows Azure提供存储分析。分析有两种类型:Logging,
提供每次blob访问的详细统计资料;metering,提供每小时的汇总信息。默认情况下禁用分析。CloudNinja for Java项目中我们启用了Windows Azure存储账户日志记录。这些日志提供时间戳、源IP、blob访问和结果状态(访问成功或失败)。存储分析是Windows Azure的一个特色特性,它对CloudNinja for Java这样的需要捕获租户级存储使用情况信息的多租户应用程序尤其有用。
在调试的时候,日志记录不一定就够了。我们启用远程访问,允许开发人员连接到托管应用程序的虚拟机。通过Windows Azure门户网站,我们可以打开远程访问连接到任何正在运行的实例。
处理缺失的SDK功能
Windows Azure SDK for Java中,一些Windows Azure功能尚未提供。我们依赖的一个功能是访问控制服务(ACS)。我们想要在CloudNinja for Java中使用ACS来允许租户使用一种身份提供程序登录,例如Google、Yahoo!和Live ID。
事实证明,ACS具有完整的基于REST的管理接口。在REST 库 (Restlet)的帮助下,我们能将ACS构建到CloudNinja for Java中。同样的技术也可以被Windows Azure中其他任何基于REST的功能所使用。庆幸的是,Windows Azure SDK for Java涵盖了不少:
- Service Runtime
- Storage (blobs、 queues和tables)
- Service Bus
总结
对Persistent Systems 来说Windows Azure是一门核心技术,我们将继续为客户创建基于Java的解决方案。我们成功地在Java应用程序中使用Windows Azure的几乎每个功能,而不需要写.NET代码。CloudNinja for Java项目很好地证明了这一点。例如,我们整合了ACS管理服务,即使是微软的Windows Azure SDK for Java没有API支持此服务。我们可以成功地利用基于REST的API创建与ACS管理服务交互的依赖方应用程序。这种基于REST的方法确实为使用任何一种语言开发Windows
Azure应用程序提供了机会。
我们鼓励Java社区参考CloundNinja for Java构建Windows Azure的多租户应用程序。
阅读Persistent Systems博客上的博客文章“介绍CloudNinja for Java”以了解更多信息。
本文翻译自:http://blogs.msdn.com/b/windowsazure/archive/2012/04/23/isv-guest-blog-series-persistent-systems-takes-to-windows-azure-delivers-cloudninja-for-java.aspx
分享到:
相关推荐
在Android系统中,`android:persistent="true"` 是一个重要的属性,它用于定义应用程序是否应该在系统启动时持续运行,并且在系统运行期间始终保持活动状态。这个属性通常在应用程序的AndroidManifest.xml文件中的`...
《Tie::Persistent.pm——Perl中的持久化编程利器》 在Perl编程中,数据的持久化是一个关键问题,尤其是在开发需要长期保存应用状态或者数据库中间结果的系统时。Tie::Persistent.pm模块就是为了解决这个问题而诞生...
标题与描述:“高级Windows Azure基础设施即服务(IaaS)” 在深入探讨此主题之前,我们需要理解几个关键概念:基础设施即服务(IaaS),以及它在Microsoft Azure中的具体应用。IaaS是一种云服务模型,允许组织租用...
在Android系统中,`persistent`属性是一个非常关键的特性,它用于定义应用程序的行为,特别是与系统启动和应用程序生命周期管理相关的方面。当一个应用被标记为`persistent`时,这意味着该应用将在系统启动后由...
在IT行业中,Apache ActiveMQ是一个广泛使用的开源消息代理和队列服务器,它是Java Message Service (JMS) 的实现,允许应用程序之间进行异步通信。这篇博客"ActiveMQ问题解决记录"可能涵盖了作者在使用ActiveMQ过程...
Eclipse 中搭建 Java 企业级项目 Eclipse 是一个功能强大且灵活的集成开发环境(IDE),广泛应用于 Java 企业级项目的开发中。在本文中,我们将详细介绍如何在 Eclipse 中搭建一个 Java 企业级项目,主要使用 JPA、...
该Java库允许您阅读集合中所做的更改,然后再使用此库或其他任何考虑事项。 变更供稿具有以下属性: Changes are persistent in DocumentDB and can be processed asynchronously. Changes to documents within a...
在“Deploy-persistent-storage-on-Azure-with-Kubernetes.pdf”文档中,可能会包含更详细的步骤和示例,包括如何登录Azure(如通过`LogOn.aspx?rp=%2FKB%2Fazure%2F1214410%2FDataVolumeInstructions.zip&download=...
《深入剖析Moquette源码——基于Java的MQTT代理实现》 Moquette是一个开源的、用Java语言编写的MQTT消息代理,它实现了MQTT协议3.1.1版本,适用于物联网(IoT)场景中的低带宽、高延迟或不可靠的网络环境。这个项目...
资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:persistent-4.8.0-cp37-cp37m-win32.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
PAT,全称Persistent Applications Toolkit,是一个开源项目,旨在简化应用程序的持久化层开发。这个工具包基于AOP(面向切面编程)的概念,特别是利用了JBossAOP框架,为开发者提供了一种高效且灵活的方式来处理...
基于JAVA开源的BigQueue二次封装的小工具,生产消费模式轻量级组件,无需部署、配置服务,一个JAR工具库即可使用。 组件小特点: > 身小轻量 > 示例清晰 > 开箱即用 > 数据持久不丢失 > 让程序员更自由零配置 ...
Java环境下存在很多O/R框架,如EJB的EntityBean模式、JDO、OJB等,但Windows和 .Net环境下有效的O/R映射框架却很少(微软正在开发类似的技术Microsoft ObjectSpace,还有NetPersistent和JPersistent等)。 Pdo...
资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:persistent-4.2.4.win32-py3.4.exe 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
《基于Java的高性能内存消息与事件驱动库:深入解析Chronicle》 在Java开发领域,高效的数据处理和通信是至关重要的。"基于Java的实例源码-高性能内存消息和事件驱动库 Chronicle.zip" 提供了一个名为Chronicle的库...
在这个基于Java的聊天系统中,开发者选择了Hibernate作为数据库访问框架,以提高开发效率并简化数据操作。 **Hibernate框架介绍** Hibernate是一个优秀的对象关系映射(ORM)框架,它允许开发者使用Java对象来操作...
这个压缩包文件“Java ME实用详解——用Eclipse进行移动开发 源代码”显然是一个关于使用Eclipse IDE进行Java ME应用开发的资源集合,包含有源代码示例,适合初学者和有一定经验的开发者参考学习。 首先,我们要...
2. **持久化类(Persistent Classes)**: 持久化类是包含`@Entity`注解的Java类,它们包含了属性,这些属性与数据库表的列相对应。例如,一个名为`User`的类可能对应于`users`表。 3. **表映射(Table Mapping)**:...
【cheese-mvc-persistent:Java Spring Boot Studio】是一个基于Java的项目,它利用了Spring Boot框架的强大功能来构建一个高效、简洁的Web应用程序。Spring Boot简化了设置和配置过程,使得开发人员能够快速地搭建...
通过学习相关文档和博客(如提供的链接),开发者可以快速上手并掌握其使用方法。 6. **性能优化**:BBoss Persistent还可能包括针对CLOB和BLOB的性能优化,比如预读取、延迟加载等策略,以提高应用的响应速度和...