[关闭]
@lxx3061313 2018-10-09T13:01:50.000000Z 字数 2488 阅读 577

自助机管理平台

自助机


背景

在以挂号为流量入口的场景下,医院智能终端设备不可避免的出现在了人们的视野。公司在初期进入医疗行业的时候,就是以自助机为切入点,稳稳占领了北京市挂号流量的主入口。
快速的领地扩张必然带来管理上的拖沓,这里的管理范畴包括团队管理和设备管理。当然团队管理是老板的事情,而设备管理就是我等程序猿的事情了。
在完成管理方案前,我们需要先了解我们要管理的设备。

终端设备

1.本质上是一台Windows主机。
2.有输入设备(各种读卡器,扫描枪),输出设备(打印机,屏幕,语音),业务辅助设备(UKEY,银联,京医通)。
3.支持挂号,缴费,检验单打印等功能。

缺失功能

1.启动元数据管理,设备配置热更新。
2.设备远程控制。
3.设备健康监控,业务监控。
4.设备软件自助升级
5.设备故障处理标准流程。

方案

如下图所示,完成后的治理平台,包含监控模块,远程控制模块,配置中心模块,升级管理模块。这四个核心模块都是基于mqtt消息队列来实现的。
WechatIMG202.jpeg-205.7kB
mqtt消息队列解决了终端跟后端信息的通信问题。MQTT是轻量的(Lightweight)、发布订阅模式(PubSub)的物联网消息协议。消息队列broker采用的是开源的emq消息队列。
1.消息可靠性
2.集群高可用
3.消息分组模式

消息队列选择

高可用

支持集群部署,节点间通过TCP相连。节点间共享主题->节点的映射,客户端的主题订阅关系,有连接节点维持。
可以描述如下:
1.MQTT客户端订阅主题时,所在节点订阅成功后广播通知其他节点,某个主题被本节点订阅。
2.MQTT客户端发布主题时,所在接口根据消息主题,检索订阅并路由到相关节点。
3.在每个节点内部会保存一份主题树,跟路由表信息。
image_1cn6p9log1r8l1quhbl1np6139834.png-45.3kB

分组模式

emq的分组模式,是根据主题信息来确认的。即,共享主题需要在主题上表明:share/开头,在集群内部会对$share开头的主题做共享处理,并以分组。

消息可靠性

mqtt消息支持3级服务质量
假设有两个角色,publisher, broker(broker跟subscribe模式一样)
1. qos0, 最多发送一次,即publiser发送过就行了。
2. qos1, 至少发送一次,qos1需要保证消息必须对方(broker)收到。所以必须增加一次交互,即broker必须告诉publisher它已经收到了,如果没有收到通知,则publisher会一直发。
3. qos2,有且仅发一次。这里除了上面的publisher必须知道broker已经收到了消息了,而且broker也必须知道publisher不会再发送了。所以又比上一个级别多了一次交互。而且在broker确认publisher不会继续向它发送之前,broker不会向subscribe投递数据。

支持多种语言客户端

mqtt属于开放协议,并且在物联网应用比较广泛,它的一大特点就是,有非常多的语言支持。而在自助机端,客户端主要是由c#写的。

设备健康监控

设备监控主要方式包括:
1.心跳检测
2.业务/设备信息传递
整体架构为:
image_1cn6tb7237k51hg1k85ti6tg23h.png-117.9kB
mossad系统完成了数据收集,清洗分类的任务,即COLLECTOR模块完成的功能。然后mossad对接公司的统一监控系统来完成,业务/异常信息的渲染,以及阈值触碰报警。(具体公司的监控架构,另一篇文章阐述)。

远程控制

远程控制即可以在统一的管理后台,在终端触发指定的任务。要完成这个功能需要在终端预设一个命令执行模块。通过订阅指定的主题,并解析收到的命令内容,并执行。另外需要对预设的命令进行包装,打包后持久化到管理系统,以便随便取出调用。

配置中心

配置管理要求在终端预设配置解析模块,配置项在后台统一管理维护。每次变更配置,在后端系统会做diff,根据diff结果触发相关配置变更。
配置管理模块功能:
1.系统启动时拉取最新的配置文档
2.在收到配置变更时,生成最新版本的配置文件,并触发配置重新加载。

升级中心

升级中心需要解决的问题是,如果快速将升级文件下载到终端本地。这里有2个问题
1. 升级本身,只升级需要升级到文件。
2. 文件传输。
第一个问题比较容易解决,因为终端程序都是按模块打包成了dll库,所以升级一般只需要升级对应的dll库即可。
比较核心的问题是文件的传输,终端设备跟公司是专线连接,所以升级系统不能占用很多的带宽来完成升级。另外终端设备众多,每个单独下载不仅耗时很久,而且效率也非常低下。所以比较好的一个解决方案是在设备间建立p2p网络,升级文档可以利用p2p网络在设备间传播。
so,我们的升级程序是基于freepastry来做的。
2.1 要想完成文件共享,需要构建P2P网络,所以在应用层,我们制定了构建网络的一层应用层协议。
节点状态分为:init,creating,ready,waiting
初始网络的创建(只有一个节点的网络)需要mossad升级中心的调控,在这里msossad🙏了一

扩展阅读-freepastry

freepastry是一个可扩展的,通用的,分布式查找和路由系统。pastry节点组成了一个去中心化的,自组织的和高容错的基础网络。Pastry提供了高效的查找和路由算法。

节点组织

每个节点id是一个128bit的整数,节点id是随机分配的,可能是hash出来的一个整数。节点id用于在圆形的节点空间中标识节点的位置。每个节点内维护了一个路由表,一个叶子节点表,一个邻居节点表。路由算法只使用到了路由表和叶子节点表。

路由算法

路由表是根据前缀匹配来组织的。简单来讲,路由表的第n行的每个项中,前n位是跟当前节点的前n位是一样的。而每一行中第n+1位是从0依次递增的。
假设一条消息X要从A节点开始路由,那么X最终会路由到Z节点,Z节点的nodeid在数值上跟X的key是最接近的。
算法入下:
1. 先检查叶子节点,看在不在叶子节点范围内,在的话直接路由
2. 不在叶子节点范围呢,则检查路由表,要从路由表中找到一个匹配前缀比当前的匹配前缀至少多1位,意味着查找过程是要收敛的。

自组织网络算法
  1. 节点记入
  2. 节点离开
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注