十亿人都在用的健康码,运维体系是怎么设计的?

news2024/11/16 16:02:09

b4592a04435429a17a5d500d9dc58f2d.gif

导读|随着疫情防控模式的迭代,健康码访问DAU逐渐趋于下跌,意味着健康码将逐步完成历史使命,见证着疫情的结束。本文特邀腾讯研发工程师李雄政将从技术架构、可观测体系、运营保障体系等运维体系多方面,总结回顾健康码业务运营过程中的保障技术手段。


22563b14579092596da5ad196b968ec2.png业务背景

疫情三年,奥密克戎已是强弩之末,疫情终将过去。历经数个阶段的迭代,腾讯健康码产品服务于十余个省份的居民,数亿用户、数百亿次亮码。有效助力保障公共卫生安全。全国健康码共累计PV2k多亿,亮码1k多亿,最大省份的健康码用户量超过1亿,DAU过千万。

随着疫情防控模式的迭代,健康码访问DAU逐渐趋于下跌,意味着健康码将逐步完成历史使命,淡出历史舞台。本文就曾经在健康码业务运营过程中的保障技术手段进行了回顾,欢迎有兴趣的读者在评论区一起探讨。

df4347ff8fd7f21ce6e81e2b5ec31818.png

技术架构体系

一个稳定的架构是设计与运维出来的,为了达到稳态运行,设计上考虑了以下几个方面:

1)选用合适的云原生产品

健康码本身是要求高可用、高并发的应用,为了满足业务稳定上线、快速上线的需求,我们采用了腾讯云的公有云/私有化产品解决方案。以下是健康码上线时碰到的几大类问题:

  • 带宽容量问题

由于系统需要大容量的承载能力,导致地方政务云资源供给能力不足。表现如公网出口防护能力不足(如经常性面对境外DDOS攻击/CC攻击),IDC出口设备每秒新建连接数不够等。我们采用了DDoS高防包/waf/ecdn等方案来满足。DDoS高防包与Waf产品有效抵挡住境内外的DDoS攻击、Web攻击、入侵、漏洞利用、挂马、篡改、后门、爬虫等网站及 Web 业务安全防护问题;ECDN产品通过静态资源缓存有效降低混合云场景下政务云入口新建连接数、带宽。也提升了用户的访问体验。

  1. 开发及部署效率问题

疫情的需求迭代较快,如果从头开始开发产品,时间上不允许。腾讯云TCB产品做为一站式云原生解决方案,更加贴近小程序/Web 应用开发场景,使开发人员能快速构建完整项目、针对场景快速优化定制且集中管理,各产品间无需耗费时间精力分别配置与打通,无需切换多款云产品的控制台进行使用。

  • 云资源成本问题

云产品拥有较大的共享资源冗余,能够快速达成大容量,同时深度采用云原生产品,能够带来较大程度的成本节约。例如采用scf云函数,无需在购买云服务器的情况下运行代码,使用腾讯云的能力弹性、安全地运行代码。无需冗余资源闲时运行成本买单,同时因为云原生产品具有天然的跨可用区容灾能力,基于云原生的两地三中心架构设计,基于腾讯云公有云通常可以满足的高可用能力如:从负载层采用CLB的跨可用区高可用能力进行可用区容错;应用层TSF/TKE/CKAFKA的多可用区高可用能力容错;存储层采用TDSQL多可用区部署及主从同步能力满足高可用与容灾。

2)立体化监控体系设计

完整的监控体系,对提升系统SLA有非常重要的作用。一方面监控系统具有提前业务事件预警能力。最有效的监控体系能在业务发生故障前有效预警,从而知会SRE提前介入处置,防止事件扩大成故障,从而降低高故障数量。另一方面在发生故障后,能够评估故障影响程度、有效追踪异常点,引导技术人员介入处置,提升系统故障恢复SLA。

3)系统压力测试、混沌工程、应急预案等多方面检验

