开箱即用的数据缓存服务|EMQX Cloud 影子服务应用场景解析

简介: 通过EMQX Cloud影子服务提供的平台数据缓存能力,用户可以更加便捷地实现各类物联网场景应用,缩短研发周期。

在物联网业务高速迭代的今天,快速连接物联网设备与平台应用,实现业务快速落地与市场验证,是很多企业塑造核心竞争力、实现业务创新的关键。

EMQX Cloud 作为一站式运维代管的 MQTT 消息云服务,可以帮助用户在公有云环境中快速实现物联网应用对接。为了进一步帮助用户快速搭建物联网业务,EMQX Cloud 近期推出了影子服务功能。通过影子服务提供的平台数据缓存能力,用户可以更加便捷地实现各类场景应用,缩短研发周期。

什么是影子服务

在物联网设备与应用的消息交互场景中,设备侧网络不稳定、低功耗设备休眠、移动端应用不定期消费数据等情况十分常见。对于物联网应用开发者来说,更需要数据生产与消费解耦的数据交互模型。因此 MQTT 作为基于发布/订阅的异步通讯协议在物联网场景中被广泛应用。为了进一步保证数据交互的可靠性,在 MQTT 消息接入层提供对设备最新上报消息与应用下发配置等数据的缓存与持久化就成为物联网平台设计中的一个重要需求。

EMQX Cloud 基于已有的 MQTT消息接入服务,在增值服务中增加了影子服务(Shadow Service)功能,提供开箱即用的平台侧数据缓存服务。用户可以在 EMQX Cloud 内置服务中完成设备上报数据缓存、修改、查看,快速创建物模型、设备影子以及其他和数据上报及下发相关的应用,无需自己购买外部资源以及复杂的配置实现数据缓存服务。

  1. 用户可以在一个 EMQX Cloud 专业版实例中创建多个影子服务。每个影子服务创建后会生成一个全局唯一的 shadow_id,用户可以通过基于 shadow_id 的固定上下行 MQTT 主题以及 RestAPI 来创建、修改、删除不同缓存服务中的数据;
  2. 缓存数据以 JSON 文档的格式存储在影子服务中,用户在创建,修改缓存文档时,影子服务会自动为 JSON 文档添加创建/修改的时间戳以及更新文档版本,方便文档消费者确认信息。对每一个影子服务我们只保存最新的版本的数据;
  3. 影子服务提供 MQTT 与 RestAPI 两种接口来对缓存文档进行增删改查的操作,方便 MQTT 设备与应用服务调用;
  4. 影子服务提供的 MQTT 接口完全适配标准 MQTT 协议,客户端只要符合标准 MQTT 协议即可调用影子服务,无需定制化的 SDK,也没有平台绑定。

应用场景示例

我们以智能家居场景为例来详细解释如何使用影子服务。在智慧家居场景中,最常见的应用是通过智能家居设备-云端服务-个人移动 APP 之间的数据互动,实现 APP 设备状态的上报更新以及对设备的远程控制。利用影子服务,我们可以非常简单地实现一个智能设备控制应用,以智能空调为例:

空调温度状态上报

1.在 EMQX Cloud 中为智能空调设备创建一个影子服务,影子服务为此设备创建唯一的 shadow_id 和固定的发布订阅主题
EMQX Cloud 添加影子模型 图1.png

2.智能空调设备通过 MQTT 协议将空调内置温度传感器数据定时上报到影子服务指定的发布主题 shadow/8suy0g7pp08ibdtc 中,首次上报数据 Payload 使用 PUT 操作:

3.

   {
     "method": "PUT",
     "payload": {
       "status":{
         "temp":26
         }
     }
   }

这时在影子服务中就可以看到一个新的数据被缓存下来:

影子模型 图2.png

这里面我们可以看到除了设备上报的空调温度 JSON 文档以外,影子服务也为这份文档自动添加了:

  • createAT:文档创建时间;
  • lastTime:文档更新时间;
  • version:文档版本号;

方便后续 APP 对比历史数据和展示数据;

4.智能空调可以以定时上报的方式持续更新影子服务中缓存的温度数据,在 MQTT payload 中使用 PATCH 方法进行数据更新:

{
  "method": "PATCH",
  "payload": {
    "status":{
      "temp":24
    }
  }
}

影子服务中的缓存数据即被更新为:

影子模型 JSON 图3.png

5.当用户打开手机 APP 想查看空调运行情况与室内温度时,APP 可以通过 MQTT 或 RestAPI 接口,从影子服务缓存中获取到最新的状态数据。以 MQTT 方式为例,APP 打开后会与 EMQX Cloud 服务建立一个 MQTT 连接,通过订阅主题 shadow/8suy0g7pp08ibdtc/reply 获取设备消息;

