再看云计算是否安全

Amazon的AWS云计算服务又宕机了,这是6月份的第二次。和其它的宕机事件一样,又引发了大家对云计算安全性的质疑。其它的云计算服务比如windows azure 或google的gmail服务的宕机也时有发生。 老是出问题好像不太符合云计算的吹捧的高安全性呀。那么云计算的安全性到底如何,做为那些正在准备引入云计算的公司,是否需要需要再考虑考虑呢?下面谈谈我的看法。

首先要订正的是该事件实际上不属于安全性的范畴而是高可用性的问题。安全性通常是指是否可以访问未授权的资源或数据(当然DoS攻击也是安全性问题),这里所指的是用户部署在云里的服务是否可以一直可用。 所以真正的问题是云计算是否高可用?

在回答该问题前我们需要分清楚云计算里的两个基本概念:计算服务和存储服务。

计算服务是指云计算提供商提供给用户的用以进行运算的服务。它通常是以实例单元来衡量的,比如一个虚拟机可以是一个实例单元。用户在购买或使用计算服务时可以是一个或多个实例单元。比如用户的在线购物应用程序,一个实例单元可以扛得住1000用户的访问量的话,如果你通常会有10000个用户同时访问的话,你至少需要10个运算实例。如果在高峰值时有50000个用户同时访问,你需要购买50个运算实例。而在低峰期是如果只有2000个用户访问的话,你可以只购买2个运算实例就可以了。所以你可以方便灵活地更具用户访问量来调整购买实例的数据量,这样既不会浪费,也不会不足。这就是我们所说的云计算的最大优点之一:弹性伸缩,按需使用和按使用付费。但是,要做到这一点,每个运算实例必须是"无状态"的,也就是每个运算实例完全相同,不可以在运算实例的本地机器上保存任何状态数据。原因很简单:如果你在本地保存数据的话,只有你自己实例能够使用。在前面10000个用户访问量的例子中,在增加再多的运算实例也没有帮助,因为只有你有数据,别的再多机器也帮不上忙。

但是在实际的应用程序中我们又必须处理和保存数据。所以为了运算实例"无状态"而又可用保存数据,云计算提供商必须提供第二个服务:存储服务。

存储服务很简单就是给用户保存数据用的。但是数据是用户业务的核心中的核心,绝不可以出现任何差错。所以存储服务必须使用足够的措施来保证数据的万无一失。绝大多数的公司都采用两中方式:一是:把用户数据划分成块,每一块是一个存储单元。每个存储单元分多次保存在多个服务器上。这有两个好处:一是如果一个服务器宕机了,其它服务器上的数据还可用;另一个是负载均衡以提高读数据的效率。这些服务器都在同一个数据中心,所以使用同步复制,即使把同一个数据块写多次也不会影响写数据的效率。但是把同一个数据的多个拷贝存放在同一个数据中心无法应付大的灾难,比如数据中心失火,地震或城市断电等。所以大部分公司把数据再一次复制保存到另外一个城市的数据中心里(两个数据中心最少相距150公里)。如果一个数据中心瘫痪,可以把用户请求切换到另外一个数据中心。因为两个数据中心的数据复制较慢,所以通常采用异步复制的方式,每隔10分钟复制一次。另外一点是第一种同步复制是默认的,用户不用做任何配置,也是免费的;但是第二个异步复制需要用户提出,而且可能有额外的费用。

所以有了存储服务后,用户就可以把数据或状态保存到存储服务理,而实现运算实例的无状态了。可以随时增加或减少实例数量,一个实例宕机也没有问题,还有其它实例在处理。实际上在数据中心里机器宕机,网络断掉,硬盘坏掉每天都在发生,但是用户感觉不到。如果用户把自己的应用服务同时部署到多个数据中心的话,即使一个整个数据中心宕掉的话,用户的访问请求可以快速切换到另外一个数据中心,用户也不会感觉到任何问题。这就是运算服务的高可用性:服务器宕掉了没有问题,整个数据中心宕掉了,同样没有问题。但是我们可以看的要做到这一点,用户必须做两件事情:1.你必须有最少两个运算实例,道理很简单:如果只有一个,它宕掉的话没有其它实例,当然做不到高可用性。2.你的应用程序必须在多个数据中心部署,一样的道理。最少两个才可以做到双保险。

我们再来看看亚马逊的本次宕机事件。因为当地暴风雨导致数据中心断电,在切换到备用电源后,备用电源出现故障。所以导致整个数据中心宕掉了。在切换到其它数据中心的时候有发现切换程序出现故障,导致无法切换,所以最终导致用户应用服务不可用。另外它都只是计算服务宕掉了,并没有影响数据服务,或则数据没有丢失。等到计算服务回复后,系统恢复正常。所以计算服务宕机很正常,如果数据丢失麻烦就大了。其实这一次恶劣天气照成数据中心断电本来可以体现亚马逊云计算高可用性的一个经典案例,但是很可惜的是它的切换程序出了问题,反而成了失败案例。

所以我们可以看出在保证应用程序的高可用性和数据的安全性上,没有一家单个公司可以做到像亚马逊,微软或其它云计算提供商那样的完备,根本不是一个级别上的比较。我们对亚马逊宕机反应强烈只不过是我们对云计算有着不切实际的期望(100%高可用性)。殊不知我们对自己公司办公室的服务器经常宕机习以为常了。 当然云计算提供商在保证高可用上还要继续努力,但是它也不应该是质疑或反对云计算的理由。另外一点就是要高可用性不是与生俱来的,而是要求用户必须做很好的设计,充分利用云计算提供的机制,而不是把应用程序扔到云里面就万事大吉了。一个最简单的道理:不要把所有鸡蛋放在一个篮子里。