随着业务系统逐渐趋于成熟,要保障常规运行过程中的稳定性, 需要周期性保持对系统的应急演练工作。一方面通过压力测试、破怀性测试来检验系统的承受能力。另一方面通过这些演练来检验运维人员团队在面对业务事件时的响应质量、处置预案是否成熟与合规。

2fa5c354f411eba37ef33f26c98a7c23.png可观测体系

可观测能力做为基础技术能力,在健康码运维中是不可缺少的一部分。优秀的可观测体系能够帮助业务及时、准确地发现故障,亦能在故障诊断过程中追根溯源,及时协助问题定位、从而加速故障恢复。

健康码产品基于腾讯云PAAS产品构建,系统的可观测点一般可基于以下能力构建:首先,采用了腾讯云waf/ 腾讯智能网关/腾讯云tke等做为基础组件。这些组件都能够输出标准化日志,我们对日志进行清洗、汇聚,从而可获得各种可观测的metrics。其次,前端埋点。有助于监控前端用户体验,发现资源加载慢、API接口超时、成功率低等问题。最后,组件自身的监控系统,采用公有云API、 telegraf input、 prometheus exporter等方式对组件自身的健康情况做好监控。

901c17e6c94017eeb392479b6b131c10.png

5ed6f990bea86e7c692d93d96d5fdc16.png

1)基础组件可观测

对于基础组件来说,我们需要知道各组件的运行状态、容量性能情况等。基础组件可观测选型较多,相对私有云来说,公有云具有较好的可观测生态。以腾讯云为例,公有云除了提供较好的dashboard 与告警能力外, 基于API V3构建的开源生态亦比较丰富,可使用grafana plugin 和prometheus qcloud exporter进行观测,方便与prometheus / grafana 进行集成对接。

7d126d55112dd2f7a0377a260d5a4271.png

a30eb9b5a2414bc8eb6d36c80f16906b.png

需要特别说明的是由于原生监控指标较少,服务器数量较多时,监控原生api可能无法满足高额拉取频率要求,我们可以采用开源手段进行监控,比如自行部署 node exporter, 由prometheus 自行抓取与监控。

2)业务指标可观测

根据业务指标的重要程度,我们会针对关键指标如亮码、核酸、疫苗接口相关业务指标进行观测。对各种接口监控好,我们就可以有效保障系统整体质量,监控的指标包括各接口业务量、成功率、平均耗时、95分位耗时等。

  • 业务量监控

从Log中分解出相应的URL,分时间/URL  Count 数量即可获得业务量 metrics, 业务量的监控有阈值监控、同环比、动态阈值监控等。

  • 成功率监控

成功率表示的是成功请求量占总请求量百分比,从Log中很容易区分出异常返回码,从而计算出成功率。一般采用阈值监控 。

  • 耗时监控

耗时监控表示的是业务整体耗时,每一笔耗时在日志中均有记载,可采用平均值或p95耗时监控,一般采用阈值、无阈值监控等方法进行监控。

常用的日志处理手段有ElasticSearch / 腾讯云CLS等。

3)用户体验可观测

  • 前端监控

我们在健康码项目中使用的监控工具是腾讯云RUM监控(Real User Monitoring), RUM监控的便捷之处在于对业务代码的侵入性较少,只需新增数行代码。能够监控到前端JS错误、白屏、首屏打开速度、API成功率、API耗时等。

import Aegis from 'aegis-mp-sdk';


const aegis = new Aegis({
  id: "pGUVFTCZyewxxxxx", // 项目key
  uin: 'xxx', // 用户唯一 ID(可选)
  reportApiSpeed: true, // 接口测速
  spa: true, // 页面切换的时候上报 pv
});

代码示例:RUM监控接入方法及为简单方便。

77b0f253f12cfe3b160fbc1a4367633c.png上图是前端监控数据总览视图,有助SRE第一时间了解整体用户体验数据。

0f252308d3f7c2ae4150e7f3ff02552f.png

上图是某健康码业务前端调用后端API成功率。

