3. 平台架构总体设计
药物研发数据平台面对的不是单一业务系统,而是从靶点发现、化合物筛选、体外/体内实验、临床前安评到临床运营的多阶段数据流。不同阶段的数据形态差异极大:组学数据是海量文件,化合物与实验结果是结构化表格,临床数据受 CDISC 标准约束,影像与流式细胞数据则是大对象。因此,架构选型的核心问题不是“哪种架构更先进”,而是“哪种架构能让不同阶段的数据以可治理、可追溯、可复用的方式流动”。本节围绕分层架构、微服务与数据网格三种主流范式,给出面向药物研发场景的对比与决策方法。
三种范式的本质差异
分层架构按技术职责纵向切分,典型为采集层、存储层、计算层、服务层与应用层。它的优势是边界清晰、依赖单向、易于建立统一的数据标准与安全策略,适合作为平台的“骨架”。在药物研发中,分层架构能保证原始实验记录、处理后数据集与对外服务接口之间形成明确的血缘链路,满足 GxP 审计对数据完整性的要求。
微服务架构按业务能力横向切分,把化合物注册、实验数据采集、生物信息分析、统计编程等拆成独立部署单元。每个服务可独立迭代、独立扩缩容,适合研发流程中频繁变化的分析需求。但微服务若缺乏统一的数据契约,容易形成“服务间数据口径不一致”,在跨阶段关联分析时产生严重偏差。
数据网格把数据视为产品,由最了解数据的领域团队负责其采集、质量与发布,平台层只提供自助式基础设施与联邦治理。它特别适合药物研发中“领域知识高度分散”的现实:化学家最懂化合物数据,生物信息学家最懂组学数据,临床数据管理员最懂 CDISC 映射。数据网格能减少中央数据团队的瓶颈,但要求组织具备较强的领域数据负责人机制。
面向药物研发场景的架构决策方法
三种范式并非互斥。实际平台通常以分层架构为骨架,在计算与服务层内部按业务能力采用微服务,在数据资产层按领域引入数据网格的产品化治理。决策的关键是识别“变化维度”:如果变化来自技术栈与部署节奏,用微服务;如果变化来自领域知识归属,用数据网格;如果变化来自合规与血缘要求,用分层架构固化边界。
下面给出一份可直接用于架构评审的决策表。评审时逐行打分,每行取最高分对应的范式作为该维度的主导选择,再综合判断是否需要混合。
| 决策维度 | 分层架构 | 微服务 | 数据网格 | 药物研发场景判断依据 |
|---|---|---|---|---|
| 数据血缘与审计 | 强 | 中 | 中 | GxP 要求原始记录到申报数据可追溯,优先分层 |
| 领域响应速度 | 慢 | 快 | 快 | 分析流程频繁调整时,微服务或数据网格更优 |
| 跨阶段关联分析 | 强 | 弱 | 中 | 靶点到临床的关联需统一主数据,分层+契约 |
| 团队自治程度 | 低 | 高 | 高 | 领域专家能否承担数据产品负责人角色 |
| 异构技术栈支持 | 弱 | 强 | 强 | 组学、影像、临床工具链差异大,需异构支持 |
| 初期建设成本 | 低 | 中 | 高 | 数据网格需先建立联邦治理与产品目录 |
落地示例:某抗肿瘤小分子项目的架构组合
假设一个抗肿瘤小分子项目,数据源包括化合物注册系统、高通量筛选读数、RNA-seq 表达矩阵、临床前毒理报告与 I 期临床 EDC 数据。平台采用如下组合:
- 分层骨架:采集层通过文件网关接收测序 FASTQ 与仪器原始文件,存储层用对象存储保存原始数据、关系库保存结构化实验记录,计算层运行生信流程与统计程序,服务层统一暴露 API 并记录审计日志。
- 微服务:化合物注册、实验数据采集、生信分析、统计编程各自独立部署。每个服务发布 JSON Schema 契约,例如化合物服务输出
compound_id、smiles、salt_form、batch_no;实验服务输出assay_id、plate_id、well、readout_value、unit。 - 数据网格:化学、组学、临床三个领域各自维护数据产品。化学领域发布“化合物主数据产品”,组学领域发布“表达矩阵产品”,临床领域发布“CDISC SDTM 产品”。每个产品带负责人、更新频率、质量指标与访问契约。
关键实现细节在于主数据对齐。化合物编号在化学领域为 CMP-2024-0017,在实验服务中作为外键引用,在组学数据产品中通过 compound_id 关联处理组,在临床数据中通过 study_drug_code 映射。平台在服务层维护一张映射表,任何跨领域查询都先经过映射服务,避免各领域自行解释编号含义。
-- 跨领域关联查询示例(经映射服务解析后)
SELECT c.compound_id,
c.smiles,
e.assay_id,
e.readout_value,
g.gene_symbol,
g.log2_fold_change
FROM compound_master c
JOIN assay_result e ON e.compound_id = c.compound_id
JOIN expression_product g ON g.compound_id = c.compound_id
WHERE c.project_code = 'ONCO-2024-01'
AND e.assay_type = 'IC50'
AND g.comparison = 'treated_vs_control';
结果判读时,若同一化合物在 IC50 与表达数据中均能命中,说明主数据映射与数据产品契约有效;若出现化合物编号无法关联,应优先检查映射表版本与各领域数据产品的发布时间戳,而不是直接修改查询逻辑。这一判断依据来自分层架构提供的血缘记录:映射服务的每次变更都写入审计日志,可回溯到具体版本。