查看原文
其他

小小健康码背后的巨大“工程”


“您好,请出示您的健康码!”疫情时代下,健康码已经成为十几亿国人出行必不可少的“通行证”。
 
我们习惯了每一天的扫码、亮码,却少有人知道一枚健康码亮出的背后,究竟藏着哪些大工程和小秘密。
 
今天,我们便以广东健康码-“粤康码”为例,来探究一下健康码背后的防疫科技。
 
作为全国第一人口大省和流动人口最多的省份,广东省拥有1.26亿常住人口。粤康码作为广东省的粤康码,面对这一海量用户,即便在日常也是“高位运行”,一旦遇上疫情反复或春节等节假日,更是“高压运行”。

1秒亮码背后有哪些程序?


健康码虽然只是一枚二维码,却包含了丰富的数据信息。除包含必要的个人基本信息外,背后还关联着相关部门的权威数据,这些数据经后台比对和综合判断后形成“风险提示”,进行赋码,为公众提供本人防疫健康信息相关查询服务。
 
具体到粤康码,它主要包含三大信息:带颜色与醒狮标识的二维码码面信息、核酸检测信息及疫苗接种信息。当用户打开亮码页面时,前端页面向粤康码后台系统发送请求获取此三大信息并展示出来。


打开页面,发送请求——简单的8个字,实际上却跑了场“数据马拉松”。
 
粤康码系统采用了数据采集、数据清理、数据整合与数据交换等多种大数据技术,保障正常快速亮码:首先,使用数据采集技术,从多个数据源采集到用户的核酸检测信息、疫苗接种信息及防疫重点人员信息等;接着,使用数据清理技术,对采集到的信息进行处理,规范数据格式,过滤无效数据;然后,使用数据整合技术,将多来源的数据集中起来综合处理;最后,使用数据交换技术,将整合后的结果数据以服务接口或库表方式,提供给前端应用查询。
 
而仅是第一步的数据采集,背后又涉及到调用国办、公安、卫健等多个系统的数据接口,其中包括核酸信息获取接口、疫苗接种信息获取接口、码面颜色获取接口、证件信息核验接口等。
 
不仅是大数据技术,亮码的背后还有架构技术的支撑。
 
粤康码系统采用了多种架构技术保障正常快速亮码,以松耦合的方式进行架构设计,并在请求调用控制、服务降级、失效转移及系统缓存等多个层面进行优化,避免出现个别模块运行异常从而导致发生级联反应和雪崩效应,最终造成系统的整体崩塌。
 
例如,粤康码在系统设计层面就进行了分布式、高性能、高可用、易扩展的设计,这样一来,在系统遭受高流量、高并发的紧急情况下,可通过增加服务节点并将新节点加入原服务集群的方式快速扩容,从而提升系统的总体承载能力。
 
而作为亮码的“底线”和“生命线”,粤康码也采用了多种安全技术保障亮码的安全。
 
一是按照纵深防御理念,部署了抗DDOS系统、网络入侵防御系统、主机入侵检测系统等多个安全能力,为粤康码的安全稳定运行提供全链条的防护。二是粤康码建立了上线前安全测试机制,每一个版本迭代都经过专业的安全测试,确保无高风险漏洞方可上线,有效提升粤康码应用的安全性。三是在省政数局会同省委网信办、省公安厅、省通信管理局、国家互联网应急中心广东分中心等单位,建立了安全应急协同保障机制,加强安全情报共享,协同开展应急处置、攻击溯源和依法打击。

亮码“快准稳”究竟难在哪?


随着疫情防控进入常态化阶段,健康码由最初的个人防疫健康信息查询,逐渐被赋予了更多的功能,实现“一码集成”。
 
作为访问粤康码的主要终端之一,全国首个集成民生服务的微信小程序粤省事,原本就是一个民生服务的集合载体,其注册用户已超过1.5亿,累计上线服务事项超2100项,是全国服务最全、用户最多、活跃度最高的省级移动政务服务平台。而粤康码作为粤省事其中一项民生服务功能,去年在原有码面信息板块的基础上,逐渐叠加了核酸检测信息板块和疫苗接种信息板块,且码面信息还加上了颜色和醒狮标识,让用户使用起来更直观。
 
