汉东省健康码系统设计说明书(撰写中)
声明:本人从未参与任何健康码系统的开发,此文是我基于自己对健康码的使用,相关新闻的阅读,按我自己的理解,整理出来的文章。如果跟某些系统有技术上的相似,纯属巧合。
摘要: 本文尝试从一个旁观者的身份,设计一个省的健康码系统。讲述一个健康码系统包含的主要功能,主要流程。技术上讲述 技术要求,技术架构,流程设计,安全处理,并发处理。 希望能通过一个相对完整的技术文档,给自己一个纸上谈兵的机会,给各位一个参考。
正文: 随着新冠疫情的发展,各省市都建设了配套的健康码系统和APP。一开始只是能查看健康码(绿码,黄码,红码),后来再支持了核酸码,同时健康码上能查看核酸信息。 尽管亮码看起来很简单,但还是发生过不少事故;2022年9月1日开始,成都开始进入“静默模式”,市民按要求开始有序做核酸检测,目标是全市2000万人每天核酸检测一次。但9月2日、3日,成都核酸检测系统出现崩溃的情况,导致一天一检并不顺利。2021年12月20日,西安“一码通”崩溃;2021年12月25日,天津健康码出现异常。2022年1月粤康码公告显示,10日上午8:31平台检测到粤康码流量异常增大,最高达每分钟140万次,超出承载极限,触发系统保护机制,导致部分用户访问粤康码缓慢或异常,运行保障团队紧急处置,于9:04部分缓解,9:56完全恢复顺畅运行。 上面是基于部分新闻报道的整理,说明健康码系统容易出故障,而且一旦出现故障对民众的生活都会造成较大影响,很容易就民怨沸腾。坦白讲又有多少人真的处理过1分钟140万次请求呢,按秒来算就是2.3万次每秒。
昨天晚上,沙瑞金书记托梦给我,通知我已经中标汉东省健康码系统的项目,所以我赶紧开始写文档。
一、主要功能
健康码系统使用人分为五类:民众用户,采样员,检测员,客服,系统管理员。
- 民众用户指普通民众,即生活在汉东省的所有人,需要通过健康码系统完成查看健康码,查看核酸码。
- 采样员指为普通民众进行核酸采样的工作人员,需要通过扫描 普通用户出示的健康码,登记录采样信息。
- 检测员指对核酸样本进行检查的工作人员,需要通过扫描采样管上的二维码登记核酸检测结果。
- 客服指对健康码异常情况进行处理的工作人员,负责接听民众的申诉,核实信息,按需要调整健康码状态。
- 系统管理员指能创建各种工作人员账号,分配想着权限的工作人员。
接入终端包括:
- 健康码APP,给民众用户使用, 民众可以使用健康码APP查看自己的健康码,核酸码,核酸记录。
- 健康码微信小程序,给民众用户使用,功能同健康码APP。
- 健康码支付宝小程序,给民众用户使用,功能同健康码APP。
- 采样APP,给采样员使用,采样员通过采样APP完成扫码登记采样。
- 健康码web管理系统,给检测员,客服,系统管理员使用。
民众用户
- 民众用户能通过手机号验证码或用户名密码登录健康码APP。
- 民众用户能通过健康码APP查看健康码
- 民众用户能通过健康码APP查看核酸码,提供给采样员扫码完成核酸采样登记
- 民众用户能通过健康码APP查看核酸检测记录,检测结果
采样员
采样员能通过手机号验证码或用户名密码登录采样APP。
采样员能通过采样APP完成检测试管条形码扫码登录,完成民众用户的核酸码扫描登记
检测员
检测员能通过用户名密码登录健康码web管理系统
检测员能通过扫描检测试管条形码登记检测结果
检测员能批量登记检测结果
客服
- 客服能通过用户名密码登录健康码web管理系统
- 客服能通过姓名,身份证号码查询民众用户,查看其核酸记录,异常记录
- 客服能给特定民众用户设定标记,标记为红码或黄码,需要记录异常原因
- 客服能给特定民众用户解除标记,标记为绿码,需要记录异常解除原因
系统管理员
- 客服能通过用户名密码登录健康码web管理系统
- 系统管理员能添加 采样员, 检测员,客服 和系统管理员
更多详细功能描述请参考《汉东省健康码系统需求规格说明书》。
二、技术要求
- 高可用性要求,时间可用性需要达到99.95%, 即年累积不可用时间不得超过285分钟,月累积不可用时间不得超过24分钟。
- 高并发要求,对于民众用户的查看健康码和核酸码的请求,需要支持 4.6万次/秒的高峰请求,1分钟280万次。按已知的峰值的2倍设计。
- 低延迟要求,对于民众用户的查看健康码和核酸码的请求,99.9%的请求都应当于2秒内响应。即通常情况下用户点击查看健康码,应当在2秒内能正常显示健康码。
- 数据防篡改要求,核酸记录一旦录入,不能被随意更改。
- 数据备份要求,应当建立完备的数据备份机制,保证数据得到完整快速的备份,防止数据丢失。
- 审计要求,系统应该详细记录核酸采样过程,包括但不限于哪位采样员,在什么时间,什么地点对哪位民众进行了采样;哪位检测员,在什么时间,会么地点对哪些样本进行了检测,检测结果是什么。
- 审计要求,系统应该详细记录健康码变化过程,包括但不限于哪位客服,在什么时间,对哪位民众进行了健康码变更;记录变更结果及变更原因。
- 实名认证要求,系统的服务要求对姓名和身份证号码做实名认证。因为认证工作量巨大,需要支持人脸识别,完成自动实名认证。
- 离线支持,由于采样时可能遇到的网络问题或者并发问题,核酸码需要支持离线截图使用。保证采样过程顺畅。
- 离线支持,出于保证采样顺畅的保证,允许采样APP短暂离线,即采样APP能够在无网络的情况下完成扫码登记,联网后能自动上传采样记录。保证在网络不稳定的情况下也能正常采样。界面上未同步的数据应当有明显的标识提示。
三、技术架构
分层架构
终端层 终端层的说明请参考本文 一、主要功能中的 接入终端 接入层 接入层是指网络及接入中间件,终端通过接入层访问服务层。
- CDN,CDN主要用于静态文件的缓存,缓解源站压力,同时提高终端的访问速度
- K8S容器,K8S容器用于装载服务层的微服务,使得维护与扩容变得更可靠便利。
- VPN,通过VPN建立虚拟专用网络,防止外部人员非法访问
- 堡垒机,堡垒机保证系统维护过程可追踪,可审计
服务层 服务层是指业务的代码实现层,主要业务逻辑代码均在服务层实现。服务层通过微服务技术实现。
- CodeQueryService 提供查询核酸码,健康码,核酸记录功能
- SampleService 提供采样登记功能
- UserService 提供用户登录,实名认证功能
- ManageService 提供审计,用户管理,异常申诉功能
存储层 存储层是指数据存储实现层,主要通过使用开源中间件,实现数据的持久化存储,及缓存实现。
- Redis 用于缓存用户健康码及核酸码内容
- MySQL 用于存储用户信息,健康码状态
- Clickhouse 用于存储核酸记录,健康码变更记录
- Elastic Search 用于存储系统日志信息
- OSS 用于存储用户上传的图片或文件。
外部服务层 外部服务层指系统依赖的第三方服务
- 支付宝实名认证,支付宝提供的实名认证服务
- 微信实名认证,微信提供的实名认证服务
数据流图
逻辑架构
未完待续