医疗行业多层级复杂网络环境下的消息传输(远程会诊)架构与实现

近期接手一个针对医疗系统远程会诊平台的技术改造工作,这项工作中的一些技术问题颇具代表性,我会在此记录这一工作的过程和技术细节,如果条件允许,会在 GitHub 上开源部分业务无关的纯技术实现,敬请关注。(https://github.com/iccb1013)。

远程会诊平台的应用场景指的是乡镇或县卫生所,在接诊过程中,对疑难问题上报上级医疗机构,由上级医疗机构进行网络诊断并回复诊疗意见,但是这一过程,并不是简单的点对点的关系。
主要特点:
1)  包含多级机构:乡镇、县、区、市、省。由任意一级向上级机构提出远程会诊请求,可以提供远程会诊服务的上级机构可能存在多个。
2)  部署环境复杂,此系统并非统一部署于服务器的云服务,而是在各级别,都可能会部署区域性的服务器(也可以不部署),如县一级部署服务器,服务于县和乡镇,区、市都分别部署各自的服务器。客户端不能跨级别与服务器进行连接。
3)  网络环境复杂,对于医疗机构,其部署服务器和客户端的网络环境可能十分复杂,多层防火墙、专用网络等,同时对于乡镇或县等机构来说,网络质量亦存在十分不稳定的情况。

从我目前收集的问题来,排除BUG和业务逻辑上问题,基础结构上存在的主要问题是:

1)连接不稳定,对网络环境有较大依赖。

2)响应速度慢,容易卡死。

3)主服务重启后下面连接的所有服务都必须跟着重启。

简单分析:

1)既有的远程会诊平台使用的是基于 TCP 长连接的 WebService,现场环境较复杂时,跨过乡镇、区县、市等地的机构时,还需要穿过各内部网络,网络环境较为敏感,依赖性较大。

2)现有的实现方式并没有对多级层的网络消息传输机制进行独立的拆分实现,而是基于 WebService 连接直接实现各业务接口并集成在客户端中进行使用,也就是硬编码。

鉴于以下问题,新的技术架构有以下几点目标:

1)所有连接支持 HTTP 无状态或 TCP 长连接两种方式,由服务端决定采用哪种方式连接。

2)使用 HTTP 方式连接时,消息的向上传输使用 WEB API 接口的方式进行调用,接收回复消息则使用 HTTP 轮循进行。使用 HTTP 方式可最大程度减小整体架构对网络环境的敏感和依赖,同时极为方便系统规模进行横向扩展。

3)使用 TCP 方式连接则可以获得更高的性能,但是对网络环境的要求更为严格,可以在网络环境较好的节点服务器到 Client 端使用。

4)整体结构分为 主服务器、节点服务器、客户端 三层,支持异构的方式连接,如:客户端到节点服务器使用 TCP 方式,节点服务器到主服务器使用 HTTP 方式,或反之,或均采用同样的连接方式都可以,可在现场配置。

5)文件的存储使用独立的文件服务器,可自建或使用公有云服务。独立的文件服务器可避免文件传输对主服务网络带宽的占用,剥离文件存储相关的具体实现,同时独立的 OSS 服务有较低的带宽成本和存储成本优势。

6)对于消息的传输,使用命令封包的方式进行,技术架构不处理任何业务逻辑。命令封包中包括目标节点、目标 Client、要执行的命令和参数等信息,由客户端发出后,经过节点服务器到主服务器,由主服务器分发给指定的目标。支持任意 Client 到任意 Client 的消息传输。在命令的传输中,当发起 Client 和目标 Client 在同一个节点服务器时,支持经过主服务器和不经过主服务器两种方式,可配置需要配置。经过主服务器可实现全局的记录存储审计等功能。

7)所有的消息传输,都使用异步方式,不支持挂起等待的同步方式。当发起端的一条命令发出之后,发起端通过自己的命令接收器处理命令的回复,两者分别运行于不同的线程。

8)与现有服务端实现和客户端的集成,使用提供 SDK 开发包的方式进行,不进行任何代码层面的混合编写,以维持本架构的独立性,便于后期升级维护,以及实有服务和客户端本身在未来重构之后,能够继续无缝兼容本架构。

原文:http://blog.shengxunwei.com/Home/Post/db2c6373-2639-4717-8601-8361d54afbaa

时间: 2024-10-11 05:28:52

医疗行业多层级复杂网络环境下的消息传输(远程会诊)架构与实现的相关文章

linux网络环境下socket套接字编程(UDP文件传输)

