本文由南京大学顾荣、施军翻译整理自Alluxio公司技术博客,由Alluxio公司授权CSDN首发(联合),版权归Alluxio公司所有,未经版权所有者同意请勿转载。
1.场景问题分析
在很多大数据应用场景中,某些具体的处理问题通常只涉及到整体数据集的一个子集或部分数据。这导致长时间占用大规模集群的整体数据分析方式的资源有效利用率较低,并且总体代价较高,尤其在系统采用计算和存储并置(co-locate)部署架构的场景下各位严重。另外,在很多即席查询和计算应用中,数据的分析任务通常由上层用户零散地给出,与用于处理管道数据和流数据的连续运行分析任务不同,这种零散的分析任务会造成集群的计算能力有些时间段不能被充分利用。另一方面,集群的存储容量必须容纳可能被访问到的任何数据,尽管实际上每次需要使用的工作集合只是整体数据的一小部分。最后,集群本身还需要大量精心的维护管理工作,以确保集群使用者之间的隔离和性能不受彼此太多影响。
对于上述这些问题的简洁而优雅的解决方案是采用一种上层按需计算集群结合底层对象存储的架构。这种架构通过解耦需要连续运行的持久化存储模块和只有发生分析任务才使用的计算模块来解决这些问题的根源。与上段提到的需要连续运行的整体化集群架构相比,这种架构具有如下优势:
- 更高的存储性价比和可扩展性:对象存储的性价比很高,大多数对象存储服务提供商都为用户提供无缝扩展到任意数据量的功能。
- 更高的计算性价比和系统弹性:仅在需要时才使用计算资源,并在必要时扩展计算集群规模以适应不同规模的分析任务。
- 降低维护成本:计算集群变成一种消耗性资源,使用完后即可释放相关资源,并不需要长时间维护。用户也不需要担心数据的安全问题,因为通常提供给计算集群的数据是来自底层对象存储的数据副本。
事实上,这种计算和存储解耦的方案具备上述优势的同时,也存在着一个关键的缺点:性能损失。这是因为底层的对象存储通常并不是为高I / O吞吐量而设计的,因此会导致上层的计算分析任务可能会因为数据访问效率低下而整体性能变地低效。
幸运的是新架构存在的这个问题可以通过在计算集群上部署Alluxio得到很好的解决。通过引入Alluxio,可以使得计算任务的I/O速度达到内存级别,并且不需要维护长时间运行的集群或昂贵的前期投入成本。
2.架构示例图介绍
上图显示了利用Alluxio提升按需数据分析服务性能的架构图,从图中可以看出Alluxio与按需使用的计算集群部署在一起,从而减少计算集群频繁访问远程存储的耗时。
3.结合Alluxio系统架构的优势分析
Alluxio是部署在计算群集中的虚拟的分布式存储系统,为上层应用的I/O提供内存级访问速度的性能。 通过Alluxio虚拟化底层存储系统,使得任何基于Alluxio API接口(Alluxio提供HDFS兼容接口)编写的计算应用程序都能自动地访问用任何或多个底层存储系统,而不需要修改任何代码。此外,Alluxio是一个设计为可横向扩展的分布式存储系统,这意味着通过部署更多的机器来轻松地存储更大的数据集并提高访问性能。
事实上,部署和使用Alluxio对上层应用程序而言是简单和透明的。应用程序还是不断地访问数据,就好像作业直接访问的是远程存储上的数据,Alluxio会智能地将热数据保存在计算集群的内存中以供后续读取。整个过程对于应用程序是透明的,并且不需要进行手动ETL。一旦数据进入Alluxio,它将对集群的所有应用程序可用,因此在同一数据集被多次使用的场景中,应用的性能会大幅提高。
Alluxio为用户提供较高的灵活性和效率。任何需要持久化的结果或转换都可以通过Alluxio直接完成,Alluxio可以将数据同步传播到底层存储系统,以确保数据不会因为节点故障而丢失。此外,用户还可以选择仅在Alluxio内存中存储临时数据或中间数据,从而允许计算任务对这些缓存的数据进行内存级速度访问。
4.总结
相比于长期运行的计算分析集群高昂的成本和维护工作量,与对象存储结合使用的按需计算集群的架构是一个更简洁和更具性价比的服务解决方案。通过在计算集群中并置(co-locate)部署Alluxio和计算框架,我们克服了这种按需集群模型的关键性的性能缺点。Alluxio系统的架构设计使其成为大数据软件栈中提供此核心功能的一个很好的选择。