了解分布式缓存系统 Alluxio

从技术上来讲,Alluxio 是一个数据编排技术(数据编排,大概类似于一个平台,这个平台是用来管理数据的,主要是管理,对象是数据),它相当于一个数据层,在应用层和存储层之间加了一层,为上下两层搭建了桥梁,将数据移到离应用更近的地方,从而更容易访问数据。
数据驱动型应用是什么样的应用?
数据驱动:以数据为基础,将数据组织成信息,然后利用机器学习、算法等手段处理信息,最终形成自动化的决策模型。数据驱动型应用是以数据为基础,对新数据进行处理,得到处理结果。数据驱动型应用会使用大量的数据,对数据的访问会更为频繁。
简单的说,Alluxio 是一个分布式缓存系统,使用分布式的结构来提供缓存的服务。Alluxio 统一了不同存储系统中的数据,让上层的应用能够使用统一的接口和命名空间来访问数据。
所以分布式是什么,缓存又是什么。
分布式是什么?? 提起来分布式,顺便把集群也说一句。

  • 单机或者本地运行:只需要一台主机。
  • 集群:需要多台主机,至少是2台。集群是一群主机,简单的理解为很多台电脑。使用集群的方式来运行代码,就是把代码运行在多个主机中。
从主机的规模来看,一台主机是单机结构,多台主机是集群结构。
分布式,是从业务上将一个系统进行划分,把系统分成多个独立的子系统,就像拼图一样,每个子系统是其中的一块,每个子系统可以部署在不同的机器上。分布式是从业务功能的方面划分的,不是按照现实中有多少台真实的主机(也可以是虚拟机中的主机)来区分是不是分布式系统,所以分布式可以在单机上运行,也可以在集群上运行。
缓存是什么?? 缓存存储的是临时性的数据,与底层持久层存储系统相反。Alluxio 存储的是热数据,数据使用的更多,那它所有的较多的副本,再次访问数据会比没有缓存的速度快。
【了解分布式缓存系统 Alluxio】分布式缓存是不同的服务器将其缓存拿出来一部分,组成一个缓存系统。
Alluxio 基础概念 Alluxio 怎么统一了不同存储系统中的数据?
Alluxio 系统集成了不同的底层存储系统,包括文件系统HDFS、Amazon 的S3、谷歌云存储GCS、EMC ECS等。它对接了很多种不同的持久化存储系统,可以同时使用不同类型的存储系统,也可以使用多个相同的存储系统作为它的底层存储系统。
不同的持久化存储系统有各自的命名空间,它们有各自访问自己系统中的文件的命名方式,比如 HDFS 系统的命名方式 hdfs://namenode:port/ ,S3存储桶的命名方式 s3a://bucketName/。Alluxio 将底层存储系统挂载到 Alluxio 的空间目录下,即使有多个底层存储系统,它们挂载的目录是相同的,都在 Alluxio 的命名空间中,都可以使用 Alluxio 的命名方式(alluxio://host:port/)访问 。这样,只要访问 Alluxio 的命名空间,就可以访问到不同底层存储系统中的文件。即使它们是相互独立的存储系统,对于上层应用来说,应用访问不同存储系统中数据的方式是一样的。
举个例子:
如果有2个底层存储系统 S3 和 HDFS,s3 中存储了一个文件 s3-test.txt ,HDFS 中存储了一个文件 hdfs-test.txt ,将这2个存储系统都挂载到 Alluxio 命名空间的根目录下。那么,在Alluxio 的根目录下就有2个文件,s3-test.txthdfs-test.txt
直接访问 s3 中的文件,访问路径是 s3://bucketName/s3-test.txt。直接访问 HDFS 中的文件,访问路径是 http://hostName:port/hdfs-test.txt。需要知道数据存储在哪个存储系统中,然后按照那个存储系统的访问方式才能访问数据。
通过 Alluxio 访问两个文件的路径是 alluxio://hostName:port/s3-test.txtalluxio://hostName:port/hdfs-test.txt 。在不同的存储系统中,访问数据的方式是一样的。只要知道数据在 Alluxio 中的路径,就可以访问到数据,而上层应用只需要知道存储系统中有没有自己要的数据,而不需要考虑底层是怎么存储数据的。
Alluxio 基础组成 一个 Alluxio 系统,在逻辑上,包括 master 节点、worker 节点、客户端和底层存储系统。
  • master 节点,负责管理 Alluxio 中的全局元数据,客户端访问数据的请求都会由 master 节点处理,然后 master 节点交给相应的 worker 节点传输数据。
  • worker 节点,负责数据的传输。
worker 节点在哪里?worker 节点是在应用所在的主机上。
woker 节点是怎么存储数据的?worker 节点可以由多种存储介质组成(内存 MEM,固态存储SSD,硬盘存储HDD),用户可以指定使用其中的一种或多种。
worker 节点什么时候存储数据?如果 worker 节点所在的客户端请求访问的文件没有在 worker 节点中,worker 节点就会在本节点中生成一个文件副本,这样客户端下次再访问该文件的时候,就可以直接从 worker 节点中读取文件。这里有两种情况:
  • 如果客户端访问的文件不在 Alluxio 空间中,那么 Alluxio 会先从底层存储系统中读取文件,并在客户端所在的 worker 节点中生成文件副本。
  • 如果客户端访问的文件不在本地的 worker 节点中,而是在其他的 worker 节点中,那么 Alluxio 会先从其他的 worker 节点中读取文件,并在客户端所在的 worker 节点中生成文件副本。
在读源码的时候,遇到了很多客户端和服务端,开始时一头雾水。这里记一下用到的客户端和服务端。
  • master 节点管理所有的元数据,worker 节点在客户端所在的主机中,所以 master 节点和 worker 节点之间的通信是由 rpc 完成的。对于 master 节点和 worker 节点之间的通信来说, worker 节点是使用服务的一端,也就是客户端,而 master 节点是提供服务的一端,也就是服务端。
  • master 节点和 worker 节点作为一个整体,提供了数据访问的服务,上层应用通过命令行或者 API 接口可以访问数据。应用获取数据也是通过 rpc ,所以,应用是客户端,Alluxio 是服务端。因为 master 节点管理所有的元数据,接收所有的请求,所以 master 节点是处理应用请求的服务端。
  • 在实际的代码实现中,Alluxio 通过 job 模块来管理它的任务调度,所以 master 节点在调用 worker 节点进行实际的操作时,会调用 job 的客户端,由其分配任务,调用 worker 节点执行实际的操作,而不是 master 节点直接直接与 worker 节点通信。同样的,在命令行执行命令,也是通过调用 job 的客户端来请求服务。

    推荐阅读