API监控功能有助于SRE了解后端API性能,在后端成功率、耗时(如95分位,平均耗时)有波动时,可以有效下钻分析并联合后端进行排查。由于健康码内部引用了大量的外部接口,在实际应用中,我们通常采用此方法第一时间发现第三方系统接口耗时波动,并及时联系第三方接口后端进行处理。

50303e1b8bbdf6fd8dd0ab90399df71a.png

上图是某健康码业务前端错误。该视图有助于SRE第一时间了解整体前端错误数据,并有针对性对业务前后端应用进行优化。

  • 用户反馈监控

在业务出现问题时,微信投诉入口或微博等媒体一般会有投诉产生,一旦产生某些关健字汇聚,可以及时介入处理,防止事态扩大化。

4)业务拨测

我们可以模拟业务请求向业务后端接口发起拨测。拨测失败(无法连接、响应超时、错误返回码)可发出告警,这种探测手段也比较有效。腾讯云的拨测功能能有效从全球发起拨测请求,并生成拨测结果报表。

c9012eb30ee516ea08345a9bad2044b3.png上图是全国健康码质量拨测质量视图。

我们也可能在系统内部建立起对第三方接口的拨测,达到自证清白的效果。低成本的拨测解决方案有 blackbox exporter等。

764f8ae5244603eb2d8f2f756d286792.png

上图是某健康码业务的第三方接口拨测,有助于自证清白。

ae4992cbef3c3ba2292fc01feeef0b1c.png

容量压测

疫情往往会瞬时带来比平日峰值数倍甚至数十倍的亮码业务量,增长幅度较大,运维团队一般无法即时进行扩容,所以在疫情增长趋势较为明显时,我们会预估业务量,并与业主沟通进行扩容,扩容后完成性能压测。

1)读接口压测

我们会从系统随机抽取一部分用户,向系统模拟数十倍峰值请求来进行压力测试。压测的同时向第三方接口报备压测流量,以免造成第三方系统损坏。

2)写接口压测

写接口涉及到数据写入到生产环境,所以一般采用两种形式进行压测。一种是标记数据压测、比如采用一些模拟用户ID 号段的用户生成清求,压测完成后采用删除压测数据的方式进行清脏。另一种是压测请求http头内携带压测标记,业务代码内对压测请求特殊处理,旁路插入测试库。

腾讯云压测团队提供了一系列的压测工具及服务,有效助力每个健康码业务疫情期容量保障。

3)压测排障

压测过程中碰到瓶颈常见于:单核跑满——存在于某些应用使用单核的情况,一般需要做业务改造,使系统运行在多核;负载过高——如CPU过高,虚拟机包量超 10W等;防火墙等数通链路故障——防火墙可能会存在带宽限制、新建会话数限制等 (不限于互联网出口防火墙、区域间防火墙);PAAS能力限——如redis单机版单核跑满,连接数跑满等;第三方接口延时过高——如第三方接口不能承压等情况;某些私有云存在大量CPU超分。在压测过程中发现并解决能力短板,从而使系统能达到理想的容量。

ef18eedb70a7e37c6567177ec04cc080.png混沌工程与故障演练

887773aa0445b2e9f26f4ebb453c9320.png

上图是健康码混沌工程实践。每个健康码从新上线到成熟,产品与运维团队都经历了组建至成熟的过程,通过故障演练,团队能快速找到产品架构薄弱点、组织效率瓶颈点,演习完成后可有针对性对演习中发现的问题进行优化,经历过多次演习,架构高可用能力与组织效率均能有所提高。

1)检验服务的高可用性,如架构无单点,具备健康检查、负载均衡等能力

通过关机、网卡禁用、实例调整等手段模拟故障,检验在IaaS/PaaS出现故障时,业务是否会受到影响,业务能否自动切换,后端业务能否自动止损熔断等。

2)检验监控覆盖度和有效性,如基础监控、业务指标监控的覆盖度和告警有效性

