Clinflash IRT 2.0自发布至今已有1年多时间,今天由易迪希开发团队从技术专业角度给大家解读下Clinflash IRT2.0的“与众不同”。
01小巧而强悍的后台服务
在Clinflash IRT 2.0设计之初,易迪希开发团队创新的选定了目前行业内热度和呼声非常高的Golang作为后端服务的编程语言。相比目前主流的Java编程语言,Go有着运行效率高、内存占用小、编译速度快、程序体积小等诸多优点。同时用Go语言来开发后台服务,代码简洁、优雅、稳定、易于维护,程序员能够方便地直接控制所有细节,最大程度降低代码出错的可能性。
易迪希开发团队自系统上线后开展了实时服务器监控,在常规项目中Clinflash IRT 2.0系统内存占用仅为20M左右。而基于Java编写的程序通常运行之初就会占用超过1个G的内存。Clinflash IRT较小的内存占用可以确保在大规模随机及发药过程中,确保系统稳定性。

Clinflash IRT 2.0主程序在完成编译和镜像构建后,体积只有仅仅几十兆,其中还包含了一些用于特殊场景的开源字体文件。得益于较小的程序体积,Clinflash IRT 2.0可以快速部署到指定国家/区域的服务器,加速系统上线进程。
涉及到数据库访问(读/写)的业务逻辑,Clinflash IRT在后台执行完成(不包括经网络传输到达用户)的时间通常在个位数的毫秒级别。


目前研究设计趋于复杂,试验可能涉及10多个Cohort及数十种药物组合。在使用NoSQL数据库存储异构的嵌套数据的情况下,复杂度几乎可以忽略。无论是批量查询还是单条数据查询,都仅需一步最简单的查询操作,提升系统运行效率。
此外,随机化与供应管理系统中还存在自定义表单的业务场景。如果按照常规思路,可能会有分表的设计思路,或者是表单字段和字段数据集中在两个表或者多个表上存储。但这两种思路中无论哪一种,随着自定义表单越来越多,都会引发灾难性事故,最终导致系统性能下降甚至崩溃。而Clinflash IRT 2.0采用NoSQL的思路,使用异构方式存储表单设计和表单数据,在根本上解决这个难题。
04极度简单的软件架构
在系统架构层面,Clinflash IRT 2.0将浏览器端的web程序构建打包后得到的静态文件跟后端服务合并,并专门定制了支持SPA(Single Page Application)的Serve Static模式,使系统核心服务(包括网页端和后台服务)最终只要打包、编译得到一个可执行文件,极大地方便了系统的维护。既摆脱了部署前端应用需要的Nginx、Tomcat等工具依赖,又使得从网页到后台服务的网络请求变成本地服务调用,这也从一定程度上加快了用户的最终访问速度。

05高度可用的系统服务
在Clinflash IRT 2.0上,采用了全面的容器集群化部署。当系统服务的运行多个实例时,系统服务能够实现不中断更新,实时修复问题。在极端情况下,程序遇到了非预期的故障导致下线的情况,系统也能够迅速自动重启,避免影响随机发药过程。