这种信息板块叠加,对于用户自身、现场防疫检控而言,防疫相关信息可一眼看尽,更加便捷省事。但对于健康码的技术人员,却是一次又一次的挑战,运维起来更加“提心吊胆”。
 
粤康码每增加多一个板块,就对亮码增加了多重压力。一是网络流量成倍增加,每多一个板块,意味着在亮码时就多请求多一个数据接口,成倍增加网络传输的流量,对网络带宽及服务器的处理能力带来挑战。为应对此挑战,在技术上必须保证系统的进出网络带宽足够容纳新增的流量,同时服务器的资源利用需保持在一个平稳运行的状态,防止出现由于接口请求过多导致服务器资源耗尽引发服务崩溃的后果。
 
二是需保证新增加的板块尽量与现存的板块保持服务独立,相互解耦,任意一个信息的获取异常不影响其他信息的获取。简单来说,比如粤康码核酸检测信息板块挂了,也不影响用户亮码或看疫苗接种情况。
 
怎么做到的?在技术上尽量做到服务部署在不同的机器上从而保证物理隔离,服务之间的调用保持独立,减少功能模块的依赖。在这方面,粤康码已经实现三大板块的互相解耦,从业务和技术层面对亮码流程进行异步处理,将码面颜色、核酸及疫苗查询的接口进行异步调用,相互独立,任意一个信息获取异常不影响另外两个信息的获取。
 
除了健康码叠加的“职能”越来越多外,赋码需要的防疫政策也随着疫情发展而随时调整。这一点主要体现在红黄码的研判上。红黄绿码的研判依赖多个来源的数据,包括确诊病例和无症状感染者数据、疑似病例数据、密切接触者数据、外省健康码重点人群数据、入境隔离人员数据等。在亮码时,粤康码后台系统将向多个数据源发送请求获取此类数据,然后综合多个数据源返回的结果,并根据特定的规则进行研判,从而判定用户的码面颜色。
 
换言之,但凡上述数据的计算规则有所变化,粤康码的颜色研判规则也会相应改变。


为什么健康码容易出故障?


健康码技术纵使千般好,也抵不上一次亮不出码带来的不便。自健康码问世以来,多地时不时上演健康码亮码异常等情况,轻则用户出行受阻、上班迟到,重则影响公共秩序和正常生活。为什么一枚小小健康码,频频崩溃?归根究底还是高并发访问的“锅”。
 
拿粤康码来说,虽然已经算得上国内比较稳定的省级健康码,但每次亮码不顺利,都与短时间内的高访问量挂钩。以2月最后一天粤康码亮码延迟作为例子来说吧。
 
今年2月初,因深圳疫情较为严峻,深圳市政府决定采用“粤康码公共场所打卡管理”功能,对深圳市物业小区和城中村的人员进行管理。经深圳市初步评估,全市共计有6000多个管理点。截至2月28日,深圳市已经创建公共场所超20万个,日打卡人次超2200万,每分钟超6万次(原先全省每日打卡人次仅300万次),打卡人次远超预期评估,突发流量对粤康码后台系统性能造成较大压力。
 
与此同时,上班早高峰是对粤康码性能考验最大的时候,一般主要集中在7:59、8:30 、9:00这三个时间点。以2月28日早高峰为例,7:59 访问量为168万/分钟,8:30为140万/分钟,9:00为132万/分钟,整体流量峰值一直维持在一个较高的水平。
 
从技术层面来看,粤康码作为复杂的高并发系统会有很多模块组成,同时也会依赖很多的组件和服务,系统间的调用最怕的就是延迟而非失败,因为失败通常是瞬时的,可以通过重试的方式解决。而一旦发生较大的延迟时,调用方就会出现阻塞,占用的资源得不到释放。当存在大量这种阻塞请求时,调用方就会因为资源耗尽而崩溃。
 
在出现流量异常时,粤康码系统便会采取限流和熔断措施来保护系统。通过系统接入层组件,对服务节点或接口进行请求流量限制,设置每秒能够接受的请求数。当请求数超出设定阈值时,将进行服务降级处理,防止后端系统出现雪崩现象。比如,粤康码系统为了防止全面崩溃,设置了130万/分钟的流量限制,一旦超过这个访问量,即可能出现某些用户刷不出来码的情况,但一般只要再刷多两次就能显示,这也保障了不会出现大规模故障。


—END—


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存