编者注:本文作者是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:persistent="true"属性,并且Phone.apk是安装在/system/app/目录下的,所以在开机时会自动启动PhoneApp类
Store persistent data with Windows Azure Storage Develop a scalable database application in the cloud using Microsoft SQL Azure™ Connect several cloud-based applications with Windows Azure AppFabric ...
Tie::Persistent.pm 是一个 Perl 模块,有助于以易于使用的方式使您的应用程序数据持久化。 只需将那些应包含持久数据的变量绑定到该模块,指定要保存数据的文件名,就完成了。
该Java库允许您阅读集合中所做的更改,然后再使用此库或其他任何考虑事项。 变更供稿具有以下属性: Changes are persistent in DocumentDB and can be processed asynchronously. Changes to documents within a...
资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:persistent-4.8.0-cp37-cp37m-win32.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
基于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
NULL 博文链接:https://7wolfs.iteye.com/blog/1246365
主要介绍了Android中persistent属性用法,详细分析了persistent属性的功能及相关用法,需要的朋友可以参考下
PAT:持久性应用程序工具包,AOP(JBossAOP)持久性库(方面库)。 为持久层提供基础的Prevayler(1.02)。 允许用户编写代码而不必担心持久性代码(POJO)。 使用注释
资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:persistent-4.2.1.win32-py2.7.exe 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
1、安装Build With Parameters Plugin,Persistent Parameter Plugin 插件 说明:安装Build With Parameters Plugin为了实现参数化构建,安装Persistent Parameter Plugin 为了实现,构建时,默认参数值取自上次...
资源来自pypi官网。 资源全名:persistent-4.0.8-py3.4-win32.egg
python库,解压后可用。 资源全名:persistent-4.0.8-py3.4-win32.egg
Cross-site Scripting
java8 看不到源码Clojure/Script 的基于 B 树的持久排序集。 PersistentSortedSet 支持: 瞬变, 自定义比较器, 快速迭代, 高效切片(迭代器在集合的一部分上) 切片上的有效rseq 。 几乎是clojure.core/sorted-...
资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:persistent-4.5.0-cp36-cp36m-win_amd64.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源来自pypi官网。 资源全名:persistent-4.0.5-py2.6-win-amd64.egg