4. LIMS总体架构设计
LIMS 的总体架构设计决定了系统未来五到十年的可维护性、扩展性与交付节奏。很多项目在需求阶段看起来功能清晰,但一旦进入实施,才发现样本流转、仪器采集、报告审核、审计追踪等模块耦合过深,导致一个小改动牵动全局。本节从分层架构入手,对比微服务与单体架构的适用条件,给出技术选型原则,并说明如何划分系统边界。
一、分层架构:把职责钉在层上
LIMS 的经典分层为:接入层、应用层、领域服务层、数据访问层、基础设施层。接入层负责 Web 端、移动端、仪器工作站、第三方系统的请求接入与协议转换;应用层编排用例,例如“接收样本—分配检测项—生成任务”;领域服务层承载检验业务规则,如样品状态机、结果判定、超标复检;数据访问层封装数据库、文件存储与缓存;基础设施层提供日志、消息、鉴权、任务调度等横切能力。
分层的核心约束是:上层可调用下层,下层不得反向依赖上层;同层之间通过接口或事件协作,避免直接跨层访问数据库。以“录入检测结果”为例,接入层接收 JSON,应用层校验任务状态并调用领域服务,领域服务执行结果判定与单位换算,数据访问层写入结果表并记录审计日志。若把判定逻辑写在 Controller 中,后续复检规则变更就会污染接口层,这是分层设计要避免的典型问题。
二、微服务与单体架构对比
单体架构将所有模块打包为一个部署单元,优点是开发简单、事务一致性强、部署运维成本低;缺点是模块边界容易模糊,局部变更需全量发布,扩展只能整体复制。微服务按业务能力拆分为独立服务,如样本服务、检测服务、报告服务、仪器采集服务,各自独立部署与扩展,适合多团队并行、模块负载差异大的场景;代价是分布式事务、服务治理、链路追踪和运维复杂度显著上升。
对多数中小型实验室,建议采用“模块化单体”起步:代码层面严格分层与分包,数据库按模块划分 schema,但部署为一个应用。当某模块出现独立扩展需求(如仪器采集并发高、报告生成耗时长)时,再将其拆出为独立服务。判断是否拆分的量化参考:该模块日均调用量是否超过总请求的 30%、是否需独立扩缩容、是否由独立团队负责、是否引入不同技术栈。若四项中有两项以上为“是”,可考虑拆分。
| 对比维度 | 单体架构 | 微服务架构 |
|---|---|---|
| 部署单元 | 单一应用包 | 多个独立服务 |
| 事务一致性 | 本地事务,强一致 | 最终一致,需补偿 |
| 扩展方式 | 整体复制 | 按服务独立扩缩容 |
| 团队协作 | 共享代码库,需协调 | 按服务自治 |
| 运维复杂度 | 低 | 高(注册、网关、追踪) |
| 适用场景 | 中小实验室、需求稳定 | 大型集团、多团队、高并发 |
三、技术选型原则
技术选型应围绕“可验证、可替换、可运维”三个原则展开。可验证指选型前用真实业务场景做原型验证,例如用 10 万条样本记录测试查询响应;可替换指关键组件通过接口隔离,避免业务代码直接依赖具体中间件;可运维指团队具备该技术的排障能力,而非仅因社区热度选择。
以数据库选型为例,若实验室样本量在百万级以内、事务要求强,PostgreSQL 或 Oracle 均可;若需存储仪器原始谱图,应搭配对象存储而非全部塞入关系库。消息队列用于解耦仪器采集与结果处理,选型时关注消息可靠性、顺序性与积压处理能力。以下为一份可参考的选型评估表字段示例:
评估项 权重 候选A(PostgreSQL) 候选B(MongoDB)
事务支持 0.25 强 弱
复杂查询 0.20 优 中
谱图存储 0.15 需外接对象存储 内置GridFS
团队熟悉度 0.20 高 中
运维成本 0.20 低 中
加权得分 — 0.25*5+0.20*5+... 需按实际打分
示例中权重与打分需由项目组根据实际约束填写,不可直接套用。选型结论应记录在架构决策记录(ADR)中,注明背景、选项、决策与后果,便于后续追溯。
四、系统边界划分
边界划分的核心是回答“什么归 LIMS 管、什么不归”。LIMS 应管理样本生命周期、检测任务、结果与报告、资源与审计;不应管理财务结算、生产排程、人事考勤。与 ERP 的边界通常在“检测委托单”与“费用结算”:ERP 下委托单,LIMS 回传检测结果与费用明细,双方通过接口表或消息同步,避免直接跨库查询。
与仪器工作站的边界:LIMS 负责下发检测任务与接收结果,仪器工作站负责采集原始信号与本地控制。接口协议优先采用 ASTM E1394 或 HL7,若仪器仅支持文件输出,则通过文件监听服务解析并写入中间表,再由 LIMS 定时拉取。与电子签章系统的边界:LIMS 生成报告 PDF 后调用签章接口,签章系统返回签名后文件,LIMS 存储并发布,不自行实现密码学签名逻辑。
综上,LIMS 总体架构应先以分层明确职责,再以模块化单体控制初期复杂度,按量化指标决定是否拆分微服务,技术选型坚持可验证与可替换,系统边界以数据主副本和状态判定权为锚点。这样设计出的架构,既能支撑当前检测业务,也为后续扩展留出清晰路径。