
1.4 架构分析
需求推动着软件定义数据中心一步步完善自己的体系架构,这也充分说明,“软件定义”的必要性不是凭空想象出来的,是由实际的需求推动产生的。回顾之前描述的发展路径,我们已经可以大致归纳出软件定义数据中心的层次结构,但是思路还不够清晰。因此,有必要从系统分析的角度,清楚地描述一下软件定义数据中心包括哪些部分或层次,以及实现这些组件需要的关键技术和整个系统提供的交互接口。
1.4.1 基本功能模块
软件定义数据中心最核心的资源是计算、存储与网络,这三者无疑是基本功能模块。与传统的概念不同,软件定义数据中心更强调从硬件抽象出的能力,而并非硬件本身。
对于计算来说,计算能力需要从硬件平台上抽象出来,让计算资源脱离硬件的限制,形成资源池。计算资源还需要能够在软件定义数据中心范围内迁移,这样才能动态调整负载。虽然虚拟化并不是必要条件,但是目前能够实现这些需求的,仍非虚拟化莫属。对存储和网络的要求则首先是控制层(Control Plane)与数据层(Data Plane)的分离,这是脱离硬件控制的第一步,也是能够用软件定义这些设备行为的初级阶段。在这之后,才有条件考虑如何将控制层与数据层分别接入软件定义数据中心。安全越来越成为数据中心需要单独考量的一个因素。安全隐患既可能出现在基本的计算、存储与网络之间,也有可能隐藏在数据中心的管理系统或者用户的应用程序中。因此,有必要把安全单独作为一个基本功能,与以上3种基本资源并列。
有了这些基本的功能还不够,还需要集中的管理平台把它们联系在一起。如图1-7所示,自动化的管理是将软件定义数据中心的各基本模块组织起来的关键。这里必须强调“自动化”管理,而不只是一套精美的界面。原因我们前面已经提到,软件定义数据中心的一个重要推动力是用户对于超大规模数据中心的管理,“自动化”无疑是必选项。

图1-7 软件定义数据中心功能划分
1.4.2 层次细分
了解了软件定义数据中心有哪些基本功能后,我们再看一下这些基本功能是怎样按照层次化的定义逐级被实现并提供服务的。分层的思路其实已经出现在关于“软件定义的必要性”的探讨中,之所以出现这样的层次,并不是出于自顶向下的预先设计,而是用户需求推动的结果。现实中无数的例子告诉我们,只有用户的需求或者说市场的认可才是技术得以生存和发展的原动力。
如图1-8所示,在软件定义数据中心最底层是硬件基础设施,主要包括服务器、存储和各种网络交换设备。软件定义数据中心对于硬件并没有特殊的要求。服务器最好能支持最新的硬件虚拟化并具备完善的带内(In Band)、带外(Out of Band)管理功能,这样可以最大限度提升虚拟机的性能和提供自动化管理功能。但是,即使没有硬件虚拟化的支持,服务器一样可以工作,只是由于部分功能需要由软件模拟,性能会稍打折扣。这说明软件定义数据中心对于硬件环境的依赖性很小,新的旧的硬件都可以统一管理,共同发挥作用。另外,当更新的硬件出现时,又能够充分发挥新硬件的能力,也让用户有充足的动力不断升级硬件配置,以求更好的性能。