通过关机、网卡禁用、实例调整等手段模拟故障,检验基础监控手段能否及时发现问题,业务监控手段能否及时发现业务抖动,告警能否触达到相关的运维人员。

3)检验应急预案的有效性,如扩缩容预案,限流预案等

以压力测试为辅助,检验压力条件下,能否快速成功扩充容量,能否快速启动对业务限流。

4)提前发现服务稳定性隐患并推动消除隐患,建立故障快速发现和快速止损的能力

在某些特定的业务耗时增加、错误率增加时,能够快速启动预案介入,快速恢复业务成功率及耗时。

06c11b4d587ac4e59ef62203fa6b0768.png

业务架构优化与业务柔性

优秀的架构需要具有自保护能力与对后端应用的保护能力。常见的保护能力如:

某些高并发写请求入库前增加队列以增加瞬时吞吐能力。如高峰期扫场所码,扫场所码信息入库实时性要求并不强,采用腾讯云ckafka等组件进行业务削峰。

在应用加入适当时长(如:5分钟)的缓存,用户短时间调用该数据时走缓存,以减少对后端、第三方接口的请求。该缓存可以加在前端(如Localstorage)或 后端(采用redis或hash到有状态服务的本地内存)。

在后端或第三方接口故障时,由于用户会不断重试而瞬时增加大量请求,甚至导致后端雪崩,这时就有必要在前端增加限制重试的逻辑。比如有些小程序设计在用户请求出错后,会要求用户重登陆, 但如果对该登陆请求没有限制,必然会导致请求量过大而后台雪崩。我们建议在前端加上限频措施。以下是常见的前端设计:

8b334232c46103413d87da525d2e5e14.png

后端在网关等层面限流,只允许承载能力内的请求进行后端。通过压测对系统承载能力摸底,从而在接入网关进行限流。我们采用腾讯云智能网关(腾讯云公有云API网关有同样的能力)限流。可以对后台起到相应的保护作用。

第三方接口耗时太长,产生大量TCP连接而耗尽系统资源,此时会要求后端具有快速失败的能力,不再长时间等待第三方接口返回。

30bc20fc422513755b82b5edfc3e6c58.png

上图是健康码系统分层部署及各层对后端的保护能力。以上保护手段在每个项目中的实现策略均有所差异。因为涉及到用户体验,需要与业主充分讨论后执行。

4d31ce46874548ef1c5aa97aa1cc89b4.png

变更控制

业务上线后,需要持续保持业务稳定运行,变更控制尤其重要,现网变更均需要提出变更请求,每一个变更请求需要进行技术严格评审后,经客户、管理授权后方能在现网实施。

我们特别使用腾讯云coding承载变更工作流,变更工作在平台中实现闭环。一个合格的变更请求至少要包含变更目的、实施过程、验证方案、回退方案等。ITIL 的 change management中均有规范,此处不再详述。变更时尽量遵循灰度发布,防止变更中产生较大影响面的问题。

以上是从技术架构、可观测体系、运营保障体系等运维体系各方面总结出来的、保障健康码过程中的心得,希望能给大家一些借鉴和参考。整体来说,技术架构上,基础资源尽量采用云原生产品,满足大容量、可伸缩、高可用的基础资源能力。可观测体系上,要采用云原生产品构建业务前端、后端一体化观测体系,保障业务可用性。运营保障体系上,好的系统运维是设计出来的, 一方面加强业务技术架构设计,可层可对后端提供保护,通过限流、逻辑熔断等手段使业务架构具有容错能力;另一方面平时要不断通过混沌工程演习手段,检验系统容量及高可用能力,保障团队能够及时响应,专业响应。

当然我们碰到的业务场景有限,为了满足业务快速上线,历史上所采用的的一些技术实践也不一定是最优的。当前云产品发展日新月异,已经产生了更好的产品解决方案,期待大家在评论区一起发掘讨论。

腾讯工程师技术干货直达:

1、手把手教你搭建Hexo博客

2、将云原生进行到底:腾讯百万级别容器云平台实践揭秘

