分享

扒一扒EdgeX UI背后你不知道的那些事以及edgex

 瓶不大 2019-03-21

选择这个题图是很有深意的,Linux之父就不用多介绍了吧?他的一句名言是啥?——“Talk is cheap. Show me the code.” 这个配图是很有深意的。

这篇文章我们来聊聊EdgeX UI 的 GoLang 版本,聊聊过去、现状以及未来。在进入正题之前,我将与各位吃瓜群众分享点八卦,助助兴。

开场......

首先,第一件事情是:我什么时候开始关注EdgeX UI的?我为什么要关注EdgeX UI呢?这要追溯到5月份我跟Jim沟通其他事情的一个邮件列表的上下文,内容大致是他们要重构Core模块,让我暂缓对Core模块的代码更新,然后Jim说“我们可以找点其他事情给你做啊”,见下图:

我的回复是“可以啊,正好huaqiao也是我微信好友,我们之前就认识...”,我能拒绝么?Jim堪称EdgeX之父啊,拒绝了后面就不要混了。

后来,跟huaqiao共同看EdgeX-UI代码之前,我是知会过huaqiao这件事的:

5月22日,Jim又在发给我的邮件中问及EdgeX UI的事情:

这是我的回复和他的回复:

邮件中他又提及了,EdgeX UI对他们很重要,因为他们没有安排人员cover这块。其实,我真实的想法是什么呢?是我更希望在edgex-go项目中贡献代码,对edgex-ui本身不是非常感冒。我原来就搞过web,感觉每天写那些CRUD业务代码很无聊,Java Web,Node.js Web我很早都搞过,后来感觉没什么意思,就去搞大数据了。为了佐证这一点,现在我GitHub主页上还有一个完整的而且人气还可以的Node.js写的资产管理的Web项目(https://github.com/yanghua/FixedAssetManagerServer)。但是即便现在我对web没有多大兴趣,我也不太好拒绝啊~

再之后的讨论,我都是跟huaqiao同步跟Jim进行邮件沟通:

那么,我是不是那种啥实事不干,就靠一张嘴,就喜欢出风头,邀功以及指点江山的人呢?不好意思,让你失望了,我不是!请看下图:

edgex-ui Java版本,15个issue全部是我创建的,并且修复了其中的3个,至于剩余的,因为我们商讨转向GoLang实现并且我还有其他项目要跟,所以就暂时搁置了。这些issue都是Jim确认过并且给出了建议标签:

以上这个红框,可不可以证明我做了一点微小的贡献呢?

时光飞逝.........

再后来huaqiao的GoLang初始版本出来了,目标是在能力上尽力去匹配Java版本,这段时间他付出了辛苦的工作。但是,我毕竟GoLang的开发经验比他多那么一点点,在我重构GoLang版本之前他提交的版本是这样的:

查看历史快照:

https://github.com/edgexfoundry-holding/edgex-ui-go/tree/10aff54e31f2136381b494f1527821c4171903c9

我重构之后版本是这样的:

查看历史快照:

https://github.com/edgexfoundry-holding/edgex-ui-go/tree/8c14c0fa24288a510434b7f05e4935cfe5a2224a

我为什么要重构以及我做了哪些事情,后面会详谈。那么具体我做了多少事情呢?下面这幅图说明一切(GitHub上所有的东西都有痕迹做不了假):

代码变更数目就别信了,因为这里涉及到一些库文件移动,但是commits个数是可信的。

注意,这些工作几乎花费了我一周每个工作日的晚上以及几乎一个周末!大概上周日快到晚上的时候搞好了,觉得几乎能接收社区的Review(虽然还有问题,但是框架基本是OK的)了。所以,我在EdgeX社区发了一个帖子,希望大家提点建议:

我一直都非常尊重huaqiao本人,因为如果不是他就没有两个初始的UI版本,这边先回顾了huaqiao的工作并予以感谢。

发完帖子不久,因为我看到加利福利亚版本的代码分支已经切割了,我就发邮件给Jim问他我被放置在holding仓库中的Scheduling模块的合并计划,顺便跟他提了一下刚刚发的帖子以及edgeX-ui-go项目的重构进展:

这边我有一点疏忽,因为我最初的本意是问edgex-go的问题,所以没有抄送给huaqiao,这是我的问题,但随后Jim还是抄送给了上图框起来的二位,划重点:请认真看清上图的红框!

接下来既然关系到一干edgex-ui的人,那么我就谈了我近期的工作进展、规划:

这是最近两天Jim的回复:

其他的你们都不用看,直接看我框起来的两个单词,看不懂什么意思?解释一下吧——“持续推动”。不是我自己标榜的吧?

我不擅长搞meetup,不擅长包装,但也不谦虚,我的原则是实话实说。EdgeX UI最初确实是huaqiao搞的,因此我也比较低调,但是这个过程中我做了很多的工作,凭借我更丰富的GoLang经验并且针对提供数据库的支持也正在实现中,邮件中也有提及。但是如果有人说(不是huaqiao本人说的)这个项目是一个人搞的,啪啪啪打脸疼不?

我是不是吹牛逼,肯定蒙不过内行人,其他的你都可以不信,就数一下上面截图邮件中有多少个“thanks”和“thank you”就行了,还要说更多吗?

续集......

Linux基金会的PR Manager看到我在社区的帖子,问我能不能发一篇文章介绍一下我最近这段时间工作的细节,这个也抄给了huaqiao:

我说我先咨询一下Jim的意见,他同意,我就没问题:

文章投递准备中,谢谢~

The End.......

一下是即将投稿的完整初稿,包含了edgex-ui-go的短期计划:

这篇文章主要向大家介绍一个处于孵化区的edgex-ui-go项目,并向EdgeXFoundry社区公开关于这个项目最近所完成的一些工作,最新的进展以及未来一段时间的计划。

edgex-ui-go 重构

首先,让我们感谢huaqiao zhang提供了一个Java版本的EdgeX UI的实现,它对EdgeX而言意义重大,这意味着EdgeX有了用户界面。这之后,我们经过一段时间的讨论,觉得有必要遵循EdgeXFoundry的主流方向,提供一个GoLang版本的实现以满足EdgeX UI在更苛刻的物联网边缘环境中运行。前一段时间,huaqiao提供了一个初始的GoLang版本。大致的截图如下:

这个版本基本上能够匹配Java版本所提供的能力。在他提供了初始版本之后,我对整个项目进行了整体而全面地Review。发现初始版本存在着一些问题,离一个标准化的可以接受社区贡献的版本还有一些差距,整体而言有如下的这些缺陷:

当然,其中有些问题并不能归咎于huaqiao。最初,他只是从Java版本向GoLang版本改写,完成能力匹配,外加他刚刚接触GoLang语言,对这个语言并没有很深入的了解。但这些问题确实是存在的,于是我对这个项目进行了一系列的重构。

整体而言,解决了差不多20个issues,目前仍然有超过10个没有完全被处理,现在它看起来像如下这样:

现在即使一个新接触UI的用户,就算他对GoLang完全不熟悉,通过运行一系列的make命令,即可运行一个本地版本的EdgeX-UI Go版本。而这一点在初始版本中是不行的,因为那需要用户对GoLang项目的编译、运行有足够的了解。

edgex-ui-go 正在进行中的工作

接下来我们来谈一下,这段时间我们正在做的工作。这将会被分为几个部分:

1、准备迎接社区的参与;

正如之前所提及的项目结构规范化、丰富README文件的细节,提供Make file以提升项目的易用性以及即将做的持续集成以验证社区PR的有效性等等,都是为了给迎接社区参与做准备。关于持续集成,我正在跟EdgeXFoundry的DevOps工作组的Jeremy沟通,预期的选择将会跟edgex-go意义,以Jenkins作为项目的持续集成工具,如果合适,我们后期同样会集成代码质量检查工具以保障edgex-ui-go版本的代码质量。其实,从上面的重构列表中可以看出,以上很多的重构工作都是在解决代码的规范性问题。这确实是需要长期参加开源社区以及相应的检测工具才能确保代码拥有良好的质量。

2、将数据持久化到数据库并为后续切换数据库打下基础

上面我们提到,目前edgex-ui-go实现的数据存放方式简单而粗暴,它仅仅是将一些数据缓存在内存中。而众所周知,内存是易失性的,一旦掉电,所有的数据都将丢失。因此,我们必须为edgex-ui-go提供数据持久化能力。但我们希望edgex-ui-go的逻辑跟其数据库保持松耦合的关系,这将允许edgex-ui-go具备按照实际需求切换不同数据库的能力。因此我们为现有的领域对象实现了数据访问接口(DAO,从事过Java Web开发的人应该对此很熟悉)。当前我正在开发基于MongoDB数据库的DAO实现:

3、实现一个靠谱的登录验证

众所周知,安全性是物联网必须面对的一大难题,EdgeX也非常重视安全性,6月初的F2F会议重点讨论了安全性问题。而Edgex UI的登陆可能是用户操作EdgeX首先面对并且也许是最关键的门槛之一。所以我们必须确保edgex-ui-go拥有一个逻辑缜密的登录验证功能。登录验证常规而言,有使用全站https以及采用加盐值哈希两种方式。但是具体的实现,我正在跟edgex安全工作组的负责人进行沟通。

4、跟EdgeX California发布的GoLang版本的微服务进行集成测试

众所周知,California版本接近发布,整个EdgeXFoundry社区都为之振奋,因为这是EdgeX基于GoLang实现的第一个版本(很有幸本人深度参与了EdgeX GoLang第一版的开发)。edgeX-ui-go目前还连接的是老的Java版本的微服务。但后续edgex-ui-go将集成edgex-go版本的微服务并进行测试。以确保采用GoLang实现的整个EdgeX生态系统的完整性、稳定性与可用性。

5、构建edgex-ui-go的Docker 镜像这是在为容器化部署做准备,就像edgex-go的其他微服务一样,但这件事情并非迫在眉睫。

截止到 Delhi 版本的计划

让我们看得更远一点,谈论一下到Dehli版本,edgex-ui-go的计划。由于时间稍长,我们只能做粗粒度的规划,具体的实现进度将取决于时间安排。

首先,我们希望推动edgex-ui-go的前端完成重构。目前,edgex-ui-go的前端可以说非常简陋,一些可视化的能力也是非常地局限。对比一下EdgeXFoundry成员 CloudPlugs 所开发的EdgeX UI:

我们认为对edgex-ui-go的重构很有必要,目前我选择了一个开源的、功能强大的admin template。

重构的理由大致如下:

接下来,支持更多对EdgeX的管理功能与可视化功能。目前edgex-ui-go仅仅只是简单地支持了Device(并不完善)以及Export、规则配置等功能,但是我们认为这还远远不够。我们希望在界面上提供更多对edgex的管理能力,比如元数据的管理、调度器的管理、日志查看等等。同时我们期望采集更多的EdgeX指标以在edgeX-ui-go上进行监控与可视化并纳入edgex的系统管理功能。

最后,edgex-ui-go是社区的,如果你希望参与EdgeX,欢迎为edgex-ui-go 指出不足、提供建议、修改缺陷或者 review 代码。

谢谢~

(正文完)

声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多