分布式任务调度子系统

简介

分布式任务调度模块,通过主(智慧屏设备)从设备(运动手表等小内存设备)服务代理机制,在异构操作系统上建立起分布式服务平台,支持OpenHarmony智慧屏与拉起其它OpenHarmony设备FA的能力。轻量分布式调度模块组成如下图所示:

分布式任务调度子系统 - 图1

目录

分布式任务调度源代码目录结构如下表所示:

表1 主要源代码目录结构

名称

描述

dtbschedmgr_lite

轻量级分布式任务调度实现。

safwk_lite

系统服务进程实现。

samgr_lite

本地服务管理实现。

其中轻量级分布式任务调度的源代码目录结构如下:

  1. ├── BUILD.gn
  2. ├── include
  3. ├── distributed_schedule_service.h # 分布式调度对外接口文件
  4. ├── dmslite_check_remote_permission.h # 分布式调度权限管理模块
  5. ├── dmslite_famgr.h # 分布式调度FA管理模块
  6. ├── dmslite_inner_common.h # 分布式调度服务文件
  7. ├── dmslite.h # 分布式调度实现
  8. ├── dmslite_log.h # 日志模块
  9. ├── dmslite_msg_parser.h # 通讯数据反序列化
  10. ├── dmslite_tlv_common.h # TLV格式数据解析模块
  11. └── dmslite_session.h # 跨设备通信辅助文件
  12. ├── README.md
  13. ├── LICENSE
  14. ├── source
  15. ├── distributed_schedule_service.c
  16. ├── dmslite.c
  17. ├── dmslite_check_remote_permission.c
  18. ├── dmslite_famgr.c
  19. ├── dmslite_msg_parser.c
  20. ├── dmslite_tlv_common.c
  21. └── dmslite_session.c

约束

语言限制:C语言。 组网环境:必须确保设备在同一个局域网中。操作系统限制:OpenHarmony操作系统。

远程启动的约束与限制:

  • 支持远程启动FA,不支持远程启动SA。
  • 远程启动前必须确保主设备(智慧屏设备)与从设备间(运动手表等小内存设备)分布式组网成功(需要在同一网段内,可互相ping通),否则无法远程启动。

使用

轻量级分布式调度模块编译

轻量级分布式调度模块通过一些特性宏来定制不同平台上参与编译的功能代码,该部分代码位于build\lite\config\subsystem\distributedschedule\目录下,目录结构如下:

  1. build/lite/config/subsystem/distributedschedule
  2. ├── BUILD.gn

在编译不同的平台目标时,需要使用对BUILD.gn进行修改,以下以平台hi3518ev300和hi3516dv300为例:

  1. zlite_subsystem("distributedschedule") {
  2. subsystem_components = [
  3. "//foundation/distributedschedule/services/samgr_lite:samgr",
  4. ]
  5. if (board_name == "hi3518ev300" || board_name == "hi3516dv300") {
  6. subsystem_components += [
  7. "//foundation/distributedschedule/services/safwk_lite:safwk_lite",
  8. "//foundation/distributedschedule/services/dtbschedmgr_lite:dtbschedmgr", // 轻量级分布式调度模块配置
  9. ]
  10. }
  11. }

* 主设备程序开发(以拉起FA为例)

构造want,首先使用ElementName类表明需要启动的远端设备ID,包名,元能力类名,传入want中,然后设置want中的分布式标志位Want.FLAG_ABILITYSLICE_MULTI_DEVICE表示需要远程启动。

  1. // 引入相关头文件
  2. import ohos.aafwk.ability.Ability;
  3. import ohos.aafwk.content.Want;
  4. import ohos.bundle.ElementName;
  5. // 启动远程设备FA
  6. Want want = new Want(); // 封装启动远端FA的Want
  7. ElementName name = new ElementName("remote_device_id", "com.huawei.remote_package_name","remote_class_name");
  8. want.setElement(name); // 将待启动的FA信息添加到Want中
  9. want.setFlags(Want.FLAG_ABILITYSLICE_MULTI_DEVICE); // 设置分布式标记,若不设置将无法使用分布式能力
  10. startAbility(want); // 按照Want启动指定FA,Want参数命名以实际开发平台API为准

* 预置条件

主从设备间组网:远程启动前必须确保主从设备分布式组网成功(需要在同一网段内,可互相ping通),否则无法远程启

从设备FA安装:安装测试或者自开发的FA到从设备

* 运行(以拉起FA为例)

执行主设备(智慧屏)侧的startAbility即可拉起从设备(运动手表等小内存设备)FA

涉及仓

distributedschedule_interfaces_kits_samgr_lite

distributedschedule_services_dtbschedmgr_lite

distributedschedule_services_safwk_lite