数据中心2014:软件定义的计算

云计算1年前 (2023)发布 aixure
52 0 0
导读:在《数据中心2013:硬件重构与软件定义》当中,我们已经介绍了硬件重构与软件定义的概念,如《生态系统与规模的角力》说的一样,软件定义的概念不是我们的发明,硬件重构也不是,不过,把硬件重构和软件定义放在一起明确的提出,确是我们首创。 尽管本年度的…

在《数据中心2013:硬件重构与软件定义》当中,我们已经介绍了硬件重构与软件定义的概念,如《生态系统与规模的角力》说的一样,“软件定义”的概念不是我们的发明,“硬件重构”也不是,不过,把“硬件重构”和“软件定义”放在一起明确的提出,确是我们首创。

尽管本年度的数据中心技术研究报告的标题不会再用“软件定义”,但是,我们仍然打算继续谈“软件定义”,因为我们觉得,尽管计算实际上受软件的“定义”已经很多年,但大众离真正意义上的“软件定义”还有很大距离,实际上,我们认为,软件定义网络在这方面还要更先进一些。当然,我们也会谈到生态系统的问题,这也实际影响到了软件定义计算的发展路线——变成了现在这个样子的原因。

我们希望的软件定义计算是什么样子呢?套用Andrew S. Tanenbaum在其著作《Distributed Operating Systems》中提到的五点:Transparency (透明性)、Flexibility(灵活性)、Reliability(可靠性)、Performance(性能)、Scalability(伸缩性)。计算机科学家Tanenbaum是Minix(一种Unix克隆操作系统)和Amoeba(一种原生分布式操作系统)的作者,这五点要求针对的是分布式系统,而在现实世界中,多台计算机组成的具有一定程度耦合的计算系统实际上都是分布式系统的一种——包含云计算、高性能计算在内,因此这五点要求包含了我们对实际上的计算系统的要求。

分布式计算有Scale Out需求的原因,也有基于实际上地理分布计算的原因

尽管分布式计算提起的不多,然而我们希望的软件定义计算系统也同样拥有相同的诉求,这样的系统都需要通过特别开发的硬件或者软件来达成,也就是硬件定义或者软件定义。尽管逻辑上,我们不排除硬件上实现这样的计算系统,但毫无疑问,通过软件实现可以最好地满足其中Flexibility(灵活性)这一点,这也是软件定义兴起的重要原因之一。

除了Flexibility灵活性之外,Reliability可靠性、Performance性能、Scalability伸缩性这三者是互相关联的。分布式系统之所以存在除了物理上需要的分布之外,还因为分布式本质上具有的容错性,如HA高可用性,两地三中心等等,都是通过分散的冗余系统来去除单点失效。注意到Reliability(可靠性)和Availability(可用性)以及Fault Tolerance(容错)的联系与区别,一个高可靠的系统必然是高可用的,而且还不仅如此,高可靠的系统还必须保障运作的正确性,就像在分布式存储系统当中,通常会通过保存多个副本来保持数据的可用性,但是仍然需要额外的机制来保证数据的正确性——特别地,在存储系统中就是“一致性”,实际上可靠性和一致性是需要取舍的,副本数量愈多保持一致性就越难;对于Fault Tolerance(容错),基于Hypervisor的底层方案已经可以提供一些不错的方案,如VMwarevSphere Hypervisor 6.0已经可以提供4个vCPU的虚拟机Fault Tolerance,但是如果我们如果需要更强的虚拟机容错能力呢?我们希望的是可靠的计算系统,除去无法预测的人为故障、难以消除的软件Bug之外,我们设计的计算系统本身的架构能满足这个需求吗?从如Amazon等等的公有云厂商偶尔出现的大规模故障来看,我们还有很多的工作要做。

Active-Active,主主模式(或称双活)已经算是一种比较高级的HA模式

其次是Performance性能,性能是非常重要的,因为性价比关系到运营成本,和整个生态系统都有关联,这一要点也是和硬件和软件都紧密相关的。在HPC领域,一个重要的部件就是InfiniBand,或者说,其核心:RDMA(Remote Direct MemoryAccess,远程直接内存访问),这是一个可以加速分布式系统中不同节点通信的技术,简而言之,RDMA是让数据通信可以bypass掉操作系统的Kernel以及TCP/IP或者其它的协议层,以及降低数据复制的次数,达到降低通信延迟的目的,一些HPC系统并没有用InfiniBand而是使用了以太网,关键在于高端的以太网也提供了RDMA的能力,并且成本更低,InfiniBand、RoCE、iWARP三种RDMA规范中后两种就是基于以太网的。当前,RDMA网卡的价格也已经降低到了和普通网卡不太远的程度。

RDMA(Remote Direct Memory Access,远程直接内存访问),允许跨网络的快速内存空间访问

至于软件,有大量的工作是关于充分发挥硬件的特性,对NUMA的优化是否已经充分?LinuxKernel社区目前还在NUMA Awareness的内存管理以及处理器调度方面进行努力,而软件定义计算上更为重要的部件——Hypervisor,在这方面的工作还未达到令人满意的地步。此外,还有更多的硬件辅助虚拟化特性,如APICv、VMCS、VMFUNC,等等,在这方面仍然有非常多的工作可以做。

然后是Scalability伸缩性,一套算法可能在数十上百个节点上工作良好,但到上千个节点可能就效率低下,到了更多的节点就彻底不能工作,不同的规模大小会影响到体系架构的选择,小到多达单个封装达18个物理核心的Haswell-EP至强处理器,大到数百节点的Hadoop,MapReduce,Spark这样的软件计算系统、数量不明的IntelRSA这样的硬件架构、乃至数PiB级别的Ceph,GlusterFS这样的分布式存储系统,都需要对其架构、算法进行衡量。我们期望的计算系统需要有良好的伸缩性,虽然一个算法不可能满足所有的情况。

Map/Reduce是一种时下很流行的大数据/分布式计算框架

最后提到的是Transparency透明性,对于大多数人来说,透明性是最重要的一点,它实际上和上面的Scalability伸缩性有一定联系。透明性的含义很多,其中大概最重要的一点就是Single System Image(SSI,单系统映像),很好满足这个要求的系统很少,因为满足它要求分布式系统对所有用户来说,就像是单个系统,区别仅仅是具备的CPU、内存、硬盘更多更大。当前的不少系统可以在不同的虚拟化层次上至少部分地满足这个需求,例如一些超算系统使用作业系统来分发计算任务到不同的节点,就“作业”这个应用程序的层次来说,整个计算系统呈现的是一个单系统映像,然而限制也在于应用程序层,只有特定的应用才有可能进行分发;另一些超算系统则基于各种分布式通信的库,如MPI等,只要基于这些库进行编程就可以应用到更多的计算能力。更为理想地,SSI可以在操作系统层实现,现有的多线程应用不需要就可以透明地、自动地应用不同节点上的运算能力。我们当前的IaaS云计算环境很大程度上仅仅是提供了一堆松散的小虚拟机,PaaS和SaaS有望提供一定程度的SSI能力。

超级计算机,在很大程度上是提供了SSI的多台计算机的集群

可以看到,目前的计算系统,在Transparency (透明性)、Flexibility(灵活性)、Reliability(可靠性)、Performance(性能)、Scalability(伸缩性)这五点上可以做的还有很多,软件定义计算还有很远的路要走。

赞助本站

© 版权声明

相关文章

暂无评论

暂无评论...