基于HarmonyOS分布式数据服务的探究
2023-08-26龙军何畅赵冬冬
龙军 何畅 赵冬冬
关键词:HarmonyOS;鸿蒙;分布式;数据服务;多端同步
HarmonyOS是华为公司推出的全场景智慧生活方式的分布式操作系统。随着基于鸿蒙的智能化产品越来越多,用户拥有设备的数量和品种也不断增多,对全场景多设备的生活方式体验也逐渐深入。通过相互感知,鸿蒙将相关终端设备进行能力整合成一个超级终端(One Super Device) ,实现极速连接、多端协同和资源共享,提供自然流畅的分布式全场景体验。
1 分布式系统
分布式系统是随着计算机网络技术的发展而产生,通过多台计算机组成的网络以协作方式共同完成单个计算机所无法完成的任务。美国学者Tanenbaum 对分布式系统的定义:分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统。此定义包含两个方面的内容,第一个方面是关于硬件的:机器本身是独立的。第二个方面是关于软件的:对用户来说他们就像在与单个系统打交道[1]。
通常将分布式系统划分为分布式硬件架构、分布式操作系统、分布式数据库、分布式程序设计和分布式应用等5个层次。分布式操作系统包括负责管理分布式处理系统资源和控制分布式程序运行的分布式文件系统。分布式数据库是将网络上分散的多个数据单元连起来组成一个逻辑上统一的数据库。
2 HarmonyOS 分布式设计原则
HarmonyOS支持同一账号的多设备相互同步数据,使用户在多端设备上有统一的用户体验。为构建起优秀的分布式体验,应遵循以下设计原则:
体验增值:跨设备交互能提供诸如更好的感官体验和交互效率等体验提升。
无缝流畅:设备间流转无缝、协同流畅,就像使用一个设备。
清晰明确:跨设备交互有清晰明确指引,用户可快速熟悉使用。
易于理解:跨设备交互易于理解和记忆,用户能长期持续使用。
用户可控:跨设备交互时用户能随时切换设备或其他可用的跨设备交互模式。
沉浸无干扰:可根据设备属性在不同设备上分配信息,最大化提供沉浸无干扰体验。
3 HarmonyOS 的分布式数据服务
HarmonyOS通过键值对(Key-Value) 降低数据库版本兼容及数据同步的复杂度,对外提供KV类型的访问接口。鸿蒙以本地事务为单位在设备间同步数据,一次本地事务的修改必须全部同步成功。由于移动设备不确保一直在线而且无中心,鸿蒙的分布式数据服务在某一设备完成数据的增、删、改后,组网内设备可能不会实时读取到本次数据更新,但会在某时间窗口后进行更新同步,使数据达到一致状态,称为最终一致性[3]。
该同步由底层通信组件发现、认证设备,再通知上层应用程序设备,收到消息后,两设备间建立加密的数据传输通道,采用手动或自动方式同步数据。手动同步由应用程序调用sync接口并指定同步的设备列表和模式触发,同步模式分PULL_ONLY(将远端数据拉到本端)、PUSH_ONLY(将本端数据推送到远端)和PUSH_PULL(同时将本端数据推送到远端及远端数据拉取到本端)三种。自动同步由分布式数据库自动采用PUSH_PULL模式完成数据同步。
4 HarmonyOS 的分布式数据库分类
HarmonyOS的分布式数据库分单版本和设备协同两类。单版本分布式数据库(SingleKVStore) 是指数据以单个KV条目为单位在本地保存,每个Key最多只保存一个条目项[4],该条目项可采用诸如Json等格式化方式存储多个数据项。应用在本地修改数据,然后按本地更新顺序将最后修改的数据逐一同步到远端设备。
设备协同分布式数据库(DeviceKVStore) 建立在单版本之上,应用程序存入KV数据时在Key前加上本设备的DeviceID,实现设备产生数据的隔离,底层按设备维度管理数据,数据库可按设备维度查询分布式数据,但不能修改其他设备同步过来的数据。
5 HarmonyOS 分布式数据服务的运作机制
HarmonyOS通过服务组件初始化底层分布式数据库的存储组件、同步组件和通信适配层,进行服务内元数据、权限、加密、备份和恢复及多用户的管理,并将数据存储到存储组件。存储组件进行数据的访问、缩减、事务、快照、数据库加密、数据合并和冲突解决。同步组件连接存储组件与通信组件,保持在线设备间数据库数据的一致。用通信适配层将数据同步至远端设备,远端设备通过同步组件接收数据,并更新至本端存储组件,通过服务接口提供给应用程序使用[5]。
通信适配层调用底层公共通信层的接口完成通信管道的创建、连接,接收、发送设备上下线消息,维护已连接和断开设备列表的元数据。同步组件维护连接的设备列表,同步数据时根据这个列表,调用通信适配层的接口将数据封装并发送给连接的设备。运作机制如图1所示。
由于分布式数据库是多设备在操作,HarmonyOS 采用基于提交时间戳、取时间戳较大的提交数据策略解决多设备同时修改某一数据的冲突场景。
6 HarmonyOS 分布式数据管理的关键JS API
HarmonyOS分布式数据服务主要实现用户设备中应用程序数据内容的分布式同步,可采用Java、JS 或ArkTS三种API,本文采用JS API进行研究。
分布式数据管理为应用程序提供了不同设备间数据库的分布式协同能力,应用程序通过调用相应接口将数据保存到分布式数据库中,并进行数据的增加、删除、修改、查询、同步等操作,常用接口如表1 所示[6]。
7 HarmonyOS 分布式数据服务的应用实践下面基于单版本分布式数据库完成一个便笺本的设计制作。
1) 導入分布式数据和分布式设备的模块。
2) 在config.json文件的module-reqPermissions 里声明分布式数据同步DISTRIBUTED_DATASYNC 和获得分布式设备信息GET_DISTRIBUTED_DEVICE_ INFO的权限。
3) 创建分布式数据库管理器实例。
用包名和用户信息创建配置信息。包名bundle? Name必须与使用的工程一致,用户信息由userId(用户ID) 和userType(用户类型)构成,userType设置为0 或SAME_USER_ID,表示使用同一账号登录不同设备的用户:
4) 获取/创建分布式数据库。
声明分布式数据库的配置信息options,包括:cre? actreyIpftM为iss是in否g表加示密当;数ba据cku库p文为件是不否存备在份时;a是ut否oS创yn建c为;e是n?否自动同步,若设为否需调用sync接口,通常关闭自动同步功能;kvStoreType 数据库类型,DEVICE_ COLLABORATION 或0 为多设备协同数据库,SINGLE_VERSION或1为单版本数据库;securityLevel 安全级别,为NO_LEVEL、S0~S4,值从0~6,等级越高,限制越多:
5) 订阅分布式數据变化。
用on(event,type,observer)方法进行订阅,参数event是订阅的事件名固定为dataChange,表示数据变更事件;type是订阅的类型,值分别是SUBSCRIBE_ TYPE_LOCAL 或0 为订阅本地数据变更、SUBSCRIBE_TYPE_REMOTE或1为订阅远端数据变更、SUBSCRIBE_TYPE_ALL或2为订阅远端和本地数据变更;参数observer是回调函数:
6) 构造要分布式数据库的键值对,并将KV数据更新到分布式数据库。
7) 查询分布式数据库数据。查询指定的数据
8) 选择同一组网环境下的设备以及同步模式,同步数据到其他设备。
通过createDeviceManager()创建分布式设备管理实例,在回调函数用getTrustedDeviceListSync()同步获取所有可信设备列表,设备信息DeviceInfo包括:deviceId 设备唯一标识、deviceName设备名称、deviceType设备类型、networkId设备网络标识、range发现设备的距离:
在选择设备对话框中判断是否选择同步的设备,若选中则用sync(需同步的设备列表,同步模式,延时时间)方法同步数据。同步模式如前所述:
上述是HarmonyOS基于JS单版本分布式数据库应用的核心设计。应用程序的主要运行结果如图2 所示。
8 结束语
本文对鸿蒙操作系统的分布式数据服务、运作机制和JS API进行了研究与初步应用,建立了一个简单的单版本分布式数据库应用模型,也为设备协同分布式数据库的应用开发提供了参考。
随着国民对国产技术和产品的认可度提升,鸿蒙操作系统的不断发展与优化,相关的生态建设逐步完善,基于HarmonyOS的手机、平板、智能穿戴、智慧屏、车机等设备有着更广阔的市场和发展空间。鸿蒙借助分布式设计形成1+8+N的全场景业务能力,提升了消费者在智慧生活、智慧家庭、智慧办公等场景下的体验,构建起牢固的终端消费者生态系统。站在鸿蒙应用开发的角度上,分布式技术整合多终端形成的超级终端使开发者可以忽略硬件的差异,将精力集中到业务应用,开发出更高体验的应用。在鸿蒙发展的过程中,需要更多的开发者加入,不断探索与实践,共同促进HarmonyOS这一具有独立知识产权的国产操作系统的进步与壮大。