上周末有幸參加了Alluxio(之前也叫Tachyon),七牛雲和示說網舉辦的Alluxio上海Meetup,之前我並沒有在真實應用場景中使用過Alluxio,對其適用的應用場景一直報懷疑態度。自信聆聽其創始人的演講之后,感覺這個項目還挺有意思,對Alluxio簡單總結一下:
- DAL(數據訪問層)
Alluxio提供了各種文件訪問API,包括兼容HDFS的API,Alluxio特有的數據訪問API,Rest API和FUSE API,特別是FUSE API,支持POSIX標准的文件訪問接口,讓很多單機版的程序(如TensorFlow),可以享受大數據和雲端的數據存取。不過它並不支持隨機的文件寫訪問,想想也合理,畢竟底層文件存儲系統可能是HDFS或者S3;
- 統一數據訪問
依然如上圖,Alluxio底層的存儲系統可以是亞馬遜的S3,Google的存儲,阿里雲OSS,也可以是HDFS,甚至是單機的SAS,NFS。讓這些文件系統都可以無縫與現有的大數據平台(通過HDFS Compatible API),或者單機版軟件(通過FUSE API)完全兼容。
- 透明的文件緩存抽象
高效訪問數據的時候,如何做好文件緩存,其實對應應用程序開發者而言,有時候出於性能的考慮是非常重要的,Alluxio提供了透明的緩存方案,讓內存(DRAM),本地快速存儲器(SSD),本地慢速存儲器(HDD)以及雲端存儲(HDFS/OSS/S3)等,形成一個層次化的緩存機制,讓熱的數據盡可能接近快速訪問設備,這個對於深度學習和其它反復迭代訪問數據的模型而言,性能的提升就不言而喻了。
那么Alluxio的主要應用場景有哪些呢?
- 基於SAS平台單機應用,想無縫擴容,可以考慮用Alluxio的FUSE API,底層用HDFS或者其它雲端存儲。
- 基於HDFS的分布式應用,想訪問單機或者NFS的設備上的文件,可以考慮用HDFS Compatiable API。
- 反復迭代讀取遠端(比如雲端,跨數據中心,跨集群,也可以是超大HDFS集群中加速某個應用的數據訪問)數據,可以部署Alluxio
Alluxio應用場景在傳統的小型集群中可能碰不太到,但是越來越多的應用都是混合雲的情況,特別是數據和計算分離的場景,異構的數據存儲帶來的系統耦合,都可以通過Alluxio來解耦,不過目前Alluxio也有自身的一些問題,多個副本可能同時存在多個Alluxio個節點上,造成了事實上的數據緩存浪費,2.0版本中可能會有所更新。
不過最有意思的,來自與Alluxio初創成員講分布式系統設計中的坑,不完全是針對Alluxio的,而是開發Alluxio類似這種大型分布式系統,肯能碰到的經驗和收獲,包括netty的資源泄露問題,jvm的問題等等,更多細節可以看看示說網Alluxio 2.0 Overview分享。