3、内存泄露?腾讯工程师2个压箱底的方法和工具

4、一文读懂Go函数调用

986804da9be2bebc4115810821ddfc98.png

b73bcc894ca66cb17c7f8d0569aadb67.png

点个在看展示你的技术态度

19f3db9db5b115b9b136c0838232db87.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125974.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

骨传导耳机到底怎么样,五款好用的骨传导耳机推荐

还有很多人不知道骨传导耳机使用感受到底如何,骨传导耳机是开放式的听音方式,在使用骨传导耳机时,会更加安全、耳机的声音相对于入耳式的声音会更加具有空间立体感,具体使用感感受到底如何,看下文大家就有一定的了解了…

服务器ssl证书升级

最近服务器扫描出ssl证书是使用弱哈希算法签名的SSL证书(CVE-2004-2761)【原理扫描】,要求联系证书颁发机构重新颁发证书。使用弱哈希算法签名SSL证书的端口有1433,3389。所有要对这俩端口配置一个新的证书。算法且满足sha256。 下面是我我服务器证书升…

国际原子时(TAI),GPS时间,协调世界时(UTC)以及rinex文件起止时间

最近学习使用PRIDE-PPPAR处理GNSS原始数据,判断rinex文件是不是单天的问题实在让人费解。必应搜索了一下,结合手头上的软件,问题大致弄清楚了。 比如现在有1个rinex文件:GPSR0190.19O,如果用PRIDE-PPPAR 的命令pdp3处…

零售行业R公司对接亚马逊Amazon Device EDI项目案例

为了满足平台货物的多样性,亚马逊Amazon邀请了来自全球各地的优秀供应商加入其供应链体系。要管理如此庞大的供应商群体,需要完成大量的数据处理工作,位列世界500强的Amazon是如何传输这些数据的呢? 答案是:通过EDI&a…

基于Amlogic 安卓9.0, 驱动简说(三):使用misc框架,让驱动更简单

文章目录一、前文总结二、系列文章三、MISC框架驱动四、解析:完整源码4.1 helloworld_misc_amlogic_driver.c4.2 Makefile五、编译执行(1)编译及部署(2)运行六、应用层调用6.1 APP源码6.2 命令及运行效果七、源码下载八…

思考札记1

2022年12月26日 今天看了荣耀新出的80GT,主处理器是第一代骁龙8,以及一个辅助处理器,性能怎么样不知道,但是12256价格来到了 3299,主摄5400万像素,感觉偏贵,我是不会买的 可能这机子就是主打性能…

【杂谈】一个项目获得10倍学费收入,我在有三AI学以致用的故事

各位有三AI的读者朋友们大家好,作为一名在职AI算法工程师和有三AI的读者,今天和大家分享一下我和有三AI几年来结识和学习的经历,希望对大家有所帮助。结识有三AI2019年我刚工作时对AI理论基础和实践经验还非常不足,因此工作之余我…

质数距离 acwing

196. 质数距离 - AcWing题库 题意是给你一个区间[l,r],相当于让你把这个区间里面所有的质数提出来,然后找到相邻质数距离最近和最远的第一个点在什么地方 看一下数据范围,不同的数据范围决定了用什么方法去做: 两个数据范围&…

Linux多路转接or多路复用模型

目录 一、功能 二、应用场景 三、多路转接模型的实现 1.select模型 1.1操作流程 1.2相关接口 1.3示例 1.4常见使用方式 1.5优缺点 2.poll模型 2.1操作流程 2.2相关接口 2.3示例 2.4优缺点 3.epoll模型 3.1操作流程 3.2相关接口 3.3常见使用方式 3.4epoll的事…

这一年,熬过许多夜,也有些许收获 | 2022年终总结

弹指一挥间,时间如白驹过隙。光阴似箭,日月如梭,时间如闪电,转瞬即逝。回望来时路,不觉潸然泪下… 一说到年终总结,好像都离不开这样煽情的开场白。但不可否认的是,时间确实过得很快&#xff0…

