系统设计练习 - 实时警员安全报警系统

系统要求和范围

背景:警员佩戴body camera

功能要求:

  1. 实时接收body cam视频流

  2. 自动检测危险事件

  • 枪支出现

  • 人员倒地

  • "help"等高危语音

  • 奔跑/追逐

  1. 2秒内向附近警员和dispatch center发出alert

  2. 所有视频必须被保存为legal evidence

  3. AI模型会持续迭代升级

  4. 全球数十万设备同时在线

非功能需求:

  1. 对危险响应近乎实时 - 2秒内

  2. 高可靠性 - 系统功能要高度available

  3. scalable

API设计

  • POST /camera/{id}/video:start - 和后端service打开视频

request body:

复制代码
{
    "camId": "abc"
}

response: 200OK. 如果是open视频的请求,在response里应该带有后端media service的address。在系统架构设计进行详细描述。

  • POST /camera/{id}/video:stop - 关闭视频

response:200OK.

  • POST /camera/{id}/status - 报告camera信息

    {
    "id": "abc",
    "location": {
    "lat": 123,
    "log": 456
    },
    "status": "normal"/"error"
    }

系统架构设计

对此系统架构进行说明:

  1. device通过API gateway向后端video service发送请求,要求建立video连接。video service通过edge service DB查询到相关edge service的信息返回给device。这一部分是信令传递,用来进行authentication和传递媒体流连接需要的信息。

  2. device和edge service建立媒体流连接,向edge service传递视频流。edge service将视频流存储到video storage。video processing service通过CDC感知新的媒体被创建,对其进行取样处理,并将样本的meta信息发送到video stream。

  3. FLINK job consume video 样本信息,通过inference service调用AI model对video sample进行处理。如果AI model返回了敏感信息,FLINK生成相关event,分别写入到event DB以便进行日后审查,和写入到event stream里。

  4. device通过connection gateway向后端update自己的location信息。indexing service consume设备的地点信息,并更新geoHash(由redis支持)。alert service在从stream获取event后,通过查询geoHash获取附近的device,并通过connection gateway向相关的device 发送通知。

讨论

在上面的设计里,我们讨论如下几点:

  1. 整体系统应该进行分区。这样每个区域内部的服务可以满足traffic的要求。

  2. 信令的建立和媒体流的建立是分开的,因为它们对时延和overload的要求完全不同。

  3. 和设备的连接由connection gateway单独维护。好处是可以让后端其他service变成stateless的,易于scale和failure recover。

  4. 基于地点查询由redis geoHash支持。在设备较多,地点比较大的情况下需要考虑增加shard和多个redis cluster。同时redis不是地点信息的source of truth,因为redis是基于memory的,信息一般不能持久。但是我们可以通过device location stream来重新建立geoHash。

  5. AI model 通过inference service调用,以便维护AI的独立升级和替换。

扩展讨论:

  1. 考虑到device在某些环境下网络可能不稳定,我们可以考虑在device端加入buffer。这样device在上传失败的情况下可以先保存在local buffer,然后在网络回复后再进行上传。

  2. 为了满足强实时性的要求,我们需要connection gateway和device之间保持connection。但是如果connection失败,connection gateway可以fallback到connectless的通信方式下。如果connectless通信仍然失败,connection gateway可以考虑增加queue或者buffer,然后多次尝试向设备发送相关通知。

  3. redis geoHash加入TTL以使offline的device自动从通知系统中删除。

相关推荐
数字新视界11 小时前
U位资产管理系统发布全面数字化监控解决方案
嵌入式硬件·物联网·系统架构·机房管理·动力与环境监控系统
zxcvb15314 小时前
医院容灾备份系统架构设计:从基础设施到恢复验证的三层实践
系统架构
老陈说编程17 小时前
1. 鸿蒙 (HarmonyOS) 2012 至 2026 年的发展历程
分布式·华为·个人开发·harmonyos·鸿蒙·鸿蒙系统·程序员创富
一切皆是因缘际会2 天前
掌控信息论:同源星际通信基础理论 上
人工智能·ai·系统架构·分布式系统·信息论·星际通信·物理计算机
RockHopper20252 天前
AI时代模型生命周期与软件资产重构:概要版
人工智能·系统架构·软件工程·ai编程·世界模型
zmsup2 天前
从运维需求到产品能力:OpsArk Agent 的运维智能平台架构设计思路
运维·系统架构·agent·智能体·运维智能平台
408高手3 天前
用例建模之详解用例和用例规约
系统架构
ly76893 天前
Redis 分布式锁的边界条件:Redlock 争议、锁续期与客户端崩溃后的互斥失效
数据库·redis·分布式·分布式锁·watchdog·redlock
要努力wow3 天前
系统架构师 —— 系统架构设计
系统架构