技术解读
Resgrid/Core 深度技术分析:把应急调度中心搬进开源世界
项目背景与痛点
在消防、EMS(院前急救)、山地搜救和大型企业应急办的日常里,真正决定响应效率的往往不是装备,而是一套 Computer Aided Dispatch(CAD)系统。它要在几秒内完成接警录入、按地理围栏和单元状态推荐可用车组、派单、跟踪车辆与人员状态、记录时间戳,并在事后生成可审计的报告。
传统方案里,这一环节长期被两类产品占据:一类是单价六位数美元起、实施周期以年计的封闭商业 CAD;另一类是“电台 + 白板 + 纸质记录 + Excel”的手工流程。前者中小型志愿消防队和民间搜救队根本承担不起,后者在多点并发时必然丢信息,且完全无法回答“这辆车几点几分到场”这类合规问题。
Resgrid/Core 想解决的正是这个断层:用一套开源的多租户平台,把 CAD、人员与班次管理、AVL(自动车辆定位)和应急通信整合到同一个领域模型里,并且以 SaaS(Resgrid.com)的方式验证过生产可用性。它不是 demo 项目,而是长期在真实应急场景里迭代出来的系统。
核心技术揭秘
从仓库形态看,Core 是一个典型的“单体应用 + 前后端分离”结构:ASP.NET Core 承载 Web API 与 MVC 页面,前端采用 SPA 形式消费 REST 接口,数据层基于 EF Core,默认绑定 SQL Server,并用 Redis/内存缓存做热点数据加速。仓库中同时存在 Web 与 Worker 两个入口——这个拆分是理解本项目架构的关键。
真正值得关注的是它的事件驱动解耦。一次派单会同时触发实时状态推送、短信/邮件/App Push 通知、班次记录更新和审计日志落库。如果这些全部塞进 HTTP 请求里同步完成,调度员点击“派发”后会明显卡顿,而应急场景对延迟极其敏感。Core 的做法是:业务服务只负责状态迁移与领域校验,随后把变更投递到队列,由 Worker 后台进程异步消费,再分发给通知适配层与 SignalR 推送通道。
第二层设计是多租户与权限模型。Department 是整个数据模型的租户根节点,几乎所有实体都携带 DepartmentId,配合 EF Core 的全局查询过滤器与基于 Claims 的角色鉴权(管理员、调度员、普通成员),实现部门级数据隔离。这比“给每张表加 where 条件”可靠得多,也让一套部署可以同时服务多个机构。
第三层是状态机式的领域约束。单元(Unit)和人员(Personnel)的状态并非自由字符串,而是 Idle → Dispatched → EnRoute → OnScene → Transporting → AtHospital → Returning 这类受控流转,后端会校验合法迁移。这正是 CAD 系统区别于普通工单系统的核心:状态即事实,事实即合规记录。
AVL 部分则是一个高频写入的时间序列场景:移动端按周期上报经纬度、航向、速度,服务端持久化并叠加地理围栏判定,车辆进入/离开站点时自动触发状态提示。设计难点不在存储,而在于上报频率、电池与流量成本、以及地图回放查询性能之间的取舍。
功能亮点与差异
一是闭环完整度。多数开源调度类项目只做到“派单 + 地图”,Resgrid 则把人员资质、班次签到、物资库存、自定义表单报告、群组消息一并纳入同一租户模型,调度员不必在五个系统之间切换。
二是通知渠道的适配层抽象。短信、邮件、推送、语音呼叫被抽成独立 Provider,主仓库不绑定单一供应商,这对预算敏感、需要自选本地运营商的团队非常友好。
三是开源与 SaaS 双轨。代码开源的同时官方持续运营商业化实例,意味着主干分支天然承受真实流量,而不是写完就烂尾。需要提醒的是,其许可证属于 AGPL 系强 copyleft,二次分发或提供网络服务前务必核对仓库 LICENSE 与法务意见。
应用场景与落地建议
它最适合中小型志愿消防队、民间搜救组织、园区/港口/化工企业的应急响应中心,以及希望自建而非采购商业 CAD 的集成商。
落地时有几点务必注意:
- 先跑通 Worker。很多人只启动 Web 就以为部署完成,结果通知全无、实时推送失效——队列与后台进程是架构的一半。
- 缓存与队列要外置。单机内存缓存只适合验证,多实例部署必须切到 Redis 与独立消息中间件。
- 弱网是常态。山区与地下室信号中断时,移动端需要本地缓存与断点补传,AVL 数据要允许乱序到达并按时间戳归并。
- 数据合规。人员健康信息、位置轨迹属于敏感数据,需要加密存储、访问审计与保留策略,这在开源版本里要自己补齐。
- 体量预期。代码库规模不小,二次开发前先摸清 Model / Services / Providers 的分层边界,避免把业务逻辑写进 Controller。
综合评价
优点:领域模型经真实应急业务打磨,状态机与多租户设计成熟;事件驱动解耦让交互延迟可控;功能覆盖面在开源 CAD 中几乎没有对手;有商业实例背书,长期可维护性优于多数同类项目。
缺点:单体架构与 EF Core + SQL Server 的强绑定限制了横向扩展自由度;前后端技术栈经历过多年迭代,存在风格不一致的历史代码;文档与自动化测试覆盖不足,新人上手曲线陡峭;AGPL 许可证对商业闭源集成不友好。
一句话总结:如果你的团队需要一套“能真跑起来”的开源应急调度内核,Resgrid/Core 是目前最接近生产级的选项;但请把它当作一个需要认真运维与二次加固的平台,而非开箱即用的成品。




评论