今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中,如果我们使用TCP传输,会造成传输速度较慢的情况,所以我们在进行文件传输的过程中,最好要使用UDP传输. 在其中,我们需要写两个程序,一个客户端,一个服务端,在一个终端中,先运行服务端,在运行客户端,在服务端和客户端都输入IP地址和端口号,注意服务端和客户端的端口号要相同,然后选择功能,在linux

主机WIFI网络环境下,Linux虚拟机网络设置

在主机使用WIFI网络环境下,怎么样进行虚拟机静态ip设置和连接互联网呢,原理什么太麻烦,另类的网络共享而已: 1.其实简单将网络连接模式设置成NAT模式即可. 2.虚拟网络编辑器依旧是桥接模式,选择自动就能正常设置虚拟机静态ip和上网了,要是不放心的话可以选择 无线wifi的虚拟桥接.

Ubuntu12.04在无网络环境下配置apt-get光盘源的简单方法

许多数据库服务器是不能连上internet,想更新安装包就比较麻烦. 通常可以先在有internet环境的计算机上下载deb包,在拷贝到服务器安装deb,这样很难处理包的依赖关系. apt-get可以解决包的依赖关系,但是默认配置下需要从internet下载包,如果可以从本地读取安装源就可以解决包的依赖关系和无internet的问题. 步骤参考: 1.把光盘插入光驱,并且挂载到本地: mount /dev/cdrom  /mnt 2.备份后修改source.list仓库配置文件: mv /etc

如何在无网络环境下与虚拟机互通

问题来源: 由于在练机时候我把网线拔掉插到自己的电脑上了,导致用CRT一下连不了虚拟机浪费了不少的时间, 其实很简单. ------------------------------------------------------------------------------------------- 为了方便我先来直接总结一下我的过错吧!!-> -> 问题的关键在于理解Vmware的vmnet0.vmnet1.vmnet8. 网络->属性->更改适配器 里面显示着可用的一些网卡哦

Linux环境下线程消息同步的陷阱

我们程序中常常会使用到线程间的消息同步处理,比如以下一段伪码 var message = "": void func()  {   1. 启动线程Thread(该线程中填充message的内容):   2. 阻塞,直到等待到完成message填充的事件:   3. 处理message:   .... } void Thread()  {   1. 通过某种处理填充message:   2. 触发func中的阻塞事件: } 我们通常会使用条件变量来完成类似情况的线程同步处理 比如wind

AIX环境下文件远程传输复制工具--rsync安装测试

一.RSYNC简介   rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.rsync使用所谓的"rsync算法"来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快.  rsync的基本特点如下:1.可以镜像保存整个目录树和文件系统:2.可以很容易做到保持原来文件的权限.时间.软硬链接等:3.无须特殊权限即可安装:4.优化的流程,文件传输效率高:5.可以使用

医疗时鲜资讯:新医改环境下“连锁诊所模式”前景如何?

背景: 2014作为移动医疗元年,最火热的关键字莫过于"自由执业"."移动医疗".本人算是IT界的一员,但却一直对移动互联网不是很感冒,智能手机使用时间很短,支付宝钱包也刚刚注册.可能跟本身掌握的技术有关(对移动互联网,诸如Android和IOS,还未涉猎Σ( ° △ °|||)︴),我更关注"自由执业"对医疗领域的变革.在前几篇博文的基础上,本文继续唠唠医生自由执业,设想未来医疗行业的新气象. 连锁诊所: 自由执业,简单的认为就是医生的职业化.

对于大陆网络环境下android开发环境搭建的一点建议

首先,我的这篇博文不是教你如何搭建android开发环境.我相信这类的文章已经有很多了,如有需要可以百度一下.我这里将要说的对于大陆网路环境下,如果能够访问到android开发过程中需要的一些资源. 因为方法和资源都是有时效性的,所以参考本文请注意时间. [如何获取android SDK] 其实这个东西国内很多站点可以下载到,可能不是最新的罢了.所以这里谈论的是最新的android SDK的下载. 问题的根本是你不能直接访问http://developer.android.com/站点. 所以你

无网络环境下安装Dynamics CRM

在安装CRM时会须要非常多的组件支持.没有这些组件是没法安装的,一般我们都是选择机器联网后在线安装,但也有特殊情况确实不能联网的.可參考这篇文章 https://blogs.msdn.microsoft.com/crminthefield/2013/11/21/how-to-install-microsoft-dynamics-crm-2013-without-an-internet-connection/