平台规划-业务平台
一、业务复杂度
按照医疗业务的复杂度,可分为功能型业务和后台管理型业务:
-
功能型业务需要完成特定的业务功能,需要执行复杂的SQL和冗长的业务调用链,页面布局复杂,呈现数据多而且紧凑;
-
管理型业务相对简单,面向中后台管理,主要是围绕某个业务表单完成数据增删改查等功能,页面布局简约,风格扁平靓丽,呈现数据较少。
二、开发模式
医疗体系是一个复杂业务的综合体,在区域卫建和医疗机构里面的业务系统有数百个,相关支撑的业务厂家也有几十上百家,除去古老的C/S桌面程序,基于WEB的业务系统因为业务复杂度和受众群体的使用范围,单体架构,前后端分离架构,微服务架构的系统都会并存在医疗体系中。为了加快软件开发业务落地,可以采用开发脚手架或者低代码开发平台作为开发的技术底座。
1、开发脚手架
基于spirngboot/springcloud的脚手架是一组预置的文件和目录结构,可以快速创建新的项目,提供基础代码、通用组件,代码自动生成,依赖管理、构建和打包工具等。使用脚手架可以减少重复性的工作,规范化项目结构,提高代码质量。脚手架需要开发者自己编写和维护,适合于自由度要求较高的项目。
2、低代码平台
低代码平台是互联网公司想进入toB/toC是市场,但避免陷入业务泥潭的产出物,提供可视化界面和拖拽式操作来帮助用户快速构建应用程序。低代码平台通常涵盖了从数据建模到用户界面设计、业务逻辑编排、自动化测试等各个方面,降低了开发门槛,并能够有效地提高开发效率和质量。考虑到低代码平台自动生成的代码结构相对固定,不可能覆盖所有的业务需求,尤其是与特定硬件、软件或数据源进行集成,则需要更高级的编程技能和自定义代码,这应该超出了目前低代码平台的能力范围。
之前也关注了国内的一些低代码平台,大部分还限于处理业务表单+工作流的模式,远未达到当年桌面开发的RAD(dephi,vb,pb)那种能力。如果仅作为后台管理模块的页面,基本能应付;如果是复杂的业务页面,原生技术应该更合适。
但基于spring脚手架的基础开发框架是必要的,添加开箱可用的基础模块,解决通用基础功能,包括权限认证,日志,网关,调用链,工作流等处理。简单的增删改查业务采用基于表结构的代码生成方式,复杂的业务采用传统的开发方式。
采用 git + jenkins 实现日构建/周构建的devops模式,加速代码的发布和版本的迭代。同时考虑到医疗业务系统的规模并不大,采用Docker/Compose/Swarm部署即可,降低部署成本和复杂度,同时满足业务的需求,提高开发效率和产品质量。
三、技术模块
1、数据库,数据库目前有三种类型:交易型、分析型和混合型库。
业务系统采用OLTP,数据中心和指标计算一般采用OLAP。目前有一种混合型数据库,同时兼备TP和AP能力,比如GP6/GP7,对于资源比较紧缺的业务系统是比较合适的。在T+1的业务场景中,白天支撑数据聚合与数据共享的功能,晚上执行数据分析和指标计算。
2、基础组件,用来支撑系统运行的基础设施
-
分布式缓存和内存数据库,可以采用redis或者ignite,ignite本身就支持分布数据,SQL语法,冷热数据自动迁移等,在业务协同处理引擎、摘要信息查询,以及EMPI的处理方面可以提供基础支撑。
-
消息中间件常见的有Robbitmq,Racketmq,Kafka,因为业务支撑特性和性能有较大差异,需要根据不同业务场景进行选择。
-
搜索引擎一般采用ES。在不着重考虑切分词的场景下,可以替换成clickhouse。考虑其架构特点,采用维度退化,范式退化的方式设计大宽表,在摘要信息查询,日志查询,资源中心热点数据的高频查询方面提供基础支持。
3、服务协同
这里服务协同不是OA的办公协同,而是基于微服务体系下的服务编排能力,支持串行/并行/选择的路径执行模式,调用WebService和Rest接口,如果同时支持人工活动的表单页面,将兼容OA的办公流程模式。
四、功能模块
-
权限管理:提供基于角色控制,可控制访问资源页面、功能按钮,过滤不同部门、不同分公司、不同组织的业务数据。
-
流程引擎:如果平台只用于OA办公环境中,可以整合Activiti,flowable,commda作为OA办公工作流的基础实现。如果需要服务编排功能实现类似ESB/SOA的功能,可以自研引擎,再集成web服务和Rest的接口调用。如果自研服务编排引擎包括了人工活动(业务表单)的处理,这样就能实现人机流程的全线贯通。
-
集成中心:这里包括2个方面,一个是应用集成,包括身份认证,鉴权等基础能力;另外是业务集成,通过类似个人门户,把消息和代办以及重要信息在首页展示。
-
门户管理:自定义PORTAL,支持栏目模板自定义,支持门户布局配置,支持不同风格的部门、单位、个人的首页门户配置。
-
运维管理: 除了基于微服务的服务治理、链路追踪、熔断保障功能以及行为统计和日志分析等功能,运维管理还包括系统性能优化、容量规划、故障处理、安全防护和备份恢复等方面的工作。