云计算最初是聚焦于为参与系统提高进应用架构,但在高性能计算方面却提供不了什么。现在,领先的云提供商正在对自己的产品及相关基础设施进行重构,以便让计算密集型应用具备实用性和成本效率。
传统上,云在架构上被设计为与Dropbox之类的存储、Gmail、iTunes以及Evernote等应用结合的服务交付。“集群的架构则是为了暴露存储以外的资源,比方说,那些需要在定制化网络执行供应商提供或用户开发的应用,” Bright Computing的CEO Matthijs Van Leeuwen说。
跟运行在专门硬件上的传统集群很像的是,基于云的集群出于某种目的也包含了独特的分布式资源的整合。这种云包括为能感知集群的数据库管理系统(DBMS)、高性能计算(HPC)或大数据分析应用提供平台。像Amazon、Rackspace这样的公有云提供商会把可用于在其云基础设施上开发集群的预定义资源实例暴露出来。
OpenStack允许组织定义自己的资源实例,然后用这些实例来在自己的私有云开发集群。物理服务器或者利用物理服务器上的超级管理程序的虚拟机器(VM)通常都是处在专门的本地集群里面的。对于开发者来说,关键的不同是云和专门集群之间的资源实例抽象有所不同。
集群常用情况
Leeuwen说云集群可用于替代或补充专门资源。对于专门硬件最小化的应用,如笔记本,云可用于集群的实例化、使用以及去实例化。在这一用例中,笔记本不再是一台访问基于云的集群的最终用户设备。它并不提供任何被用于执行计算或打造网络的实例化资源。
在第二种常见的用例中,基于云的资源可被用来作为专门资源的补充。这种情况下,本地资源通过哪些云资源的云爆发过程得到扩展。基于云的资源只需像专门资源一样被实例化、使用然后去实例化。本地与云端资源的区别对于最终用户以及许多类型的应用来说可以是透明的。
这两种情况都可以应用到公有云或者私有云上。组织可以将自己的应用架设来直接做这件事情,或者利用像Bright Cluster Manager之类的工具,在AWS或OpenStack私有云建立集群,从而减少前端开发和配置工作。
减少抽象的差别
开发者面临的最大挑战是提供像网络、CPU及存储等云资源与专门资源之间不同的抽象模型。云需要依赖实例化的资源。除了存储以外,基于云的CPU实例的暴露无论是公有云还是私有云产品都已经相当成熟。最新的云产品一般会伴随着针对InfiniBand网络连接、GPU加速以及自定义IP网络等特殊外部需求的服务和钩子一起提供。
任何需要经过这相同的到达路径的资源都可以暴露出来供任何类型的云内开发利用。因为集群通常利用了低时延、高带宽的内部互联结构,以及加速器和协处理器等特殊资源,在基于云的集群情况下,这些东西既代表了机遇,又会成为挑战。
组织得听凭云供应商来支持存储与计算以外资源的实例化,Leeuwen说。比如AWS,就通过Amazon VPC以及NVIDIA GPU实例支持定制的IP网络。一个好的做法是建立标准配置或利用第三方云管理来管理存储、计算、网络及加速器资源,无论它们是在本地的还是与AWS配合的。
时延是集群的关键
通信时延是建设可伸缩集群应用最大的挑战之一。好的做法是智能地为HPC筹划阶段数据。在数据端,这涉及到考虑使用更具成本效率、持久性更慢的存储服务,如AWS S3,以及利用AWS Glacier这样的归档服务,而不是更昂贵的RAM实例。
但一项甚至比这还大的网络挑战是将计算期间节点之间的通信时延最小化。在处理期间利用了消息传递的HPC应用是最容易受到瓶颈影响的。广泛利用MPI这样接口的应用将会错乱,除非开发者和运营团队确保节点之间的时延极低。
如果在集群中运行的MPI应用是封闭在私有云或者公有云范围之内的话,情况会更容易处理一些。但这个如果在运行于独立公有云或私有云的不同节点之间存在大量MPI流量的话会成为一个更大的问题。
同样的考虑也适用于在云端运行大数据分析。这对于跨本地和云基础设施之间有Hadoop分布式文件系统(HDFS)来说并没有太大意义。“不过HDFS完全位于本地或在云端的话在实践上还是工作得相当好的,” Leeuwen说。
扩充时维持性能的关键是分布式架构,敏捷云集成解决方案提供商Jitterbit的CTO Ilan Sehayek说。“让用户来选择在哪里运行API,以及在哪里运行支持该API的服务。”
还得确保所有通信都是由可伸缩的消息传递基础设施来提供的,这样才能提供API网关与服务之间快速、有保证的API请求交付。面向集群的服务也需要高效缓存技术来提供对API的快速响应,Sehayek补充道。