1

目录

  • 前言
  • 关于分布式文件系统
  • 分布式文件系统架构
  • 设置分布式文件数据等级
  • 自定义分布式文件系统
  • 结束语

前言

在多设备互联的智能时代,用户对跨设备文件访问的需求日益增长,多设备协同成为了现在比较流行的交互方式。而HarmonyOS的分布式文件系统(HarmonyOS Distributed File System,HDFS)提供了一种在多个设备间无缝访问和管理文件的能力,使得开发者可以构建更加灵活和高效的跨设备应用,这要是HarmonyOS的核心功能之一。那么本文就来详细介绍HarmonyOS分布式文件系统的架构、关键特性以及如何在应用中集成和使用 HDFS。

关于分布式文件系统

先来介绍关于分布式文件系统概念,分布式文件系统(hmdfs,HarmonyOS Distributed File System)提供跨设备的文件访问能力,适用于如下场景:

  • 两台设备组网,用户可以利用一台设备上的编辑软件编辑另外一台设备上的文档。
  • 平板保存的音乐,车载系统直接可见并可播放。
  • 户外拍摄的照片,回家打开平板直接访问原设备拍摄的照片。

hmdfs在分布式软总线动态组网的基础上,为网络上各个设备结点提供一个全局一致的访问视图,支持开发者通过基础文件系统的接口进行读写访问,具有高性能、低延时等优点。

分布式文件系统架构

接着再来了解一下分布式文件系统架构,具体如下图所示:
image.png

上面的架构图中,有几个比较关键的参数需要详细介绍一下:
1、distributedfile_daemon
distributedfile_daemon主要负责设备上线监听、通过软总线建立链路,并根据分布式的设备安全等级执行不同的数据流转策略。
2、hmdfs
hmdfs实现在内核的网络文件系统,包括缓存管理、文件访问、元数据管理和冲突管理等。
(1)缓存管理
关于缓存管理,主要是从下面入手:

  • 设备分布式组网后,hmdfs提供文件的互访能力,但不会主动进行文件数据传输和拷贝。如果应用需要将数据保存到本地,需主动拷贝。
  • hmdfs保证Close-to-Open的一致性,即一端写关闭后,另外一端可以读取到最新数据,不保证文件内容的实时一致性。
  • 数据在远端写入,但是由于网络原因未及时回刷,文件系统会在下次网络接入时回刷本地,但是如果远端已修改则无法回刷。
    (2)文件访问
    接着是文件访问相关的内容,具体如下所示:
  • 文件访问接口与本地一致(ohos.file.fs)。
  • 如果文件在本地,则堆叠访问本地文件系统。
  • 如果文件在其他设备,则同步网络访问远端设备文件。
    需要着重说明一下symlink:不支持。
    (3)元数据管理
    然后是元数据管理,具体如下所示:
  • 分布式组网下,文件一端创建、删除、修改,另一端可以“立即”查看到最新文件,看到速度取决于网络情况。
  • 远端设备离线后,该设备数据将不再在本端设备呈现。但由于设备离线的感知具有延迟,可能会造成部分消息4s超时,因此开发者需要考虑接口的网络超时或一些文件虽然可以看到,但实际设备可能已离线的场景。
    (4)冲突处理
    最后就是关于冲突处理,从下面几个方面来讲:
  • 本地与远端冲突 ,远端文件被重命名,看到的同名文件是本地同名文件,远端文件被重命名。
  • 远端多个设备冲突,以接入本设备ID为顺序,显示设备ID小的同名文件,其他文件被依次重命名。
  • 如果组网场景,目录树下已经有远端文件,创建同名文件,提示文件已存在。
  • 冲突文件显示_conflict_dev后依次加id,id从1自动递增。
  • 同名目录之间仅融合不存在冲突,文件和远端目录同名冲突,远端目录后缀加_remote_directory。

设置分布式文件数据等级

关于设置分布式文件数据的等级操作,不同设备本身的安全能力差异较大,一些小的嵌入式设备安全能力远弱于平板等设备类型。用户或者应用不同的文件数据有不同安全诉求,例如个人的健康信息和银行卡信息等不期望被弱设备读取。因此,HarmonyOS提供一套完整的数据分级、设备分级标准,并针对不同设备制定不同的数据流转策略。获取通用文件沙箱路径,并设置数据等级标签。具体示例代码如下所示:

import { securityLabel } from '@kit.CoreFileKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { common } from '@kit.AbilityKit';
import { fileIo as fs } from '@kit.CoreFileKit';

// 获取需要设备数据等级的文件沙箱路径
let context = getContext(this) as common.UIAbilityContext; // 获取UIAbilityContext信息
let pathDir = context.filesDir;
let filePath = pathDir + '/test.txt';

//打开文件
let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
// 设置文件的数据等级为s0
securityLabel.setSecurityLabel(filePath, 's0').then(() => {

  fs.closeSync(file);
}).catch((err: BusinessError) => {

});

自定义分布式文件系统

除了基本的文件访问和管理功能,开发者还可以根据应用的需求自定义HDFS,比如:

  • 自定义同步策略:根据应用需求调整文件同步的频率和时机。
  • 离线缓存策略:优化离线访问体验,减少网络依赖。

结束语

上面关于HarmonyOS的分布式文件系统的内容分享,可以看到HarmonyOS的分布式文件系统为跨设备文件访问和管理提供了强大的支持,也是鸿蒙原生开发中必需掌握的知识点。通过本文的介绍,应该都了解了DFS的架构、关键特性以及如何在HarmonyOS应用中集成和使用HDFS。随着技术的不断发展,分布式文件系统将继续在HarmonyOS生态中发挥重要的角色和定位,为用户带来更加丰富和便捷的体验,期待分布式文件系统有新的技术创新和进步!


灵芸小骏
8.9k 声望845 粉丝

移动开发者。