6.如果此时空调数据没有上报,可以通过向影子服务的发布主题 shadow/8suy0g7pp08ibdtc 发送一个 GET 指令来拉取缓存中的最新状态:

{
  "method": "GET",
  "payload": {
  }
}

影子服务收到此消息后,就会将缓存中的数据返回给 APP:

{
  "data": {
    "status": {
      "temp": 24
    }
  }, 
  "createAt": 1661365033203, 
  "lastTime": 1661365569334, 
  "version": 2
}

7.如果 APP 持续在线,当有新的空调温度状态上报到影子服务中时,由于 APP 已经订阅了 shadow/8suy0g7pp08ibdtc/reply 主题,最新的状态数据就会推送到 APP 中。这样,一个动态更新的空调温度展示业务就可以轻松完成。

APP 远程调节空调温度

如果我们希望能从 APP 调节空调温度,同时保留空调设备状态上报功能。

  1. 我们需要在 JSON 文档中增加一个键值,如通过 PATCH 命令增加 desired:
  2. {
      "method": "PATCH",
      "payload": {
        "desired":{
        }
      }
    }

    此时 JSON 文档变为:

    {
      "data":{
        "desired":{},
        "status":{
          "temp":24
        }
      },
      "createAt":1661365033203,
      "lastTime":1661366036466,
      "version":3
    }
  3. 同时空调也需要订阅 shadow/8suy0g7pp08ibdtc/reply 主题来接收 APP 的调节指令(当然,也可以为指令下发建立一个新的影子服务,这样就有一个独立的控制下发主题通道);
  4. 然后我们就可以通过 APP 来下发控制指令:

    {
      "method": "PATCH",
      "payload": {
        "desired":{
           "temp":27
        }
      }
    }

    此时 JSON 文档更新为:

    {
      "data": {
        "desired": {
          "temp": 27
        }, 
        "status": {
          "temp": 24
        }
      }, 
      "createAt": 1661365033203, 
      "lastTime": 1661366053663, 
      "version": 4
    }
  5. 当空调通过订阅 shadow/8suy0g7pp08ibdtc/reply 主题收到上面更新的 JSON 文档后,空调客户端程序通过 desired 键内设置的值更新自身温度设定,实现远程 APP 温度控制。

更多应用可能

除了智能家居场景以外,我们还可以利用影子服务的数据缓存功能实现很多业务场景应用:

  1. 低功耗智能表计数据采集与远程配置:在实际生活中很多智能表计设备(如燃气表,水表等)由于依靠电池供电,为了延长电池供电寿命经常会采用休眠的方式来节电。比如入户燃气表一天可能只会唤醒 1-2 次,唤醒时间在几分钟内。通常我们会在唤醒阶段上报表计读数,并同时接收更新平台侧应用对表计的最新配置。此时,我们就可以利用影子服务将平台侧的配置缓存起来,当表计唤醒后拉取最新的配置数据进行更新。这样平台应用在下发配置的时候也不需要探察表计设备是否在线,简化了应用逻辑。
  2. 车联网车机消息推送:在车联网场景中,车机在熄火的情况下是处在休眠状态。而车联网平台部分消息通知(保养提醒、运营消息通知等)可以利用影子服务的缓存功能实现对离线车机设备的消息缓存。当车辆发动车机唤醒后,通过拉取影子服务中的缓存消息实现离线消息的同步更新。

结语

EMQX Cloud 提供的开箱即用的影子服务可以适配不同行业各类型业务场景对数据缓存的需求。通过 EMQX Cloud 提供的全托管 MQTT 消息云服务,结合影子服务功能,用户可以快速实现 MQTT 设备接入与消息缓存的一体化能力,大大加快物联网应用开发速度。同时,影子服务中灵活的消息缓存数据结构,也可以帮助用户轻松实现后期业务的扩展,为用户业务持续发展提供保障。

版权声明: 本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.com/zh/blog/emqx-cloud-shadow-service-application-scenario

