我从去年9月开始试用国内的Windows Azure,同时也有一个国际版Azure的账号。目前国内的Windows Azure还没有出台计费标准和细则,所以这篇文章里不会提及具体费用,但可以下载每月使用记录来观察和总结计费规律。国内的计费规则和Azure国际版是一样的,但是具体标准还没出来。写这篇文章的目的是总结一下我遇到的问题和经验,以帮助大家如何更经济的去使用Azure的服务。

一、计费周期和订阅

Azure的计费是跟着订阅走的,一个账户可以拥有多个订阅。我使用的主要是网站和虚拟机两个服务。就目前的情况来看,免费试用套餐一不小心就会超额被禁用。一旦订阅被禁用只能等到下个计费周期开始才能继续使用。比如我的订阅是9月9日开通的,那我的计费周期就是每月的9日到下月的8日。如果我在10月份超出了额度限制,那我在Azure上的所有服务都会暂停,并且要等到11月9日才能重新恢复。

被禁用的订阅前面会出现一个红色感叹号,就是这样:

要查看使用额度,就点击用户菜单下的“View My Bills”,有时候要求重新输入账号密码,之后点击你的订阅就能看到了。超额的条目会变成红色,就像这样:

如果你虚拟机用的多,那么最容易超额的是“数据管理”,Azure国内版本的免费使用第一批次包含每月70G,而第二批免费试用账户似乎只有50G。下面的文章里会解释每项的具体含义。

二、网站的计费

网站分三种:免费(Free)、共享(Shared)、标准(Standard)。每个订阅最多可以建立10个免费模式的网站。共享和标准模式都是要收费的。网站的计费是按使用时间(按小时计)的。

隐含的坑:发送数据的流量(出数据中心的流量)也是要计费的。

共享模式的网站每小时的资费是一致的。标准模式分三种:Small、Medium、Large,三种的每小时资费都不一样。

省钱最佳实践:

  1. 节省发送数据流量:优化网站的html、JS和CSS,能用CDN的就用CDN,能压缩的尽量压缩,并尽可能减少round trip次数,并且在不影响SEO的情况下善用AJAX,这样每次用户request消耗的流量就会降低。

  2. 免除数据库流量费用:由于跨数据中心通讯的服务都是要计流量费的,所以一定要记得把网站的数据库和网站放在同一个数据中心!在中国的Azure上,目前因为网站服务只有China North数据中心有,因此数据库也得放在China North。

  3. 选择合适自己的模式:由于Free模式的限制太多,大部分的网站都得选择Shared以上的模式。我的建议是在选择模式前,根据自己网站的运营统计,评估日均流量,如果流量变化较大,可以选择Standard模式,并配置auto scale,根据访问量自动调整instance的个数。如果网站压力不是特别大,比如个人博客、组织机构网站、举办活动的网站,Shared模式足够。

  4. 防止针对流量的恶意攻击:如果你不幸遇到了比较坑爹的竞争对手,可能他们会请黑客使用类似DDOS的方式,请求你网站上最耗流量的内容,比如图片,来将你的流量用完,导致服务暂停。针对这种情况,我也不是很懂,大家自己看一下。

三、虚拟机的计费

虚拟机是最容易产生天价账单的,大家一定要小心。我已经被爆过2次了。

首先,在很久以前,虚拟机只要建立了,不管你用不用都是要付费的。现在的计费方式是按活跃的机器计费,也就是说,关机的虚拟机是不需要付费的(这里面也有坑,稍后会讲)。

至于计费标准,现在国外已经精确到按分钟计费了,国内似乎还是按小时计费。就是说,如果你的虚拟机用了1小时01分,你要付的钱还是2个小时。

虚拟机的计费方式比较复杂。大致可以这么总结:

  1. 不同操作系统计费不一致:Windows最贵,Linux便宜,但是Windows Server 2012 R2目前是按Linux的费用算的。

  2. 不同的应用平台计费不一致:比如装有SQL Server的Windows镜像和纯Windows操作系统的镜像计费不一致。

  3. 不同Size的虚拟机计费不一致:这个是显而易见的,配置越好越花钱。

在国外的Pricing表格上,虚拟机的资费标准如下:

纯Windows VM:

纯Linux VM:

安装了SQL Server的Windows VM:

隐含的坑:

  1. 虚拟机要用到存储账户,存储也是分开计费的。这也是虚拟机里最烧钱的部分,远远比试用时间的费用要多!

  2. 虚拟机上的服务如果被外部访问,出数据中心的流量也是要计费的。

省钱最佳实践:

  1. 不用的时候一定要关机:是从管理平台上关机,而不是从Windows里关机!也就是说,在管理平台上,只有看到VM的状态是“Stopped (Deallocated)”而不是“Stopped”才表示真正停止计费。

  1. 你真的需要自己安装SQL Server吗?SQL Azure的功能可以满足一般的CRUD操作,支持存储过程。只有当你需要SQL高级功能(比如Reporting)时,你才应该考虑SQL的VM。

  2. 不同VM之间的通讯:将不用的VM放在同一个数据中心里以免去“出数据中心”的流量费。

  3. VM和其他Azure服务的通讯:将该VM和相关的Azure服务放在同一个地缘组里。

四、SQL Azure数据库的计费

话说,现在SQL Azure已经改名为Windows Azure SQL Database了,微软果然是有一个专门改名的团队。我个人还是喜欢简洁明了的SQL Azure。

SQL Azure的计费没有什么特别坑的。可以参考Azure国际版:

省钱最佳实践:

  1. 尽量把数据库和使用数据库的服务放在一个数据中心里

  2. 如果无法避免要使用“出数据中心”的流量,请考虑:

    1. 不要将文件(如博客附件)和图片等存在数据库中,应当考虑文件系统或Azure的Blob存储。

    2. 优化存储过程或程序,执行最小化查询操作,不要返回不必要的数据。

    3. 别闲得蛋疼老用SSMS拷贝数据库。

五、网络服务的计费

网络服务是基于每个VPN客户端连接的小时数计费的。也就是说,如果资费是每小时1元,我有5个客户端同时连接到VPN上,那么一个小时里我就要付5元钱。不足1小时的也会按1小时来计费。

隐含的坑:

别忘了,通过网络传输的数据,属于“数据发送”,即“出数据中心”的流量,是分开计费的!

省钱最佳实践:

别用VPN下载女朋友……

六、存储服务的计费

这个我也搞不清,我只知道账单里最大的一笔就是虚拟机用的存储服务。虚拟机会把VHD硬盘文件存在storage account里面,不管虚拟机启动与否,占用的空间都是要收费的……

七、神秘的大坑——“出数据中心”的流量

Windows Azure的数据中心是在物理位置上分开的。在中国目前有两个:上海、北京。如果数据中心扩建,Azure会以“Zone”的概念来规划数据中心,而每个Zone的计费都是不一样的。所谓出数据中心的流量,指的是跨数据中心的流量,或是数据中心直接像服务消费者提供服务产生的流量,而不是跨zone的流量。在计费单上写的是“数据发送”或“Data Out”,目前在国内Zone一栏是空缺的,所以资费应该是一样的。所以暂时撇开Zone的概念不谈,Windows Azure把资费标准划分为下列几个区间,在每个月内按GB为单位收费。在国际版上,资费标准如下:

省钱最佳实践:

  1. 如果将来有Zone,则要在不影响自己服务访问速度的情况下,选择更便宜的Zone。

  2. 如果要在跨数据中心的VM之间做数据库备份等类似的操作,不如用Backup Service,但是国内还没上线。

最后让大家看一样账单长啥样: