云里雾里看“计算”
云计算是很大的话题,这个领域的玩家都是巨头,个个都财雄势大,每人都有一家之言。本文只从用户角度,看看云
和计算
结合都有些什么问题。
云计算的起源与初衷
云计算是近些年炒的厉害的概念,也是生物技术相关企业常被推销的解决方案。究其起源,云计算发端于IBM的IT外包服务(IT outsourcing
),简单的说就是企业把自己全套IT基础设施托管在IBM的数据中心,后者负责运维。亚马逊(Amazon)后来居上,提供了ECS、S3等等云服务。Amazon的“中国化”就产生了现在的阿里云、腾讯云、华为云等。
云计算带来了什么新技术呢?云计算不带来什么新技术,它是一种商业模式上的创新,即将企业的一次性固定成本转化为运营成本。云计算最适合的运用场景是解决峰值需求。用户平常只需要5台机器,某个星期需要几千台机器,可以去租用云服务商的机器,避免投入千台机器的成本。云服务商通常就是那些已经买了大量机器的企业。亚马逊、阿里、京东都是电商。反正已经投入了这么多机器,忙的时候自己用,闲的时候租给你用。那么非峰值场景企业用不用云服务呢?答案取决于你对成本和安全这两个核心问题的考虑。成本问题自己可以算,安全问题很简单:云计算是异地计算,所有数据和服务都在云服务提供商手里,都在他们的运营人员手里。所以该怎么决策?算算你的成本是否划算,摸摸你的后背是否觉得安全。现在很多人说云计算是趋势,是政治正确。抛开这两个问题谈趋势,只能是忽悠。
云上安全吗?
我们再闲话几句安全问题。安全是一个很大的问题,我们这里只能扯一扯和云计算相关的安全问题。云计算的安全问题本质是信任问题,不等于安全技术。因为所有的服务和数据都在远端,我们需要确信它们是安全的。我们常用的安全技术例如加密解密,只能保证数据在传输过程中,或者数据落盘之后的安全。前提是数据在云上的整个环节都执行了严格的安全标准。感兴趣的同志们可以研究研究美国的HIPPA标准,它制定出来保护病人隐私数据。亚马逊有它的实现指南,规定了网络服务要怎么样,数据库要怎么样,存储要怎么样等等。国内的法规如何呢?我们都不知道。笔者曾经请教RSA的专家云安全的问题,为什么不能和用户签署一份服务质量协议(Service Level Agreement),承诺用户安全?他回答说“NO”,事情不是这样子做的。没有人能证明系统是安全的,你永远只能证明系统不安全。当然也无法承诺安全,你只能承诺系统的行为是按照期望那样发生的。你永远只能用技术去保证你的服务只会在哪台机器运行,这台机器所有的操作日志都存留一下,进入机房的人员都有签字录像,等等等等。你把每件事都记下来,交给客户和可信第三方来审计,说看吧,我能做到这些,你相信自己安全吗?
。至于我们的可信第三方和审计怎么样?自己去想想。
笔者亲身经历了Amazon云上的安全事件。当时我们公司在Amazon(美国地区)部署了一个网站,是一个Twiki服务,仅仅开放80端口。没有任何意外(当时很意外),我们的网站被攻击了,变成了少儿不宜视频服务,Google搜索发现成千上万的链接指向我们。其实攻击的方式很简单,利用了Twiki搜索框的漏洞。一个星期后,Amazon给我们发了邮件,报告我们的虚拟机在试图攻击别人的虚拟机。这个指责毫无疑问是正确的,因为我们的虚拟机已经不“属于”我们了。我们向Amazon投诉,它的回答是“我们只是提供虚拟机,虚拟机里面由用户自己负责”。这当然是有道理的,它涉及到云厂商和用户在基础架构服务(IaaS)的权责划分。但是它暴露了一个问题:用户上云可以将IT成本减少到什么程度?
天上云有几种?
云厂商提供的服务大致可以分为三种:基础设施即服务(IasS)、平台即服务(PaaS)和软件即服务(SasS)。IaaS包含云IT的基本构建块,通常提供对联网功能、计算机(虚拟或专用硬件)以及数据存储空间的访问。基础设施即服务提供最高等级的灵活性和对 IT 资源的管理控制,其机制与现今众多 IT 部门和开发人员所熟悉的现有 IT 资源最为接近。PaaS服务使得用户可以在云上部署和管理自己的应用程序,无需管理底层基础设施(一般是硬件和操作系统)。PaaS则给用户提供了一种完善的产品,其运行和管理皆由服务提供商负责。人们通常所说的软件即服务指的是终端用户应用程序。
对用户来说,三种不同层次的云服务面向的用户群不一样,随之而来的定制灵活性和权责界限也有很大差别。以刚才提到的Twiki 网站被黑客攻击的例子来说,如果我们使用的是SaaS服务,那所有的问题该由Amazon负责。如果用IaaS和PaaS,那么由于Twiki 服务是自己的,它的安全事宜及其后果应由用户自己承担。
云的技术是什么?
虚拟化
云计算的技术有哪些呢?首先是虚拟化。云服务提供商的生意本质上是卖资源。有人问他们靠什么挣钱?靠超分资源。虚拟化技术将一个物理机器虚拟成多个虚拟机,用户程序运行在自己的虚拟机,都认为自己独占了资源。只要一台物理机器的能力超过了一个用户的需要,这个方法就可以工作。它本质上是共享经济,和共享单车没有太大的区别。上世纪六十年代IBM就有了虚拟化技术,为什么到了2006年后才在X86架构下复兴了呢?因为硬件算力提升后,单台机器的硬件能力已经超过了单个用户或者单个应用的需要,共享具备了物质基础。
用一句话讲,虚拟化就是将硬件资源(CPU、内存)切分给不同的虚拟机使用,互不干扰。传统的X86硬件是不可虚拟化
的,Vmware的ESX和Xen以软件方式实现了X86的虚拟化。后来的X86硬件支持了硬件虚拟化
,KVM成为虚拟化的主要解决方案。系统运行必须有操作系统。实现虚拟化的操作系统叫主机操作系统(Host OS),虚拟机运行客户操作系统(Guest OS)。用户软件运行在客户操作系统中,和主机操作系统解耦合,与真实硬件无关。解耦使得用户虚拟机可以运行在任意一台物理机器上,云计算成为可能。
著名的计算机科学家Jim Gray说过(这句话大致是下面的意思):
计算机系统中的所有的问题都可以通过增加一个间接层来解决,但是每增加一个间接层会带来新的问题。
虚拟化通过增加间接层解决了软件与硬件解耦合的问题,但是它带来了新的问题:性能损失。云计算依赖的虚拟化技术带来了不可忽略的性能损失,这是阻碍HPC云上应用的一大因素。
云存储
“云存储”这个说法被赋予了太多的内容,变得难于界定。Amazon及其后来云厂商的S3存储服务只是一种新的协议。目前绝大多数应用使用的是Posix文件访问接口,不能直接使用S3协议。大规模计算采用的存储通常是分布式文件系统,通过NFS协议或私有客户端挂载到计算服务器上访问。高通量计算的一系列任务可能运行在不同的计算节点,MPI程序的多个实例同时运行在多个计算节点,需要通过分布式文件系统读取输入数据,交换中间结果,存储最终结果。某些云服务商提供的批量计算支持S3类存储作为数据输入,是因为它在程序访问数据前将数据下载到本地,完成计算后将结果再上传。数据的上传和下载必然影响计算的性能。
不同云服务对存储的要求并不一样。通常的云应用(例如虚拟机、网站、数据库、CRM等等)使用存储本质上并不要求是一个超大规模的分布式存储,不同用户或者同一个用户的不同应用的数据可以隔离,单个数据空间的性能要求并不会超过传统的单个存储的能力。HPC或者其它类型的计算不一样,它要求多个机器同时访问同一个存储空间,这个存储空间的带宽、延迟,数据访问的一致性要求非常高。如果计算集群与其它用户的虚拟机混合运行,存储访问的高带宽必然影响其它虚拟机的性能。它使得云服务商必须在隔离部署计算集群和限制计算吞吐量做出两难选择,前者必然增加计算成本,后者必然降低了用户应用的性能。
总体来说存储并不是云服务商的长项,“云存储“这个说法背后的技术仍然是传统存储的技术,公有云不会使得计算访问存储获得任何优势。
服务质量控制(Qos)
用户业务在云上运行,不仅涉及到计算资源问题,还涉及网络和存储。这些资源都是多租客共享的。虚拟化做到了资源隔离,服务质量控制(Qos)要求做到性能隔离。举一个大家都会遇到的例子,如果你家里有人通过网络BT下载大量视频,你访问网页就会有延迟,背后的原因是BT下载无限制的使用带宽耗尽了网络资源。这就是Qos要解决的问题,它确保不同用户和不同质量的服务共享资源,且相互无影响。
对公有云这样的大规模分布式基础架构,Qos的难点在于控制数据IO和网络Traffic的调度。这方面的一个例子是Google的Borg系统。Borg系统负责调度Google所有的业务,它的一大亮点是允许在线业务(例如提供实时交互的网页访问)和离线业务(例如Map-Reduce统计网页数据)某种程度地混合部署。离线业务不追求交互实时性,它的高吞吐量倾向于榨干系统资源,直接让网页访问变慢,交互体验变差。这两种业务如果单独部署,资源的实际利用率并不高。混合部署可以充分利用资源,节省巨大成本,前提是有某种机制保护在线业务不受影响。对云服务商来讲,混合部署的程度越高,越能够节省成本,收益也就越高。从这个意义上说,服务质量控制(Qos)是云计算的核心技术。
云能为HPC做什么?
从技术层面来说,云计算和目前生物技术相关企业常关心的高性能计算(HPC)是两个优化方向。前者目标是切分资源给多个租户解决多个小问题确保服务质量,后者的目标是聚合多台物理机器资源解决一个超大的问题。所以云计算在技术上不可能给HPC一个更好的方案,但它有解决峰值需求的资源优势。
混合云
如果你是有一定规模业务的企业,本身应该具备一定的IT基础设施,但是基础设施的规模可能不足于支撑突发的业务。在这种情况下,需要临时租用云上的资源。用户本身的业务系统需要具备无缝对接云的能力,否则只能是项目式的租用。无缝对接是所谓混合云要解决的问题,它要求用户的业务系统能够打通私有数据中心和公有云之间边界,这其中的难点在于数据访问问题。
弹性计算
Amazon从10多年前就开始提供弹性计算服务,典型的例子是Elastic Map-Reduce
,它应该归于PaaS的一种。用户在网页上提交自己的Java程序(实现了Map和Reduce操作),指明数据位置和资源需求(多少个虚拟机,什么规格的虚拟机),云服务自动帮你启动指定规模的Hadoop集群进行计算,计算完成后将计算结果存储到S3中。
当然,真实世界的弹性远没有那么完美。云服务商持有的计算资源和存储资源的容量总有限制,面对成千上万的客户,它在应对峰值需求的时候也不轻松。物理机房分布和网络拓扑及跨区域带宽也限制了云上应用的扩展能力。例如MPI类型的计算,进程之间交互频繁,虚拟机之间网络上不能太远。计算需要访问存储,计算与存储之间如果跨区域,性能就会成为问题。在国内云服务上起一个相对大规模集群可能需要提前预约的。笔者就遭遇到这样的尴尬,想在客户面前动态启动几台虚拟机集群提供服务,结果被告知没有资源。所以从业务水平上讲,真正的弹性计算的时代可能还没有到来,大多数应用场景还是类似IBM早期的托管服务。
霸王硬上弓
虚拟化给计算带来了性能损耗,各大云服务商纷纷提供基于裸机
的解决方案,直接将物理机器提供给用户使用。在这种情况下,虚拟化带来的红利完全消失,私有数据中心从线下搬到了线上,云服务蜕变成了IT托管服务。
数据是核心难题
现在的计算业务不同于早年的科学计算,数据处理所占比重越来越高。纯计算类业务(数据量小,计算量大)很容易采用混合云和弹性计算来消峰,数据密集型计算需要解决线上线下如何共享数据的问题。相比于使用云上的计算资源,数据上云面临更大的挑战,它涉及到数据安全问题和法律法规的制约。某些云服务商为大客户专门建设网络专线,打通线上线下的数据通道,可以做到数据在线下,计算在线上。它的成本和性能损失是显而易见的,可谓是“大力出奇迹”,事倍而功半。
云计算不是魔法
云计算也许是政治正确,但它肯定不是魔法。从技术角度看,云服务并不能提供HPC更好的性能,也不意味着HPC更容易实现。云服务提供商的优势在于有大量的资金,购买大量昂贵的硬件,在多个租客之间共享,利用共享经济使多方获利。