NineLabNineLab.ru
案例价格
联系我们
CASE STUDY
NDA · MedTech

诊所网络 MIS 审计与稳定化

原承包商解散、代码原样移交。六周内关闭 152-FZ 风险、消除早高峰数据库宕机,云成本几乎减半。

项目概况

一家联邦级私立诊所网络(数十家分院、数百名医生、每日数千次就诊)。Web 版 MIS(预约、电子病历、实验室与 1C 集成)由本地承包商开发约一年半。团队解散后源码无支持移交。高峰期系统迟缓,数据库偶发锁死,内部隐私审计也提出了问题。

接手前的痛点

云成本超预算

Yandex Cloud 约 32 万 ₽/月,业务期望约 18 万 ₽。

周一早高峰

打开患者卡片与医生排班超过 8 秒——医生抱怨“系统卡”。

数据库宕机

每月高峰时段约一次因锁导致库不可用,前台无法办理就诊。

风险与资金

同一时段重复预约、152-FZ/医密内部审计问题,以及 1C 支付同步错误导致重复入账。

六周后的结果

−48%

Yandex Cloud:32 万 → 16.5 万 ₽/月

0.6 秒

早高峰打开卡片 p95(原 8.2 秒)

152-FZ

复审内部审计通过

×4.5

CI/CD 加速:构建 18 → 4 分钟

审计时的技术栈

后端

主 API 为 FastAPI,后台与用户管理为 Django REST Framework。队列 RabbitMQ,后台任务 Celery。


Python 3.11
FastAPI
Django REST
RabbitMQ
Celery
前端

前台与医生端 Angular SPA,UI 基于 Angular Material。


Angular 16
TypeScript
Angular Material
数据与基础设施

业务数据 PostgreSQL,院长报表 ClickHouse。Yandex Cloud:托管 Kubernetes / PostgreSQL / Object Storage。CI 为 GitLab CE,监控 VictoriaMetrics + Grafana + EFK。


PostgreSQL 14
ClickHouse
Yandex Cloud
GitLab CI
VictoriaMetrics

审计发现

性能、152-FZ 合规与 DevOps 的关键问题。

架构与性能
  • 对 1C 的同步 requests.post() 阻塞 FastAPI 事件循环——1C 变慢则整个 API 停摆。

  • 患者列表 Django ORM N+1:100 行约 300+ 次数据库查询。

  • 无 PgBouncer:每请求新建连接,高峰触达 max_connections。

  • ClickHouse「医生负荷」报表 40 秒,绕过物化视图做全表扫描。

安全与 152-FZ
  • Kibana 明文记录姓名、医保单号与 ICD-10 诊断。

  • RBAC 仅在前端:医生可通过 API 读取同事排班与病历。

  • JWT 存 localStorage,易受 XSS 会话窃取。

基础设施与 DevOps
  • K8s 节点过度配置(16 vCPU / 64 GB),利用率 ≤20%。

  • 自研 Postgres cron 备份无告警——连续三周无可用副本。

  • Angular CI 构建约 18 分钟,无 node_modules 缓存且使用旧 Webpack。

我们做了什么

三个两周阶段:先安全与备份,再数据库与集成,最后容量与 CI。

阶段 1 · 安全、152-FZ、备份
第 1–2 周
  • FastAPI/Django 中间件掩码日志中的 SNILS、护照与姓名;更新 Fluentd 解析。

  • 硬性 RBAC:令牌中 doctor_id 校验对 patient_id 的访问(院长看全部,医生看自己的)。

  • JWT 迁至 HttpOnly / Secure / SameSite=Strict Cookie;Angular 拦截器自动带 Cookie。

  • 托管 PostgreSQL 备份至 Object Storage,服务端加密、30 天轮转;失败 Telegram 告警。

阶段 2 · 数据库与集成
第 3–4 周
  • 1C:httpx.AsyncClient + RabbitMQ 事件;Celery 指数退避——前台 UI 不再等待 1C。

  • select_related / prefetch_related 与针对性 RawSQL 消除 N+1。

  • Postgres 前部署 PgBouncer:Too many clients 消失。

  • ClickHouse 物化视图:医生报表 40 秒 → 0.8 秒。

阶段 3 · 基础设施与 CI/CD
第 5–6 周
  • 节点 right-sizing 至 8 vCPU / 32 GB;备份/日志盘改 network-hdd。

  • esbuild 替代 Webpack;GitLab CI 缓存 Docker 层与 node_modules:18 → 4 分钟。

  • VictoriaMetrics 看板与 RabbitMQ 队列深度告警——1C 故障早于患者投诉可见。

关键成效

  • 可预期的云支出

    按月度指标做虚拟机 right-sizing,高峰预约 SLA 不受损。

  • 稳定的早高峰

    异步 1C、连接池与 ORM 优化消除卡片卡顿与锁导致宕机。

  • 面向 152-FZ 的边界

    日志脱敏、服务端 RBAC 与安全会话关闭内部审计问题。

1C 重复支付降至零


备份按计划创建并加密


XSS 与水平越权已关闭

希望您的企业获得同样的结果吗?

让我们讨论您的项目并确定关键增长点。
讨论我的项目