文章目录
  1. 1. 一、主要功能
    1. 1.1. 民众用户
    2. 1.2. 采样员
    3. 1.3. 检测员
    4. 1.4. 客服
    5. 1.5. 系统管理员
  2. 2. 二、技术要求
  3. 3. 三、技术架构
    1. 3.1. 分层架构
    2. 3.2. 数据流图
    3. 3.3. 逻辑架构

声明:本人从未参与任何健康码系统的开发,此文是我基于自己对健康码的使用,相关新闻的阅读,按我自己的理解,整理出来的文章。如果跟某些系统有技术上的相似,纯属巧合。

摘要: 本文尝试从一个旁观者的身份,设计一个省的健康码系统。讲述一个健康码系统包含的主要功能,主要流程。技术上讲述 技术要求,技术架构,流程设计,安全处理,并发处理。 希望能通过一个相对完整的技术文档,给自己一个纸上谈兵的机会,给各位一个参考。

正文: 随着新冠疫情的发展,各省市都建设了配套的健康码系统和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万次每秒。

昨天晚上,沙瑞金书记托梦给我,通知我已经中标汉东省健康码系统的项目,所以我赶紧开始写文档。

一、主要功能

健康码系统使用人分为五类:民众用户,采样员,检测员,客服,系统管理员。

  1. 民众用户指普通民众,即生活在汉东省的所有人,需要通过健康码系统完成查看健康码,查看核酸码。
  2. 采样员指为普通民众进行核酸采样的工作人员,需要通过扫描 普通用户出示的健康码,登记录采样信息。
  3. 检测员指对核酸样本进行检查的工作人员,需要通过扫描采样管上的二维码登记核酸检测结果。
  4. 客服指对健康码异常情况进行处理的工作人员,负责接听民众的申诉,核实信息,按需要调整健康码状态。
  5. 系统管理员指能创建各种工作人员账号,分配想着权限的工作人员。

接入终端包括:

  1. 健康码APP,给民众用户使用, 民众可以使用健康码APP查看自己的健康码,核酸码,核酸记录。
  2. 健康码微信小程序,给民众用户使用,功能同健康码APP。
  3. 健康码支付宝小程序,给民众用户使用,功能同健康码APP。
  4. 采样APP,给采样员使用,采样员通过采样APP完成扫码登记采样。
  5. 健康码web管理系统,给检测员,客服,系统管理员使用。

民众用户

  1. 民众用户能通过手机号验证码或用户名密码登录健康码APP。
  2. 民众用户能通过健康码APP查看健康码
  3. 民众用户能通过健康码APP查看核酸码,提供给采样员扫码完成核酸采样登记
  4. 民众用户能通过健康码APP查看核酸检测记录,检测结果

采样员

  1. 采样员能通过手机号验证码或用户名密码登录采样APP。

  2. 采样员能通过采样APP完成检测试管条形码扫码登录,完成民众用户的核酸码扫描登记

    检测员

  3. 检测员能通过用户名密码登录健康码web管理系统

  4. 检测员能通过扫描检测试管条形码登记检测结果

  5. 检测员能批量登记检测结果

客服

  1. 客服能通过用户名密码登录健康码web管理系统
  2. 客服能通过姓名,身份证号码查询民众用户,查看其核酸记录,异常记录
  3. 客服能给特定民众用户设定标记,标记为红码或黄码,需要记录异常原因
  4. 客服能给特定民众用户解除标记,标记为绿码,需要记录异常解除原因

系统管理员

  1. 客服能通过用户名密码登录健康码web管理系统
  2. 系统管理员能添加 采样员, 检测员,客服 和系统管理员

更多详细功能描述请参考《汉东省健康码系统需求规格说明书》。

二、技术要求

  1. 高可用性要求,时间可用性需要达到99.95%, 即年累积不可用时间不得超过285分钟,月累积不可用时间不得超过24分钟。
  2. 高并发要求,对于民众用户的查看健康码和核酸码的请求,需要支持 4.6万次/秒的高峰请求,1分钟280万次。按已知的峰值的2倍设计。
  3. 低延迟要求,对于民众用户的查看健康码和核酸码的请求,99.9%的请求都应当于2秒内响应。即通常情况下用户点击查看健康码,应当在2秒内能正常显示健康码。
  4. 数据防篡改要求,核酸记录一旦录入,不能被随意更改。
  5. 数据备份要求,应当建立完备的数据备份机制,保证数据得到完整快速的备份,防止数据丢失。
  6. 审计要求,系统应该详细记录核酸采样过程,包括但不限于哪位采样员,在什么时间,什么地点对哪位民众进行了采样;哪位检测员,在什么时间,会么地点对哪些样本进行了检测,检测结果是什么。
  7. 审计要求,系统应该详细记录健康码变化过程,包括但不限于哪位客服,在什么时间,对哪位民众进行了健康码变更;记录变更结果及变更原因。
  8. 实名认证要求,系统的服务要求对姓名和身份证号码做实名认证。因为认证工作量巨大,需要支持人脸识别,完成自动实名认证。
  9. 离线支持,由于采样时可能遇到的网络问题或者并发问题,核酸码需要支持离线截图使用。保证采样过程顺畅。
  10. 离线支持,出于保证采样顺畅的保证,允许采样APP短暂离线,即采样APP能够在无网络的情况下完成扫码登记,联网后能自动上传采样记录。保证在网络不稳定的情况下也能正常采样。界面上未同步的数据应当有明显的标识提示。

三、技术架构

分层架构

终端层 终端层的说明请参考本文 一、主要功能中的 接入终端 接入层 接入层是指网络及接入中间件,终端通过接入层访问服务层。

  1. CDN,CDN主要用于静态文件的缓存,缓解源站压力,同时提高终端的访问速度
  2. K8S容器,K8S容器用于装载服务层的微服务,使得维护与扩容变得更可靠便利。
  3. VPN,通过VPN建立虚拟专用网络,防止外部人员非法访问
  4. 堡垒机,堡垒机保证系统维护过程可追踪,可审计

服务层 服务层是指业务的代码实现层,主要业务逻辑代码均在服务层实现。服务层通过微服务技术实现。

  1. CodeQueryService 提供查询核酸码,健康码,核酸记录功能
  2. SampleService 提供采样登记功能
  3. UserService 提供用户登录,实名认证功能
  4. ManageService 提供审计,用户管理,异常申诉功能

存储层 存储层是指数据存储实现层,主要通过使用开源中间件,实现数据的持久化存储,及缓存实现。

  1. Redis 用于缓存用户健康码及核酸码内容
  2. MySQL 用于存储用户信息,健康码状态
  3. Clickhouse 用于存储核酸记录,健康码变更记录
  4. Elastic Search 用于存储系统日志信息
  5. OSS 用于存储用户上传的图片或文件。

外部服务层 外部服务层指系统依赖的第三方服务

  1. 支付宝实名认证,支付宝提供的实名认证服务
  2. 微信实名认证,微信提供的实名认证服务

数据流图

逻辑架构

未完待续

文章目录
  1. 1. 一、主要功能
    1. 1.1. 民众用户
    2. 1.2. 采样员
    3. 1.3. 检测员
    4. 1.4. 客服
    5. 1.5. 系统管理员
  2. 2. 二、技术要求
  3. 3. 三、技术架构
    1. 3.1. 分层架构
    2. 3.2. 数据流图
    3. 3.3. 逻辑架构