2. 医疗业务负载特征建模

容量规划的第一步不是买机器,而是把“业务怎么用系统”翻译成“系统承受什么样的负载”。医疗业务与电商、社交最大的区别在于:它的请求由人的生理节律、医院的排班制度和临床流程共同驱动,而不是由营销活动或用户兴趣驱动。因此,医疗负载具有强周期性、强时段集中性和强流程耦合性。本节按场景拆解请求模式、峰值规律与数据增长模型,为后续的容量计算提供输入。

一、五类核心场景的请求模式

门诊挂号是典型的“脉冲型”负载。它的请求量并不均匀:号源通常在放号时刻(如每日 7:00 或 8:00)集中释放,形成秒级尖峰;就诊当日 7:30–9:30 又出现一次现场取号、签到、缴费的次高峰。挂号请求本身很轻(一次查询加一次写号),但存在强一致性竞争——同一号源被多人同时抢,数据库行锁与乐观锁冲突会放大响应时间。建模时应关注“并发抢号数”而非“日均挂号量”。

住院医嘱是“长事务、低频次、高关联”负载。医生查房后集中开立医嘱,时间集中在 8:00–11:00 和 14:00–16:00。单条医嘱写入会触发药品库存校验、费用预扣、护理任务生成、检验申请联动等多个下游动作,属于典型的扇出型写放大。它的峰值不体现在 QPS 上,而体现在单请求的处理链路长度和数据库事务持有时长上。

检验检查分为“申请”和“报告回传”两个方向。申请由医嘱驱动,与住院/门诊高峰同步;报告回传则由检验科、影像科的批量上机节奏决定,常在上午 10:00–12:00、下午 15:00–17:00 出现批量写入。LIS 仪器接口常以 HL7 消息推送,单批可达数百至数千条,属于批量突发型负载。

影像调阅是“大带宽、长连接、读多写少”负载。PACS 影像单次调阅动辄几十到几百 MB,请求数不高但网络吞吐极高。门诊医生站、住院医生站、影像科诊断工作站会在早交班后集中调阅,形成带宽峰值。它的容量瓶颈通常不在应用服务器 CPU,而在存储 IOPS、PACS 网关并发连接数和院内网络带宽。

互联网问诊是“晚高峰、会话型、弹性大”负载。患者下班后 19:00–22:00 是咨询高峰,图文问诊表现为长轮询或 WebSocket 会话,视频问诊则叠加实时音视频流。它与院内业务高峰在时间上错开,但会与医院夜间批处理(如日结、报表)争夺数据库和网络资源。

医疗业务负载特征:请求模式 · 峰值时段 · 资源瓶颈 0:00 6:00 8:00 12:00 16:00 20:00 24:00 门诊挂号 脉冲型 · 强一致性竞争 放号尖峰 现场取号 瓶颈:号源行锁 / 数据库写冲突 住院医嘱 长事务 · 扇出型写放大 查房开嘱 下午开嘱 瓶颈:事务链路长度 / 库存与费用联动 检验检查 批量突发 · HL7 消息推送 报告回传 批量上机 瓶颈:消息队列积压 / 批量写入 影像调阅 大带宽 · 长连接 · 读多写少 早交班调阅 诊断阅片 瓶颈:存储 IOPS / PACS 网关并发 / 院内带宽 互联网问诊 晚高峰 · 会话型 · 弹性大 19:00–22:00 瓶颈:WebSocket 连接数 / 音视频带宽 / 夜间批处理争抢 横轴为一天 24 小时;色块宽度示意该场景请求集中的时段范围

二、峰值规律:三类叠加

把五个场景放到同一条时间轴上,可以看到医疗负载的峰值来自三类叠加。

第一类是制度性尖峰。放号时刻、日结时刻、报表生成时刻由制度规定,时间点固定、可预测,但瞬时强度极高。这类峰值适合用“定时扩容 + 限流排队”应对,例如放号前 5 分钟预启动应用实例,并对抢号请求做令牌桶限流。

第二类是流程性高峰。早交班后的查房开嘱、门诊开诊后的挂号缴费、检验上机后的报告回传,都跟随临床流程出现。它们持续时间较长(1–3 小时),是容量规划的主要依据。经验上,门诊挂号峰值 QPS 约为日均 QPS 的 8–15 倍,住院医嘱峰值约为日均的 5–8 倍,影像调阅峰值带宽约为日均的 6–10 倍。这些倍数属于示例性经验区间,实际应以本院历史监控数据拟合。

第三类是随机性突发。急诊批量伤员、突发公共卫生事件、体检团检集中到院,都会在短时间内把请求量推高数倍。这类峰值无法精确预测,只能通过弹性伸缩和降级预案兜底。

建模时建议同时记录三个量:日均请求量、峰值 QPS、峰值持续时长。只写“日均 10 万次”无法支撑容量决策,因为 10 万次若集中在 30 分钟内,与均匀分布在 24 小时,对系统的要求相差一个数量级。

三、数据增长模型

医疗数据增长不是线性的,而是“结构化数据缓增、非结构化数据快增”。挂号、医嘱、费用等结构化记录年增长通常在 20%–40%;而影像、检验原始数据、互联网问诊的图文与音视频,年增长可达 50%–100% 甚至更高。影像数据尤其突出:一次 CT 检查约 200–500 MB,一次 MR 约 100–300 MB,一家日检查量 800 人次的医院,仅影像年新增就可能达到 60–120 TB。

因此数据增长模型应分三层建立:在线热数据(近 3–6 个月,需高性能存储)、近线温数据(6 个月至 2 年,可接受秒级调阅延迟)、离线冷数据(2 年以上,归档到低成本对象存储)。容量规划要分别给出三层的增长曲线和迁移策略,而不是只算一个总容量。

四、把特征转成建模输入

完成上述分析后,应形成一份可计算的负载模型,至少包含以下字段,供后续容量计算直接引用:

场景请求模式峰值时段峰值倍数(示例)主要资源瓶颈
门诊挂号脉冲型、强一致7:00 放号、7:30–9:308–15×数据库写冲突、号源锁
住院医嘱长事务、扇出写8:00–11:00、14:00–16:005–8×事务链路、库存费用联动
检验检查批量突发10:00–12:00、15:00–17:00批次驱动消息队列、批量写入
影像调阅大带宽、长连接8:00–10:006–10×存储 IOPS、网关并发、带宽
互联网问诊会话型、晚高峰19:00–22:004–8×连接数、音视频带宽

需要强调的是,表中的峰值倍数只是用于教学演示的示例区间,真实建模必须用本院 APM、网关日志和数据库慢查询日志做分位数统计,至少取 P95 与 P99,而不是平均值。只有把“业务节律”量化成“请求曲线”,容量规划才有可靠的起点。