持久发布/订阅消息传送模式,缓解医疗器械的开发之痛
扫描二维码
随时随地手机看文章
在决定以什么样的最佳方式,利用软件来使其产品实现智能化时,除考虑当前的要求之外,医疗器械设计者的目光应当放得更远。对人机界面(HMI)、无线网络连接、数据存储以及其他功能的需求发展迅速,设计者必须创建灵活的系统,以适应技术和组件的推陈出新,同时最大限度地减少相关开发工作量或者对初始设计的影响。
是否为医疗器械选择了适当的消息传送模式,意味着是按预算如期开发出高效、灵活的系统并获得认证,还是所开发的系统效率低下而又脆弱,并且开发过程伴随着无数麻烦的天壤之别。相比于其他消息传送模式,持久发布/订阅(PPS)消息传送模式具有诸多优势,特别是在采用了众多完全不同的组件和技术的医疗器械中(图1)。
图1 这台用于可行性论证的医疗器械模型汇合并显示了从血压计、肺活量计、脉搏氧饱和度仪、心电图设备和胰岛素泵获得的数据。这些设备连接至康体佳互通性管理器,并利用PPS消息传送来与Qt HMI通信。PPS也为一个远程管理器提供了消息传送服务,以确保与基于云计算系统的数据库和便携式平板电脑之间的互联网通信。
另外两种常用的消息传送系统——异步消息传送和同步消息传送——则对设计复杂的系统提出了挑战。众所周知、应用广泛的异步消息传送系统(图2)是许多系统的首选解决方案,但它将错误处理、端到端语义和缓冲管理等负担,推高至应用层。
图2 采用异步消息传送,一个进程发送其消息并继续执行,当且仅当回复到达时,接收回复。
因此,架构师在设计采用异步消息传送模式的系统时,必须开发相应的消息协议,以确保所有应用的消息传送行为都是正确的,还必须确保这些应用在高负载条件下,分配充足的存储空间用于消息缓冲。虽然在简单的系统中,完成这些设计任务可能不太费劲,但对于设计或升级复杂的系统,这些任务可能构成令人生畏的艰巨挑战。
同步消息传送系统,或者说发送/接收/回复消息传送系统(图3)不如异步消息传送系统那么常用。对于有许多进程要求在其开始执行之前响应其消息的实时环境,同步消息传送特别有用。
图3 采用同步消息传送,一个进程阻塞直至其收到从目标接收进程发出的回复。
对于必须轻松地集成完全不同的应用的复杂系统,同步消息传送可能不是最优选择。同步消息传送将发送方与接收方紧密地结合起来。每一台服务器都直接与其客户端通信,并且必须知道如何响应所有客户端消息,因此,对一个软件组件做出的改变,可能要求改变其他软件组件。
持久发布/订阅
发布/订阅消息传送模式问世已久。1987年,K. P. Birman和T. A. Joseph描述了一种类似的消息传送模式——虚拟同步。二十年前,北电网络实现了一个用于在电话交换机上执行故障监视的发布/订阅消息传送模型,如今,快速互联网搜索提供了许多发布/订阅消息传送实现的例子。持久发布/订阅在这些模式的基础上进一步发展,确保了重新启动后的数据持久性,并且可以支持必须集成许多设备和组件,采用尖端的人机界面的应用。
PPS是一项基于对象的服务,其发布方和订阅方是在一个松散结合的消息传送架构中。任何PPS客户端都可以是发布方、订阅方或兼为二者。发布方修改对象及其属性,并将之写入文件系统。当发布方改变一个对象时,PPS服务将通知所有订阅了该对象的客户端。客户端可以订阅多个对象,并且对象可以具备多个发布方和订阅方。因此,多个发布方可以使用同一个对象及其属性,来向所有订阅了该对象的客户端传递信息。
PPS客户端必须知道感兴趣的是哪些PPS对象。如果是发布方,它们需要知道在什么时候发布什么消息;如果是订阅方,它们需要知道必须订阅哪些对象以及对哪些对象属性感兴趣。
然而,PPS客户端不必管理错误,并且与它们有关的唯一缓冲是那些用于open()(打开)、read() (读取)和write()(写入)POSIX API调用的缓冲。由于PPS订阅方使用read()调用来检索数据,因此,它们不需要为这些对象管理缓冲。它们仅需决定其读取是阻塞方式,还是非阻塞方式,以及确认它们能够解析所读取的数据。PPS服务将处理其余事项。
持久性
PPS服务可在重新启动后更新数据。运行时,它将其对象存放在内存中,但在收到指令或在关闭时,则将之保存在永久性存储器中。启动时,它可立即或在首次访问时,恢复其对象。当然,永久性存储器依赖于可靠的文件系统和存储介质。
PPS消息传送模式也可简化系统启动。例如,在采用常规消息传送模式的系统中,如果某个客户端在服务器之后启动,那么,该客户端必须向服务器请求新的数据,以防在从服务器启动到客户端启动的这段时间内发生了任何改变。对于系统中的每一个客户端,如果客户端与服务器之间的连接中断,也必须满足这个要求。然而,利用PPS服务,发布和订阅服务可在启动时恢复其对象,并在对象有所变化时更新对象。任何客户端——不论其在任何时候启动或重新连接——仅需读取这些对象,即可获得当前数据。
利用PPS服务,发布方与订阅方相互之间并不认识;它们之间的唯一联系是对它们具有意义和目的的对象。这种模式赋予了系统设计者极大的灵活性。如有必要,他们可以将关于模块连接点和数据流的决策,推迟到运行时间再做出。开发人员可以在创建系统的过程中调整连接点,甚或将之设置为随着系统的运行而动态改变,因为这些点既不是硬编码的,也没有直接联系。
PPS消息传送模式也简化了新组件的集成。由于发布方与订阅方无需相互认识,因此,添加组件的开发人员仅需决定该新组件应当发布什么数据,以及这些组件需要其他PPS客户端发布什么数据。例如,他们可以在医疗器械聚合器中添加ECG或EEG组件,而不必微调API,并且不会加剧系统复杂度(图4)。
图4 通过PPS进行通信的系统组件不需要相互认识,因此,系统设计者可以添加新的测量设备或者改变HMI,而不必修改整个系统。
可行性论证
作为QNX软件系统公司开展的医疗器械开发计划的一部分,我们设计并打造了一个用于可行性论证的模型,以在便携式医疗器械提供的有限的计算资源上运行。该应用利用基于康体佳(Continua)标准的互通性管理器、PPS和利用跨平台应用和用户界面框架Qt(发音“cute”)创建的尖端的HMI,将一系列典型设备组合起来。
我们之所以选择Qt用户界面和基于康体佳联盟提供的康体佳使能软件库(CESL)的互通性管理器是因为,这两种技术都在医疗器械行业享有盛誉。Qt在C++开发环境中提供了一套明确定义的UI组件,并且有着在获得了FDA及其他规定认证的医疗器械上成功实现的悠久历史。
Qt提供了打造符合严格的设计要求的清晰、高效的用户界面所需的所有组件,包括布局、分层和多媒体支持。类似地,康体佳软件库中的通信协议不仅提供了与完全不同的医疗器械进行通信的简单方法,而且是一个早已在医疗器械中成功部署的标准化协议。
简化的架构
可以将PPS服务专门设计为使用二进制对象或人可读的对象。二进制对象很小,但是,除最具约束性的环境之外,在所有环境中,人可读的对象更可取。它们允许开发人员利用标准文件系统实用程序,从命令行进行调试,如cat命令用于订阅,echo命令用于发布,或者编写一个简单的程序,用于订阅某个对象并打印调试信息,包括PPS对象及其属性的列表。
PPS消息传送为应用提供了一个灵活的架构。例如,要用其他库来替代康体佳库,或者用其他HMI技术来替代Qt,所需工作量极少。同样地,改变HMI技术不会要求改变互通性管理器或者远程管理器,就像改变这些管理器,不会要求改变HMI。
PPS消息传送也便于添加新的设备——利用标准康体佳协议,通过USB、蓝牙甚或TCP,即可将新的设备连接至系统。例如,我们仅需利用康体佳协议将一个EEG连接至互通性管理器,创建适当的PPS对象用于通信,并且在HMI中添加相关显示和控制功能,即可将该EEG添加到我们的可行性论证模型中。此外,PPS消息传送简化了测试和功能安全验证,因为添加新的组件不要求修改和重新验证所有其他组件之间的消息传送。
最后,PPS消息传送简化了品牌重树、本地化和用户界面更新等。因为HMI通过PPS对象与系统的其余组件进行通信,所以设计者不必改变HMI之下的任何一行代码。他们仅需确保新的HIMI所订阅和发布的PPS对象与先前的HMI相同。在完全相同的基础系统上,仅需实现不同的特性,或者不同的HMI设计,例如,支持不同的字母表和写入系统,即可打造出各种产品系列。