如何借助云集群打造高性能计算

云计算一开始致力于为互动系统(systems of engagement)改善应用架构,而在高性能计算方面提供不了什么。而如今,领先的云服务提供商正在重构解决方案及相关的基础设施,让计算密集型应用切合实际、经济高效。

云集群

在过去,云架构是为了交付将应用程序与Dropbox、Gmail、iTunes和Evernote等存储结合起来的服务而设计的。Bright Computing公司的首席执行官Matthijs Van Leeuwen说:“集群的架构旨在暴露除了存储外的其他资源,比如在定制网络中执行厂商提供的或用户构建的应用程序所需要的那些资源。”

酷似在专用硬件上运行的传统集群,基于云的集群包括不同的分布式资源,这些资源因某个用途而结合起来。这可能包括:为可识别集群的数据库管理系统(DBMS)、高性能计算(HPC)应用或大数据分析应用交付平台。亚马逊和Rackspace之类的公有云提供商暴露资源的预定义实例,它们可以用于在云基础设施上构建集群。

OpenStack让企业组织可以定制自己的资源实例,然后使用这些资源实例在自己的私有云中构建集群。物理服务器或使用物理服务器上虚拟机管理程序的虚拟机在专用的内部部署集群中很典型。对开发人员来说,区别主要在于资源实例抽象,这是云集群与专用集群之间的主要区别。

常见的集群使用场合

Leeuwen表示,云集群可以用来取代或补充专用资源。对于运行在低配专用硬件(比如笔记本电脑)上的应用程序而言,云可以用来为集群创建实例、使用集群以及删除实例。在这种使用场合下,笔记本电脑只是访问基于云的集群的最终用户设备而已。它并不提供用来执行计算或设计网络的任何实例化资源。

在第二种常见的使用场合下,基于云的资源可以用来补充专用资源。这种情况下,内部部署的资源通过云突发流程,由云端可用的那些资源予以拓展。基于云的资源只要根据需要创建实例、使用并删除实例。可以做到内部部署资源与云端资源的这种区别对最终用户和许多类型的应用而言是透明的。

这两种使用场合都可以运用到公有云或私有云。企业组织可以设计其应用程序架构,以便直接做到这一点,或者充分利用Bright Cluster Manager之类的工具,在AWS公有云或在OpenStack私有云中构建集群,前期的开发和配置工作比较少。

弥补抽象方面的缺口

开发人员面临的最大挑战就是,用于相对专用硬件,配置云资源(比如网络、处理器和存储)的不同抽象模式。云依赖实例化资源。除了存储外,暴露基于云的处理器实例在公有云和私有云解决方案中都相当成熟。最新的云解决方案随带服务和钩子(hook),可用于指定异常需求,比如InfiniBand网络连接、GPU加速和定制的IP网络。

任何资源都需要通过这同一条路径来传输,之后才能予以暴露,以便在任何一种类型的云里面利用。由于集群通常使用低延迟高带宽的互连结构、加速器和协处理器以及其他的专门资源,这每一个在基于云的集群方面同时带来了机遇和挑战。

Leeuwen表示,企业组织完全由云服务提供商来支持存储和计算之外的资源实例化。比如说,AWS通过亚马逊VPC以及英伟达GPU实例,支持定制的IP网络。一种良好的做法就是,开发标准的配置,或者充分利用第三方云管理工具,管理存储、计算、网络和加速器等资源,无论它们驻留在企业内部,还是与AWS协同使用。

延迟对集群来说很关键

通信延迟是构建可扩展集群应用面临的最大挑战之一。一个良好的做法就是,为HPC智能化缓存数据。在数据方面,这需要认真考虑使用更具成本效益的、速度较慢的持久性存储服务(比如AWS S3)和归档服务(比如AWS Glacier),而不是成本较为高昂的RAM实例。

但是一个还要重大的网络挑战在于在运算期间,尽量缩短节点之间的通信延迟。处理期间充分利用消息传递的HPC应用最有可能出现瓶颈。大量使用消息传递接口(MPI)等接口的应用会陷入困境,除非开发人员和操作团队确保节点之间的延迟极低。

如果MPI应用在密封在私有云或公有云里面的集群中运行,这个问题比较容易解决。但如果在不同公有云或私有云基础设施上运行的不同节点之间有大量的MPI流量,这个问题就比较棘手。

这些考虑同样适用于云端运行大数据分析任务。让Hadoop分布式文件系统(HDFS)实例横跨内部部署基础设施和云基础设施没有太大意义。Leeuwen说:“但是完全在内部或完全在云端的HDFS实例实际上能取得相当好的效果。”