图1-8 软件定义数据中心的分层模型
在传统的数据中心,硬件之上应该就是系统软件和应用软件了。但是在软件定义数据中心里,硬件的能力需要被抽象成为能够统一调度管理的资源池,因此,必须有新技术完成这一工作。计算、存储和网络资源的抽象方式各不相同,在这一层次,主要有以下一些关键技术可以帮助我们完成虚拟化和“池化”(Pooling)的工作。更多的技术细节在后续章节会有详细的介绍。
●软件定义计算:虚拟化是软件定义计算最主要的解决途径。虽然类似的技术早在IBM S/360系列的机器中已经出现过,但是其真正“平民化”、走入大规模数据中心还是在VMware推出基于x86架构处理器的虚拟化产品之后。随后,还有基于XEN、KVM等的开源解决方案。虚拟机成为计算调度和管理的单位,可以在数据中心甚至跨数据中心的范围内动态迁移而不用担心服务会中断。
●软件定义存储:主流的技术方案是管理接口与数据读写实现分离,由统一的管理接口与上层管理软件交互,而在数据交互方面,则可以兼容各种不同的连接方式。这种方式可以很好地与传统的软硬件环境兼容,从而避免“破坏性”的改造。例如EMC的ViPR既能够支持光纤通道(Fiber Channel)的连接,也支持基于以太网技术的iSCSI等多种不同的协议。如何最合理地利用各级存储资源,在数据中心的级别上提供分层、缓存也是需要特别考虑的。
●软件定义网络:同软件定义存储一样,管理接口与数据读写首先要分离。由软件定义的不仅仅是网络的拓扑结构,还可能有层叠的结构。前者可以利用开放的网络管理接口例如OpenFlow来完成,后者则可能是基于VxLAN的层叠虚拟网络。
当服务器、存储和网络已经被抽象成虚拟机、虚拟存储对象(块设备、文件系统、对象存储)、虚拟网络,回到图1-8我们可以发现各种资源在数量上和表现形式上都与硬件有明显的区别。这个时候,数据中心至多可以被称为“软件抽象”的,但还不是软件定义的。因为各种资源现在还无法建立起有效的联系。要统一管理虚拟化之后的资源,不仅仅是将状态信息汇总、显示在同一个界面,而是需要能够用一套统一的接口更进一步集中管理这些资源。例如VMware的vCenter和vCloud Director系列产品能够让用户对数据中心中的计算、存储、网络资源进行集中管理,如图1-9所示,并能提供权限控制、数据备份、高可靠等额外的特性。

图1-9 vCenter对资源的集中管理
比资源管理更贴近最终用户的是一系列的服务,如图1-8所示,可以是普通的邮件服务、文件服务、数据库服务,也可以是针对大数据分析的Hadoop集群等服务。对于配置这些服务来说,软件定义数据中心的独特优势是自动化。例如VMware的vCAC(vCloud Automation Center)就可以按照管理员预先设定的步骤,自动部署从数据库到文件服务器的几乎任何传统服务。绝大多数部署的细节都是预先定义的,管理员只需要调整几个参数就能完成配置。这对于在Linux环境中安装过Oracle数据库的工程师来说,简直如同梦幻一般。即使有个别特殊的服务(例如用户自己开发的服务)没有事先定义的部署流程,但也可以通过图形化的工具来编辑工作流程,并且反复使用。
从底层硬件到提供服务给用户,资源经过了分割(虚拟化)、重组(资源池)、再分配(服务)的过程,增加了许多额外的层次。从这个角度看,“软件定义”不是没有代价的,但层次化的设计有利于各种技术并行发展和协同工作。这与网络协议的发展非常类似。TCP/IP协议簇正是因为清晰地定义了各协议层次的职责和互相的接口,才使参与各方都能协同发展。研究以太网的可以关注提高传输速度和链路状态的维护,研究IP层的则可以只关心与IP路由相关的问题。让专家去解决他们各自领域内的专业问题,无疑是效率最高的。软件定义数据中心的每一个层次都涉及许多关键技术。回顾一下上文的层次结构,我们可以发现,有些技术由来已久,但是被重新定义和发展了,例如软件定义计算、统一的资源管理、安全计算和高可靠等;有些技术则是全新的,并仍在迅速发展,例如软件定义存储、软件定义网络、自动化的流程控制。这些技术是软件定义数据中心赖以运转的关键,也是软件定义数据中心的核心优势。本书的第2章将对这些关键技术加以深入讨论。
1.4.3 接口与标准
任何一个复杂的系统都应该可以被划分成若干个模块,既方便开发也方便使用和维护。按照相同的逻辑,复杂的模块本身也是一个系统,又可以被继续细分。在模块和层次划分的过程中,只要清晰地定义了模块、层次之间的接口,就不必担心各部分无法联合成一个整体。我们已经列举了软件定义数据中心的模块和层次,下面再看看不同的具体实现采用了哪些接口。作为数据中心发展的新阶段,软件定义数据中心在快速发展,但还没有出现一种统一的或是占主导优势的标准。我们可以从成熟度和开放性两个方面,对一些接口标准作个比较,如表1-2所示。
表1-2 接口标准比较
从对比我们可以看到,这几个可以用于构建软件定义数据中心的软件集在编程接口(API)的成熟度和开放程度上各有特点。作为针对企业级部署的成熟产品,VMware和微软的产品从接口上看都提供更丰富全面的功能,发展方向也有迹可循。作为开源解决方案代表的OpenStack则采用了“野蛮生长”的策略,例如Neutron(原名Quantum)最初发布的版本简陋得几乎无法使用,但是不到半年,提供的API就能够驱动NVP等强大的网络控制器。迅速迭代的代价就是用户始终难以预计下一版本是否会变动编程接口,影响了用户对OpenStack的接受度。