管理EdgeX Foundry多网关实例的Web Console

前言

当新用户初次接触EdgeX Foundry项目时,可以根据EdgeX Foundry项目的官方文档,很快地成功运行起EdgeX Foundry服务来。但是因为缺乏一个直观的Web Console,有可能就不知道如何进行下一步了,这也是我本人初次接触EdgeX Foundry时所遇到的问题。我的办法是通过Http Client工具调用它的Restful API来熟悉功能。但是针对设备CRUD操作所涉及的关联操作并不简单,过程也不是那么顺畅,也踩了很多坑。那时就有设想要给EdgeX Foundry做一个简单的Web Console:用户只需要在页面中操作,而不用手工敲带很多参数的命令行,那样就轻松多了。后来很欣喜地发现EdgeX Foundry社区也把管理多网关实例的Web Console列在了功能路线图中,所以我就开发了一个EdgeX Foundry的简单Web Console,计划贡献给社区。

在本文中,我将详细地介绍引入EdgeX Foundry Web Console的开发动机、设计思路和技术实现,希望通过它能帮助新用户快速地了解和使用EdgeX Foundry项目,也鼓励更多同行贡献到EdgeX Foundry社区。

1. 为什么需要Web Console

当用户给网关添加新设备,没有Web Console,就必须直接调用EdgeX Foundry的REST API来操作。但是EdgeX Foundry是基于微服务架构设计并实现,复杂的数据结构以及依赖关系会导致操作繁琐,对于新手来讲不大容易理解。比如添加一个Device,首先相关的Device Service、Device Profile和Device Address需要存在,如果不存在,需要先创建这些实例,然后获得这些实例的唯一标识(name 或 ID),再结合Device的基本信息拼接成复杂的JSON数据格式后,才能成功调用EdgeX Foundry的相应API。另外,比如给一个设备发送命令的操作等,批量添加设备的的操作也会更加繁琐。对于初学者、或现场调试来说,有一个本地运行的Web Console就可以简化这些操作,让新用户快速使用EdgeX Foundry,而不需要了解太多内部实现机制。

2. 多个网关实例如何管理

在企业使用 EdgeX Foundry项目时,可能会有多个网关实例部署到现场,每个网关多数情况下都是局域网的内部地址,而不是互联网上的公网地址。

那么如何管理这些网关呢?这可能会有下面两种情况:

  • 每个网关上部署一个Web Console。
  • 多个网关共享同一个Web Console。在管理页面内添加网关实例,根据选择的实例,所有操作请求都会被动态代理到用户所选的网关主机上,Web Console部署在唯一地址。

对比两种方案,我更倾向于第二种方案。其局限是所有网关的IP地址必须可以被部署Web Console的主机访问到。但如果企业把EdgeX Foundry部署在内网中,这也并不是什么难事。

3. 需要解决的问题和基本实现逻辑

多实例网关共享同一个Web Console的基本假设和期望是:

  • 网关可能在任何地方, 企业常常在内网中部署。

  • 部署Web Console 的主机,可以是部署网关实例的任何一个主机上,或者一个可以直接访问到所有网关的其他物理主机上。

  • 根据用户所选的网关,所有操作请求都会被动态代理到网关主机。

    多个用户同时操作互不影响。

Web Console的基本架构如下图所示:
管理EdgeX Foundry多网关实例的Web Console
用户基本操作流程图如下:
管理EdgeX Foundry多网关实例的Web Console

  • 当用户登陆后,进入到首页后默认进入到网关 管理的页面。首次进入时是没有网关数据的。此时其他菜单的操作都被禁止。
  • 当用户添加了一个或者多个网关实例,然后选中了其中一个网关后,其他菜单的页面才可以操作。
  • 当一个网关实例确定后,用户操作其他页面,所有操作请求都会被动态路由到当前用户选中的网关的主机上,然后返回数据到Web Console主机,最后被渲染到Web Console对应的页面中。
  • 多个用户登录同时操作,互不影响。

我已经录制了一个演示视频,更多详细操作,请参见以下视频:

EdgeX Foundry UI Caption

4. 适用场景和扩展

上面的方案,前提条件是部署Web Console的主机必须和其他网关IP可见。如果这个主机有一个公网IP,用户就可以远程操作。

主要适用于企业内部使用EdgeX Foundry,有一个完整的内部网络环境。

关于Web Console 项目,现在完成的只是一个非常基本的雏形。如果你有任何问题、或更好的方案,请访问EdgeX Foundry社区分享你的卓越想法,或者直接联系我发邮件或微信。非常期待能和您一起创建EdgeX Foundry Web Console。

5. 源代码

本Web Console的源代码位于Github上, 已经提交到EdgeX Foundry社区申请审查和合并:

https://github.com/badboy-huaqiao/simple-local-gateway-console

https://github.com/badboy-huaqiao/edgex-foundry-web-console