Windows Azure的网站服务一直是本人十分推崇的服务,它就是微软的AppEngine。如果单纯比较"App Engine"本身,网站服务在易用性、可扩展性、IDE集成、可定制性及UI方面都领先业界其他的类似平台,比如Google的AppEngine和AWS的Beanstalk。不过网站服务毕竟出自微软,在外围服务上并没有像其他厂商一样支持大量的开源组件服务,这是网站服务可以和其他服务互补的地方。
那么,网站到底好在哪里呢?下面我们就逐一分析
基本功能
站点管理
这个不用多说,Windows Azure可以在几秒内创建、删除一个网站,然后会立即分配一个URL,用户就可以访问了
持续代码发布及版本控制
Windows Azure的代码发布机制有很多,可以直接发布(使用FTP,Git, Visual studio或是Webmatrix等工具),也可以间接发布,即开发者先把代码发布到源代码控制器或者网盘中,然后同步到Azure上,目前支持的有微软自己的TFS以及外部的包括GitHub, Codeplex,DropBox等等
下面这篇文章介绍了如何使用WebMatrix向网站发布Wordpress
http://blog.csdn.net/shaunfang/article/details/16857095
Azure网站的一个特点,就是支持持续的代码发布。任何一次到Git或者TFS的提交,都会立即触发一次代码发布过程。这保证了网站上托管的代码永远是最新版本。用户也可以将代码回滚到之前的版本。如果不希望每次提交就同步网站,可以提交代码到其他分支。网站服务只会同步主分支下的代码
代码编辑
可以在管理门户上直接点击页面底部的Webmatrix进行在线代码编辑,Webmatrix也可将全站镜像到本地编辑,然后上传修改后的代码
运行环境选择
目前网站服务支持.NET 3.5/4.5, PHP 5.3/5.4/5.5, Nodejs 0.6.17/0.6.20/0.8.4, Tomcat 7, Jetty 8.1. 通过配置界面可以修改选中的运行环境。值得一提的是,不同程序可以同时运行在同一个网站里面,比如,在同一个URL目录下可以既有asp又有php。这是因为后台的webserver是IIS,它可以根据请求的后缀选择相应的handler处理请求。如果是Java应用,则稍有不同,它的运行环境,如Tomcat,和IIS是没有关联的,因此Java应用和其他应用不能共存在一个网站上
生产、测试环境切换
用户可以针对同一个应用创建两个网站,一个做生产,一个做测试,并且可以随时切换二者的URL
环境变量
Azure为各种Web程序提供了环境变量接口,这样一些常用的配置参数可以直接在Azure界面上修改,而无需每次更新代码。要访问这些变量,需要在程序里面调用Azure的API
兼容性
Azure在云端的网站服务器就是IIS,因此云端的网站迁移回本地,或者把本地的网站迁移到云端无需任何代码修改。需要修改的场景,是需要访问Azure的环境变量(见上)
系统监控
Azure提供了基本的Web性能监控能力和可用性监控,并且可以提供异常报警
弹性伸缩
用户可以动态改变网站的运行实例数(进程数或虚拟机数)和规格。甚至可以通过性能指标和时间设置策略实现自动伸缩
Web作业
可以定义定期任务在后台执行,任务类型可以是exe,bat,cmd,powershell,php,bash,python,nodejs
备份
可以将网站数据连同所对应的数据库一同进行快照备份,可以定期备份
调试与诊断
可以控制日志输出级别,进行日志保存
对于.NET,支持Visual Studio远程调试,可以在代码上设置断点,然后在云端执行。Visual studio可以查看断点处的各种变量,就如同本地调试一样,也可以单步执行
高级隐藏功能
除了上述功能外,Azure网站还有大量的高级功能,这些功能不一定人人都需要,但是却十分强大。
后台编译
Azure可以从源码控制站点checkout代码,如果是脚本语言还好,直接可以用,比如PHP。但如果代码需要编译(ASP.NET),那不是没法直接用么?Azure提供了后台自动编译的能力。对于asp.net站点应用,编译是在客户端完成的,编译后的代码会上传到源码管理站点上,此时azure上无需再次编译。如果是asp.net项目,那么checkin的只是源码,每次客户端提交代码后,azure会首先checkout代码,然后立即调用msbuild进行编译,而这个过程,对用户是透明的。用户只要保证代码能正常编译即可。
IIS远程管理
用过IIS的都知道IIS有一个管理工具,可以进行图形化的配置管理。现在,azure网站同样可以支持该管理工具进行远程管理。只需要在IIS管理器上连接远程站点
然后输入网站的URL(需加端口号443)
再输入管理id(跟ftp的用户密码一样),就可以连入
IIS Manager可以通过图形化的方式修改web.config,这样我们就不需要为如何手动编写web.config而烦恼了。特别是像URL重写这种功能,IIS管理器可以为我们提供强大的规则设计器和测试功能,而不用我们去成为正则表达式的专家
日志流监控
日志下载是很简单的功能。不过,我们调试程序的时候,我们希望能够看到日志的滚动输出,而不是每次下载日志文件。Azure网站提供了多种方式让我们查看日志的流式输出
1. Visual studio 可以打开网站的stream log
2. 通过命令行监控
这个功能就如同linux 的tail命令一样,可以实时查看云端的持续输出
3. 通过云IDE (visual studio online)或者Azure的后台管理界面监控。后面会详细解释
云IDE
Azure网站与Visual Studio Online进行了集成。VS Online是一个云IDE,提供纯Web界面的开发环境。其具体介绍,可参考 http://blog.csdn.net/shaunfang/article/details/20055341
后台管理
Azure网站是一个PaaS环境,许多后台的配置信息被屏蔽了,用户从管理界面上看不到后台的详细配置。不过,这也带来一个潜在的问题,在某些场景下,程序员可能会希望了解后台的更详细的配置,比如所有的环境变量、云端所有隐藏的文件、所有安装的软件包。现在,Windows Azure开放了后台管理接口,用户可以连入这个接口。
连入的方式,是在网站URL中间加入SCM,比如http://phptest.chinacloudsites.cn/ 这个网站的相应后台管理界面,是https://phptest.scm.chinacloudsites.cn/.访问时,首先需要输入管理员账号和密码。这个登陆信息和FTP登陆信息一样,可以从网站的仪表盘页右侧得到,也可以自己进行设定
登陆后,会看到如下的界面
这个界面名为Kudu。Kudu是一个基于Azure网站的一个插件,其本来的功能,是为Azure网站提供Git代码同步的功能,后来,产品团队对功能进行了扩展,实现成为一个全功能的管理平台
在Kudu的首页,可以看到一系列REST接口的定义。通过这些REST接口,我们可以查询网站服务的环境配置、进程、文件系统、版本信息,并进行Web作业的提交
进入Environment页,可以看到所有的环境变量,包括Windows变量、IIS配置、OS配置等等。
进入Debug Console页时,有两个选择,一是使用cmd命令行,二是使用powershell命令行
进入后,我们会看到上下两个栏目,上面是目录和文件列表,下面是Web版的命令行界面。在文件列表里面,我们可以看到主机上的所有文件,点击三个小图标,我们可以切换驱动器。这里不仅能看到项目文件,比如网站代码和日志(与FTP看到的一样),还可以看到系统文件,包括全部Windows系统盘和临时数据盘上的文件。我们还可以上传、下载文件、编辑文件。需要注意的是,Windows系统盘内的文件是只读的,无法编辑。我们只能编辑网站目录里的文件以及临时盘上的数据
编辑界面如下。这样,我们就有了一个简单的Web版的文本编辑器
在下面的命令行工具里,我们可以执行各种命令。这个Web版的命令行基本上跟本地命令行一样。我们可以用help查看可用命令
我们可以进行文件拷贝,进行解压缩等等操作。
进入页面顶部的Diagnostic Dump,可以打包下载所有日志文件。进入Web Hooks页面,可以定义钩子程序。钩子程序在每次完成代码更新后会被系统触发。比如,我们希望系统每次从Git更新代码后通知用户,可以在这个地方定义一个URL。这样,每次部署完成系统都会调用这个URL
管理扩展
Kudu的功能并不是全部。用户可以用扩展包自定义管理功能,比如进行同步、通知、监控、报警、日志分析等等。扩展包是一些代码文件,可以安装在Kudu上。点击Gallery里面的加号,然后点击右上角的Restart即可
一些常用的扩展有:
1. 实现多站点文件同步Site Replicator
下面的扩展包实现了两个Web站点之间的自动文件同步。这可以用来做异地镜像,比如在北京和上海各自建立一个网站,每次只在一个站点发布文件,另一个站点就会更新内容。结合智能DNS,我们可以实现广域网就近用户访问。具体用法可参考https://github.com/projectkudu/KuduSync
![Windows Azure 网站服务高级功能探索_第5张图片](http://img.e-com-net.com/image/info5/56232d554f5245f8b4c1fdb51643208e.jpg)
2. PHP管理
为PHP提供图形化管理界面
https://github.com/projectkudu/PHPManager
这个扩展包可以图形化在线编辑PHP配置文件,无需手动下载、编辑php.ini。也可以进行php版本、配置、日志的查看
![Windows Azure 网站服务高级功能探索_第6张图片](http://img.e-com-net.com/image/info5/22ef4d17948940ca824deb3517d2958e.jpg)
3. applicationhost.config定制
使用过IIS的用户可能会知道applicationhost.config这个配置文件,它和web.config结合,配置网站信息。其中applicationhost.config是server级别的配置,web.config是站点级的配置。使用网站服务时,我们只能修改web.config,而某些配置项是在applicationhost.config中被锁死的,无法编辑(applicationhost.config是保存在windows系统目录下,无法修改)。而网站扩展为我们提供了一种修改applicationhost.config的方法,就是在网站目录里面定义一个xdt文件。这个xdt是一个xml的差量文件,可以修改原xml生成新xml。具体方法可以参考
http://www.windowsazure.com/en-us/documentation/articles/web-sites-transform-extend/#transform
4. IIS日志分析
目前Kudu里面提供两个日志分析工具
一个是叫做IIS log file analyzer,可以分析平均响应时间,并统计Session
![Windows Azure 网站服务高级功能探索_第7张图片](http://img.e-com-net.com/image/info5/d506751983484e08b03ace128bc173b5.jpg)
另一个叫做Analog HTTP Log Analyzer,统计功能更强大,可统计访问数、客户端OS、返回码、文件类型、文件大小,等等
5. MySQL管理套件phpMyAdmin
6. Web版的Azure存储查看工具
7. 文件计数器
统计网站文件数量