张军利
IBM中国 北京 100101
开源软件(Open Source Software,OSS)在近几年发展迅猛。随着大数据等相关技术在行业应用上的快速发展,OSS所涉及的领域也从传统的操作系统、Web平台等向更广阔的空间扩展,并获得业界的广泛认同。国内外很多知名厂商在新一代服务器的开发上,与OSS进行了更为紧密的结合。
早期,X86平台在OSS的发展方面优势明显。但从2013年以后出现的新开源项目来看,OSS在X86和Power Systems平台上的发展几乎同步。这一方面得益于Power Systems平台自身的发展壮大,另一方面则得益于Docker的出现。
2013年8月,IBM、Google、TYAN、NVIDIA、Mellanox等5家公司发起成立了OpenPOWER联盟,揭开IBM Power Systems的开放之路。凭借IBM强大的投资力度和日渐成熟的OSS生态系统, Power Systems系统级的实力得以发挥,在X86之外为用户提供了更多甚至更好的选择。
在新型应用负载主导平台的争夺战中,X86和Power Systems两大平台一直是竞争对手。而最近火热的Docker将有望成为Power Systems在与X86的角逐赛中实现“弯道超车”的利器。
Docker[1]是PaaS(应用平台即服务)提供商dotCloud在2013年推出的一款基于Linux容器(Linux Container,LXC)的高级容器开源引擎。它基于go语言并遵从Apache2.0协议开源,源代码托管在 Github上。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时不需要诸如VMware的vSphere、微软的Hyper-V或Linux的KVM等传统虚拟机(VM)的额外操作系统开销,有效提高了资源利用率,并提升了IO等方面的性能。目前,Docker可以在容器内部快速自动化部署应用,并可以通过内核虚拟化技术来提供容器的资源隔离与安全保障。
Docker在英语里的意思为“码头工人”,而其Logo(如图1所示)可以说是对运行原理的形象描绘。一艘酷似鲸鱼外形的大船,运载着一堆集装箱前往各地的码头。而从其理论上来看,Docker就像是一个集装箱,利用LXC技术来整合不同规模、类型、层级的应用镜像,先通过集中汇总后,再进行有序地分发。每个码头就是一台服务器或VM,大船就是Registry,码头的工人就是核心Engine,进行集装箱的装配。当然,它还需要一系列外围的支持,比如最重要的管理等。
图1 docker的图标
Docker引起当时开源软件界的广泛关注,其开发公司docCloud甚至直接更名为Docker。Docker的兴起主要是因为它有效解决了当时开源软件发展面临的四个主要问题。
1) 环境管理复杂问题。从各种OS到各种中间件再到各种App,一款产品能够成功发布,作为开发者需要关心的东西太多,且难于管理,这个问题在软件行业中普遍存在。Docker可以简化部署多种应用实例工作,比如Web应用、后台应用、数据库应用、大数据应用等,比如Hadoop集群、消息队列都可以打包成一个Image来实现部署。
2) 云计算时代的软件管理问题。业务流程管理开发平台(AWS)的成功,引导开发者将应用转移到云上,解决了硬件管理问题,然而软件配置和管理相关的问题依然存在。Docker的出现正好能帮助软件开发者开阔思路,尝试新的软件管理方法来解决这个问题。
3) 虚拟化手段的变化问题。云时代采用标配硬件来降低成本,采用虚拟化手段来满足用户按需分配的资源需求,并保证可用性和隔离性。相对于原有的KVM和Xen,Docker为用户提供了更高效的运行环境、更加轻量级的LXC,以及更加灵活和快速的部署。
4) LXC的便携性问题。LXC在Linux 2.6的Kernel里就已经存在,但其设计之初并非为云计算考虑的,它缺少标准化的描述和容器的可便携性,其构建出的环境难于分发和实现标准化管理。而Docker这个问题上做出了实质性的创新方法。
传统虚拟化中包含两种类型(如图2所示),即Type-1和Type-2。Type-1是指在服务器的硬件平台上先部署虚拟机管理层(Hypervisor),在Hypervisor之上生成虚拟机,再为每个虚拟机安装操作系统、运行库和相关的应用。Type-2则在裸机之上先安装操作系统(比如Linux或Windows),再安装Hypervisor。Type-1虚拟化比较常见的是VMw are的vSphere、微软的Hyper-V、Linux的KVM以及Xen;Type-2的典型代表是VMware的Workstation以及Oracle的VirtualBOX。Type-1型Hypervisor更接近硬件底层,所以可以更多地降低系统支出。但Hypervisor本身仍需一层基本的OS“垫底”。因为虚拟机都要先经过本地的OS再透过Hypervisor调用服务器的物理硬件资源,所以依然存在系统开销。
与传统的服务器虚拟化相比,LXC是一个将Linux运行时、库以及其他软件运行支撑环境与相关应用进行封闭的技术。它本身就源于操作系统的内核(Linux Kernel),相当于系统的一个本地进程,与一个裸机(无虚拟化)应用没有区别,无需额外的虚拟化指令以及相应的系统虚拟化支出。Docker就是以LXC为根基构建的,在实现应用间隔离的同时,减少Hypervisor虚拟化管理层,基本消除了额外的系统支出。这可以说是Docker区别于传统服务器虚拟化的一个重要特点。
虽然LXC较传统的服务器虚拟化有所改进,但在技术发展中也逐渐显示出弊端。LXC缺少全局的统一标准化描述定义,它在原始开发中没有过多考虑可迁移性(共享),所以在管理方面比较复杂。在“互联网+云计算”时代,应用大规模扩展部署的情况时常出现,传统LXC缺乏有效的应对办法。而Docker的诞生很好地解决了这个问题,通过“云+端”的理念,以PaaS云管理模式为容器技术赋予了新生。
图2 Docker与传统VM以及Linux容器技术(LXC)的对比
从Docker的应用封装架构(如图3所示)中可以看出,其最基础的运行内核与底层镜像就源于Linux的内核,用户可以利用Dockerfile生成好的应用镜像上传至远端的Docker Registry,例如Docker公司自己运营的云服务或是私有的Docker Registry,也可以从Docker Registry里下载一个别人已经建立好的镜像直接运行。Docker赋予了LXC更好的灵活部署和快速应变能力。
Docker Registry和Docker Engine是Docker体系中的两个关键组成。Docker Registry通过Docker Hub进行索引,在远端(或称云端)负责收集与分发Docker的应用镜像(Images)。Docker Engine在客户端负责构建Docker应用容器。这是一个典型的PaaS云服务理念。当然,用户也可以在自己的数据中心内部建立私有的Docker Registry,以方便在私有云内迅速生成自己的Docker集群,应对灵活的、大规模的应用扩展需求,就相当于在企业数据中心内部形成了一个“云+端”的Docker架构。
图3 Docke的架构封装
从创新和特点可以看出,Docker最明显的优势在于大幅度变革了传统应用DevOps的模式和流程,可以让开发者更专注于应用的本身,从而使得应用的更新与共享、迁移更为容易。这也是云时代特别被看重的特性。
在单一类别应用的大规模部署方面,Docker有着得天独厚的优势。通过便利的镜像组合,Docker可以做到一次生成之后进行随意地极速部署。在云计算和互联网IT形态日益普及的趋势下,应用集群的动态扩展需求非常普遍,对于那些客户流量波动性大的企业更是如此。例如,大型电商在做促销时访问量峰值可能是平时的十倍甚至百倍,如何平滑地快速扩展相关应用集群成为决定业务营收的关键。而在一台POWER8的双路PowerLinux服务器上,仅需40秒就可以部署100个Apache Web服务器实例,这在以往的虚拟化环境中是不可想象的。
凭借着众多新颖的特性、优秀的性能表现以及项目本身的开放性,Docker迅速成为PaaS领域里不可或缺的成员。目前,Docker官方Registry所注册保存的Docker镜像已经超过6万个,并在不到两年的时间里迅速获得诸多厂商的青睐,其中不乏Google、Microsoft、VMware、IBM等行业领导者。
2014年,Google推出Kubernetes提供Docker容器的调度服务;同年8月,Microsoft宣布在Azure上支持Kubernetes;随后,传统虚拟化巨头VMware宣布与Docker强强合作[2]。2014年9月中旬,Docker获得4 000万美元的C轮融资,以推动分布式应用方面的发展。2014年12月,IBM宣布其PaaS平台BlueMIX正式支持Docker,并提供傻瓜级的操作,最大程度地降低了Docker对具体操作技能的要求。与此同时,IBM自主的硬件平台——Power Systems服务器与System z大型主机也开始全面支持Docker,配合相应的OSS环境的建设,开始了针对X86平台的“赶超”。
Power Systems和Docker彼此促进、互为助力,两者的相互影响主要体现在两个层面:硬件层面和基础设施软件层面。
最主要的影响表现在基于POWER8的新一代PowerLinux服务器上。在这个服务器上,Docker所支持的Linux平台更为丰富,除RedHat与SUSE外,还加入了Ubuntu[3]。就硬件系统而言,POWER8平台为Docker提供了更高性能和高RAS特性带来的可用性保障。性能的提升一方面让Docker应用受益,另一方面也意味着在性能体验相同的情况下,可以让单机上的Docker部署密度更高。实验表明,Docker在POWER8平台上的部署密度较X86可提升2倍甚至更高。通过POWER8独家的CAPI接口所连接的存储(如FlashSystem全闪存阵列)与网络平台, POWER8平台的整体性能表现与负载能力在外围I/O层面得到极大扩展,配合POWER8服务器自身完善的RAS特性,为Docker提供了比X86更为可靠、综合性能更好的平台。
在基础设施软件层面,Docker的使用将进一步体现出Power Systems的优势。虽然Docker较传统VM更具优势,但并不表示有了Docker就不需要虚拟化了。事实上,Docker与虚拟化平台在很多场合是相辅相成的。Docker是基于Linux内核的一种特殊进程,虽然它具备了一些虚拟化的特性,但仍不具备动态迁移、应用环境混合部署等一些关键的虚拟化特性,也无法满足更进一步的应用隔离与安全性等需求;因此,有必要借助传统虚拟化平台的能力来帮助Docker应对更多的场景需求。
从Docker和虚拟机的对比(如图4所示)结果可以看出,Docker完全可以部署在传统的虚拟化环境中。只要支持64位的Linux,就能部署Docker,并由此具备虚拟机本身的一些优点。为此,微软、VMware等传统虚拟化巨头均纷纷表示支持Docker在其平台上的部署。
为验证POWER架构对Docker的天然优异支持性,我们可以对PowerVM和其他Hypervisor上部署的结果进行比较分析。
首先,虽然PowerVM也是Type-1级别的Hypervisor,但它是更接近“裸机”的虚拟化解决方案,与POWER平台有着天生的结合能力,所以在性能的体验上与Docker可谓异曲同工。在PowerVM上部署Docker就等同于在裸机上进行部署,能提供更好的性能保证。
其次,通过PowerVM,POWER服务器可以被划分成多个逻辑分区(LPAR,相当于VM),在其上同时部署UNIX(AIX)和Linux操作环境,从而实现异构平台的混载,而这是X86厂商所做不到的。同时,PowerVM是目前公认最安全的Hypervisor,基于PowerVM环境,Docker可以获得更好的安全防护。
PowerVM+Power Systems可以为Docker提供比X86更为强大和灵活的虚拟化平台,为Docker应对更多的应用场景,尤其是将其带入UNIX/Linux混合应用环境打下良好基础。
此外,PowerKVM的正式发布为熟悉KVM的用户向PowerLinux平滑迁移提供了保障。与X86的KVM相比,PowerKVM的能耗管理、RAS特性与CPU调用更为强大(例如EnergyScale、Extended Error Handling、微核模式等),可以为Docker提供更好的KVM虚拟化平台。
图4 Docker和虚拟机对比
在软件层面,Docker研发成员正与相关合作方一起全力构建面向POWER架构的Docker环境。在云方面,诸如BlueMIX等产品(系统)已经可以支持Docker的部署,Docker也已经可以裸机部署在SoftLayer平台或SoftLayer的虚拟化平台上。在端方面,众多公司开始与Docker公司围绕 Docker Hub Enterprise (DHE) 在企业级应用领域展开紧密合作,其中IBM将通过集成方案和单独产品两种模式生产和销售DHE,为用户提供基于云或他们自己数据中心内部的Docker分发服务。
目前,全球TOP15的Docker镜像已经或将支持POWER平台。其中,已经支持POWER的镜像包括Ubuntu、MySQL、Rails、Postgres、Wordpress、Redis、Mongo、Python、Base(deprecated Ubuntu)、Debian、Java等,BusyBox与Centos则正在路上。
在Docker的管理方面,借助OpenStack中的HEAT组件,业内领先的云管理平台ICM(IBM Cloud Manager with OpenStack,算是OpenStack的IBM发行版)都在加快完善对Docker的支持。这里的支持与传统的HEAT不太一样。ICM云管理平台本身是跨异构平台的,包括POWER、System z以及X86,它为用户提供了一个统一的管理环境,为Docker开辟了更为广阔的应用环境。
Docker的出现可以说在理念上实现了巧妙的创新,给软件的开发运维管理(DevOps)带来重要的变革,最重要的是为整体的应用形态和应用的快速部署带来深远影响,足以促进相关的IT技术与基础架构发生重大的变化,这种变化既带来挑战,也带来机遇。
面向未来,OSS将在未来的IT环境中扮演越来越重要的角色,借助Docker的发展,Power Systems超越X86已经不再仅是个梦想。
参考文献
[1]James Turnbull.Docker[M].北京:人民邮电出版社,2015
[2]What is Docker[EB/OL].[2015-01-03].https://www.docker.com/whatisdocker/
[3]IBM Inc.[EB/OL].[2015-01-03].http://www-03.ibm.com/systems/power/?lnk=mprSY-psys-usen