本月是圣诞后的第一个月,Windows Azure国际版的新功能发布终于继续了。本次发布的重点是网站服务。网站服务是Windows Azure上重要的PaaS服务,个人认为它也是未来Windows Azure上最重要的服务,为什么这么说?有以下理由:
1. 简单。了解云计算的用户都明白,PaaS服务可以为应用带来很多的好处,比如部署简单、弹性扩展、维护量少,不过,用户初次使用PaaS服务时,学习曲线比较高,上手很慢。业界比较著名的例子,是CloudFoundry,Google的GAE,Salesforce的force.com,这些技术无一例外都需要很长的上手时间,弄清楚平台上有哪些API,和传统开发有什么区别。Azure的网站服务不同,它可以看成一个增强版的虚拟空间,用户上传代码即完成部署,可以在几分钟内开通、运行Web应用。而且,它的管理、代码同步、诊断、扩容都十分直观,从用户的角度,不需要学习任何一种新的技术。一切的新技术,都是在后台,对用户不可见。因此,用户可以很快上手,而且很快就会爱不释手,特别是对开发者来说。
2. 兼容。业界的PaaS服务往往需要对应用进行重构,或是由于提供了特殊的API,或是由于平台的技术限制。Azure网站服务的特点,就是最大程度的兼容已有代码。代码无需修改就可以上传、运行。
下面,我们看看这次发布有哪些更新?
1. 支持过渡环境。
之前用过网站服务的用户肯定了解,发布代码到网站上时,代码立即上线,中间没有延迟,是实时同步的。这对于大型应用不太友好,因为应用上线前,都希望能够调试或测试,测试通过时,再切换到生产环境,如果有问题,可以随时切换回来。之前,Azure上的另一项PaaS服务Cloud service支持过渡环境,就是同时运行两套环境,用户可以随意切换两套环境,生产环境具有最终的URL,而过渡环境有一个临时URL。现在,网站服务也具备了该能力。
在网站服务面板上,我们可以看到一个链接:启用过渡发布
启用之后,Azure就会创建一个空的过渡环境,在过渡环境里,用户可以进行与生产环境同样的操作,比如修改配置,上传代码,主要的区别,1是过渡环境的URL,2是没有链接资源定义。
过渡环境将与生产环境共享底层资源,所以创建过渡环境并不会增加费用。过渡环境拥有独立的配置信息、自定义域名、SSL证书绑定、代码库,可以看成是与生产环境平行运行的一个网站。
当进行切换时,只需要点击页面底部的“交换”按钮,两套环境就会发生交换。实际交换的内容是URL和SSL绑定,而两套环境本身并没有改变,但对用户来看,两套环境交换了,也就是同一个URL背后对应的代码、配置发生了变更
2. 支持任务调度
网站服务本质上是给用户提供Web托管的,满足用户的即时Web请求。很多应用都需要执行离线任务,就是在后台进行任务处理,而不是由用户直接触发Web请求。之前我们要实现该功能,需要借助Cloud service里的Worker Role。开发Worker Role比较麻烦,需要了解很多Cloud service的概念和接口,然后需要开发、打包、发布、测试。现在,我们有了两个新选择,一是网站服务内嵌的Web Jobs,二是独立的“计划程序”服务。二者都是支持定时调度某个Web API,触发作业或任务。其中,前者适合在一个应用内部实现应用层的任务或程序调度,后者适合跨越多个应用进行服务调度,或者编排复杂的作业。前者适合单任务的定义,后者适合多任务的调度
在网站服务的Web jobs里面,我们可以上传多种类型的任务代码,比如网页代码PHP、Python、Nodejs,或者是程序代码exe、bat、cmd甚至bash脚本。这些代码需要打成一个zip包,然后上传到网站服务项目里面,最后定义任务的运行方式,比如被动触发、连续运行或者定期运行。
其中连续运行的意思,是Azure会保持改进程的持续运行,如果进程退出了,Azure会把它再启动起来。
Web jobs最大的好处,是使用非常简单,打包上传就行,作为对比,如果用worker role实现,要熟悉worker role工作机制,了解配置文件schema,然后再用专门工具上传。
Web job有多种应用场景,比如处理日志文件,进行后台缩略图生成,运行数据库统计,生成报表等等。
关于此次更新的详细内容,可参考
http://weblogs.asp.net/scottgu/archive/2014/01/16/windows-azure-staging-publishing-support-for-web-sites-monitoring-improvements-hyper-v-recovery-manager-ga-and-pci-compliance.aspx
关于Web jobs,可参考
https://github.com/projectkudu/kudu/wiki/Web-jobs