目录
相关文章
|
3天前
|
存储 缓存 NoSQL
Redis 缓存失效策略及其应用场景
Redis 缓存失效策略及其应用场景
16 1
|
3天前
|
域名解析 缓存 负载均衡
【域名解析DNS专栏】域名解析在CDN服务中的应用与优化
【5月更文挑战第30天】本文探讨了域名解析在CDN服务中的重要性,强调其对访问速度和稳定性的影响。文中提出了三种优化方法:使用智能解析以动态选择最佳节点,配置负载均衡保证服务稳定,以及利用DNS缓存提升访问速度。通过Python代码示例展示了基本的DNS解析过程,结论指出优化域名解析对于提升网站性能至关重要。
|
4天前
|
域名解析 Kubernetes 网络协议
【域名解析DNS专栏】云原生环境下的DNS服务:Kubernetes中的DNS解析
【5月更文挑战第29天】本文探讨了Kubernetes中的DNS解析机制,解释了DNS如何将服务名转换为网络地址,促进集群内服务通信。Kubernetes使用kube-dns或CoreDNS作为内置DNS服务器,每个Service自动分配Cluster IP和DNS条目。通过示例展示了创建Service和使用DNS访问的流程,并提出了优化DNS解析的策略,包括使用高性能DNS解析器、启用DNS缓存及监控日志,以实现更高效、可靠的DNS服务。
|
5天前
|
存储 数据采集 JavaScript
基于Python的Web数据与解析
基于Python的Web数据与解析
22 0
|
7天前
|
SQL 存储 JSON
Hive 解析 JSON 字符串数据的实现方式
Hive 提供 `get_json_object` 函数解析 JSON 字符串,如 `{"database":"maxwell"}`。`path` 参数使用 `$`、`.`、`[]` 和 `*` 来提取数据。示例中展示了如何解析复杂 JSON 并存储到表中。此外,Hive 3.0.0及以上版本内置 `JsonSerDe` 支持直接处理 JSON 文件,无需手动解析。创建表时指定 `JsonSerDe` 序列化器,并在 HDFS 上存放 JSON 文件,可以直接查询字段内容,方便快捷。
|
10天前
|
域名解析 网络协议 安全
【域名解析DNS专栏】云服务中的DNS解析服务比较:阿里云、AWS、Azure大PK
【5月更文挑战第23天】此对比分析探讨了阿里云DNS、AWS Route 53和Azure DNS的服务特点。阿里云DNS以其智能解析和IPv6支持脱颖而出,适合中国地区用户;AWS Route 53凭借其强大的路由策略和与AWS生态的深度集成吸引高级用户;Azure DNS则以简洁管理和DNSSEC安全支持见长,与Azure平台集成良好。选择取决于具体需求,如功能、易用性、性能、安全性和成本。
【域名解析DNS专栏】云服务中的DNS解析服务比较:阿里云、AWS、Azure大PK
|
12天前
|
域名解析 存储 缓存
【域名解析DNS专栏】DNS缓存机制详解:如何提升域名解析速度
【5月更文挑战第21天】本文探讨了DNS缓存机制的原理及优化方法。DNS缓存是存储已解析域名与IP地址的临时数据库,能减少网络延迟,减轻服务器负担并提升用户体验。优化策略包括增加缓存容量,设置合理过期时间,使用智能DNS服务及定期清理缓存。文中还提供了一个Python示例,展示如何通过缓存提升域名解析速度。
【域名解析DNS专栏】DNS缓存机制详解:如何提升域名解析速度
|
12天前
|
缓存 负载均衡 网络协议
使用Go语言开发高性能服务的深度解析
【5月更文挑战第21天】本文深入探讨了使用Go语言开发高性能服务的技巧,强调了Go的并发性能、内存管理和网络编程优势。关键点包括:1) 利用goroutine和channel进行并发处理,通过goroutine池优化资源;2) 注意内存管理,减少不必要的分配和释放,使用pprof分析;3) 使用非阻塞I/O和连接池提升网络性能,结合HTTP/2和负载均衡技术;4) 通过性能分析、代码优化、缓存和压缩等手段进一步提升服务性能。掌握这些技术能帮助开发者构建更高效稳定的服务。
|
13天前
|
网络协议
阿里云服务器搭建DNS解析服务步骤
在阿里云搭建DNS解析服务,首先注册阿里云账号并购买适合的云服务器。获取服务器公网IP后,配置服务器并安装DNS软件如Bind9。接着设置DNS解析,包括定义顶级和子域名的指向。最后,通过ping测试或浏览器访问验证DNS解析功能是否正常。
|
13天前
|
存储 弹性计算 监控
【阿里云弹性计算】阿里云ECS全面解析:弹性计算服务的核心优势与应用场景
【5月更文挑战第20天】阿里云ECS是提供可伸缩计算能力的云服务,支持多种规格实例,满足不同需求。其核心优势包括灵活性、高性能、高可用性、安全性和易用性。适用场景包括网站托管、大数据处理、游戏多媒体应用及测试开发环境。通过Python示例代码展示了如何创建ECS实例,助力企业专注业务发展,简化基础设施管理。
50 5

推荐镜像

更多