两个项目主要面向政企,感觉不太好写-_-
项目: 手机报警定位
业务需求
- 电话报警:手机拨打 110/120/119 时候获取报警人当下位置,并传输给公安/急救/消防
- 短信报警:发送短信到 12110 将短信内容推送到公安系统
- 微信小程序(广东 110/深圳 110):提交自助报警/视频通话,将警情分配给对应接警员
负责以下开发内容
- 负责系统架构/微服务设计/网络拓扑/容器化部署
-
使用 Java+SpringBoot 开发:
- Netty 开发 TCP 程序收集信令采集器上报的数据
- 对接手机厂商/运营商获取位置信息
- 开发接口供接处警系统(接警员)查询位置
-
使用 Python+FastAPI 开发:
- 数据统计
- SIP 网络抓包解析
- Prometheus 监控告警/飞书机器人提醒等
- 各种定制化需求
-
其他:
- CCE(Kubernetes)集群配置维护/VPN(Wireguard)搭建配置/等保 3.0/国产 arm 芯片/数据库/操作系统适配...
难点(短信加密): 手机没有开启 VoLET 时,通话会断网,只能用短信传输数据
- 短信存在长度限制 140byte
-
短信必须使用文本格式发送,bin 短信有很多问题
- 高通芯片 BUG 发送 bin 短信发送失败
- 运营商 2G 退网也会导致 bin 短信发送失败
-
文本短信有会涉及到 android 的短信编码问题
- 如\r\t\0 等等 chat 虽然是合法的 ascii 编码但不是合法的短信内容会被过滤
- 根据安卓中
SmsMessage.java中相关实现,绕过限制
- 可选的加密算法有限,如:AES 对称加密,密钥需要保持到手机侧不安全
难点(私有化部署): 项目需要同时在云端部署和客户本地私有化部署
- 云端:使用华为云的 CCE(Kubernetes),配置 Deployment+Service+Ingress 部署到华为云的 CCE 集群中
-
私有化部署:使用 Docker-Compose 部署
- 配置 Nginx 替代 K8S 中的 Service+Ingress
- 程序可以统一使用 service-name 通过 DNS 解析方式进行服务调用
难点(网络拓扑复杂): "互联网","公安网","政务网","IDC 机房"都是独立网络的,无法直接访问
- 使用 VPN(wireguard)串联互联网和政务网
- 使用 SSH 隧道串联互联网和 IDC 机房
-
互联网和公安网物理隔离的,需先将数据打包成文件上传到 FTP 中
- 互联网侧: 用 Python+FastAPI 写一个 HTTP 接口,收到数据后将 HTTP 报文打包成 txt 文件上传到 FTP 中
- 公安网侧: 用 Python 程序轮询 FTP,解析文件中 HTTP 报文,并在公安网内发起请求
难点(数据量大,统计困难): 项目后期数据超过 100 亿条,每个用户都需要进行数据报表,统计
- Java 中做基本 CRUD,写入到数据库(Mysql/Gauss/达梦/海量...)中
- 将数据库中数据同步到 Clickhouse,避免各种数据库之间语法差异
-
Python+FastAPI 开发统计程序,在 Clickhouse 进行统计查询并优化:
- 使用 Partition by 将数据按年月分区
- 使用 Order by 按照 user_id 进行排序
- 使用 LowCardinality/DubleDelta/Projection 等特性,优化 SQL 统计查询
项目:智慧油库
需求:
- 接入中石油全省加油站监控摄像头,进行高危预警和营销分析
难点:
- 摄像头多:一个省大致有 6000 个摄像头,平均需要 1000 个盒子,需要全部纳入 K8S 集群进行统一管理
- 网络复杂:加油站摄像头分布上各个地方,无法在 IDC 机房中直接接入
- 文件存储:视频文件需要长期存储,数据量大>100TiB
负责内容:
- 搭建 VPN(Wireguard)将智能盒子和 IDC 机房服务器联通起来
- 基于 VPN 搭建 Kubernetes,将所有服务器和智能盒子纳管到 K8S 中,进行运维部署
- 负责解决文件存储问题,搭建 Minio 集群(4 * 16 * 16T),存放图片和视频
- 使用 Python+Clickhouse 开发数据统计需求