操作指南|通过Snapshot进行投票

Snapshot是一个去中心化的治理平台,包括Moonbeam社区在内的许多Web3社区都使用此平台进行民意投票。民意投票是一种非正式的链下治理流程,允许社区在链上投票之前就某件事发表意见。通过Snapshot进行的民意投票,以及在Moonbeam治理论坛上的讨…

canopen6.0-PDO发送

1、发送PDO 2、发送PDO参数说明 发送PDO标识符:180+NODEID 传输类型 0xff为跟随定时器发送 进制时间:防止某一个报文长时间占用总线设定的时间 envent timer:单位为ms,传输类型设置0xff,定时发送时间 3、发送PDO映射参数说明 PDO映射数目:PDO传输变量数量 7100 01 10h含义…

南卡和漫步者蓝牙耳机哪个好?国产蓝牙耳机南卡和漫步者360度对比评测

现如今,随着蓝牙技术的发展,越来越多的蓝牙耳机出现在我们的日常生活当中,国产蓝牙耳机也不遑多让,在制作上也更为精湛。现在的国产蓝牙耳机品牌有很多,但相较于一些新兴的国产品牌,人们更信赖一些国货老牌…

C#---第十九课:时间DateTime相关的应用 Convert.ToDateTime ParseExact TryParseExact

文章目录1.将字符串转换为标准的DateTime格式2.DateTime数据的相关应用3.ParseExact的应用4.TryParseExact的应用1.将字符串转换为标准的DateTime格式 DateTime 格式是标准的格式,通过这个格式可以方便转换为其他格式、日期的增减、日期的比较等 using System.Diagn…

RK3568平台开发系列讲解(设备驱动篇)等待队列

🚀返回专栏总目录 文章目录 一、等待队列头二、等待队列项三、添加/删除队列四、等待唤醒五、等待事件沉淀、分享、成长,让自己和他人都能有所收获!😄 📢当我们进程去访问设备的时候,经常需要等待有特定事件发生以后再继续往下运行,这个时候就需要在驱动里面实现当条…

以“微”知著,用友ISV生态的力量与担当

由规模化、集约化、智能化带来的影响,不仅可以让养殖户获得更大的养殖密度、更规范的养殖流程、更专业的管理运营,而且能够带动行业发生深远的变革! 养猪也少不了数智化 常言道:民以食为天,猪粮安天下。一头猪就是一个小银行&…

获取微信小程序码传递的参数 / 微信开发者工具模拟扫描小程序码调试

本文主要介绍如何在微信开发者工具中,模拟微信扫描小程序码打开小程序的场景,进行调试。 二维码调试可以看这篇文章:微信开发者工具模拟扫描二维码调试 添加编译模式 添加一个咱们自定义的编译模式 输入模式名称 主要是方便后面的查找 设…

【观察】Oracle NetSuite+德勤中国税务Digital T-Suite:做中国企业“智慧税务”新助手...

伴随着新技术的快速发展,智慧税务成为国家技术力量驱动、治理能力升级背景下的一次全新税务实践。也正因此,继2015年国家税务总局在《“互联网税务”行动计划》中首次提出智慧税务建设目标后,2021年国家再次印发《关于进一步深化税收征管改革…

双非本科到大厂,贫困家庭到深圳买房,我的逆袭之路

20岁的你是否在拼命努力的奋斗呢? 人这一生,其实大大小小有很多的节点,每个年纪该干每个年纪的事情,一步一步的朝前走下去,应该是大部分人目前的现状。 最近一年来,这个号新增了很多的读者,大…

SpringSecurity(二十三)--OAuth2:使用JWT和加密签名(上)对称密钥加密

一、前言 最近阳了所以一直都在休整,大家一定要注意身体,能不阳就不阳,如果阳康后还是一直咳嗽,最好是能去医院看看,这绝对不是专家口中所说的新冠感冒那么简单,也绝对不是什么80%的无症状,大家…