关于运维:十亿人都在用的健康码运维体系是怎么设计的

39次阅读

共计 5574 个字符,预计需要花费 14 分钟才能阅读完成。

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

业务背景

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

随着疫情防控模式的迭代,衰弱码拜访 DAU 逐步趋于上涨,意味着衰弱码将逐渐实现历史使命,淡出历史舞台。本文就已经在衰弱码业务经营过程中的保障技术手段进行了回顾,欢送有趣味的读者在评论区一起探讨。

技术架构体系

一个稳固的架构是设计与运维进去的,为了达到稳态运行,设计上思考了以下几个方面:

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)零碎压力测试、混沌工程、应急预案等多方面测验

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

可观测体系

可观测能力做为根底技术能力,在衰弱码运维中是不可短少的一部分。优良的可观测体系可能帮忙业务及时、精确地发现故障,亦能在故障诊断过程中追根溯源,及时帮助问题定位、从而减速故障复原。

衰弱码产品基于腾讯云 PAAS 产品构建,零碎的可观测点个别可基于以下能力构建 :首先, 采纳了腾讯云 waf/ 腾讯智能网关 / 腾讯云 tke 等做为根底组件 。这些组件都可能输入标准化日志,咱们对日志进行荡涤、汇聚,从而可取得各种可观测的 metrics。其次, 前端埋点 。有助于监控前端用户体验,发现资源加载慢、API 接口超时、成功率低等问题。最初, 组件本身的监控零碎,采纳私有云 API、telegraf input、prometheus exporter 等形式对组件本身的衰弱状况做好监控。

1)根底组件可观测

对于根底组件来说,咱们须要晓得各组件的运行状态、容量性能状况等。根底组件可观测选型较多,绝对公有云来说,私有云具备较好的可观测生态。以腾讯云为例,私有云除了提供较好的 dashboard 与告警能力外,基于 API V3 构建的开源生态亦比拟丰盛,可应用 grafana plugin 和 prometheus qcloud exporter 进行观测,不便与 prometheus / grafana 进行集成对接。

须要特地阐明的是因为原生监控指标较少,服务器数量较多时,监控原生 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 监控接入办法及为简略不便。

上图是前端监控数据总览视图,有助 SRE 第一工夫理解整体用户体验数据。

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

API 监控性能有助于 SRE 理解后端 API 性能,在后端成功率、耗时(如 95 分位,均匀耗时)有稳定时,能够无效下钻剖析并联结后端进行排查。因为衰弱码外部援用了大量的内部接口,在理论利用中,咱们通常采纳此办法第一工夫发现第三方零碎接口耗时稳定,并及时分割第三方接口后端进行解决。

上图是某衰弱码业务前端谬误。该视图有助于 SRE 第一工夫理解整体前端谬误数据,并有针对性对业务前后端利用进行优化。

  • 用户反馈监控

在业务呈现问题时,微信投诉入口或微博等媒体个别会有投诉产生,一旦产生某些关健字汇聚,能够及时染指解决,避免事态扩大化。

4)业务拨测

咱们能够模仿业务申请向业务后端接口发动拨测。拨测失败(无奈连贯、响应超时、谬误返回码)可收回告警,这种探测伎俩也比拟无效。腾讯云的拨测性能能无效从寰球发动拨测申请,并生成拨测后果报表。

上图是全国衰弱码品质拨测品质视图。

咱们也可能在零碎外部建设起对第三方接口的拨测,达到自证清白的成果。低成本的拨测解决方案有 blackbox exporter 等。

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

容量压测

疫情往往会刹时带来比素日峰值数倍甚至数十倍的亮码业务量,增长幅度较大,运维团队个别无奈即时进行扩容,所以在疫情增长趋势较为显著时,咱们会预估业务量,并与业主沟通进行扩容,扩容后实现性能压测。

1)读接口压测

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

2)写接口压测

写接口波及到数据写入到生产环境,所以 个别采纳两种模式进行压测。一种是标记数据压测、比方采纳一些模仿用户 ID 号段的用户生成清求,压测实现后采纳删除压测数据的形式进行清脏。另一种是压测申请 http 头内携带压测标记,业务代码内对压测申请非凡解决,旁路插入测试库。

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

3)压测排障

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

混沌工程与故障演练

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

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

通过关机、网卡禁用、实例调整等伎俩模仿故障,测验在 IaaS/PaaS 呈现故障时,业务是否会受到影响,业务是否主动切换,后端业务是否主动止损熔断等。

2)测验监控覆盖度和有效性,如根底监控、业务指标监控的覆盖度和告警有效性

通过关机、网卡禁用、实例调整等伎俩模仿故障,测验根底监控伎俩是否及时发现问题,业务监控伎俩是否及时发现业务抖动,告警是否触达到相干的运维人员。

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

以压力测试为辅助,测验压力条件下,是否疾速胜利裁减容量,是否疾速启动对业务限流。

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

在某些特定的业务耗时减少、错误率减少时,可能疾速启动预案染指,疾速复原业务成功率及耗时。

业务架构优化与业务柔性

优良的架构须要具备自爱护能力与对后端利用的爱护能力。常见的爱护能力如:

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

在利用退出适当时长(如:5 分钟)的缓存,用户短时间调用该数据时走缓存,以缩小对后端、第三方接口的申请。该缓存能够加在前端(如 Localstorage)或 后端(采纳 redis 或 hash 到有状态服务的本地内存)。

在后端或第三方接口故障时,因为用户会一直重试而刹时减少大量申请,甚至导致后端雪崩,这时就有必要在前端减少限度重试的逻辑。比方有些小程序设计在用户申请出错后,会要求用户重登陆,但如果对该登陆申请没有限度,必然会导致申请量过大而后盾雪崩。咱们倡议在前端加上限频措施。以下是常见的前端设计:

后端在网关等层面限流,只容许承载能力内的申请进行后端。通过压测对系统承载能力摸底,从而在接入网关进行限流。咱们采纳腾讯云智能网关(腾讯云私有云 API 网关有同样的能力)限流。能够对后盾起到相应的爱护作用。

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

上图是衰弱码零碎分层部署及各层对后端的爱护能力。以上爱护伎俩在每个我的项目中的实现策略均有所差别。因为波及到用户体验,须要与业主充沛探讨后执行。

变更管制

业务上线后,须要持续保持业务稳固运行,变更管制尤其重要,现网变更均须要提出变更申请,每一个变更申请须要进行技术严格评审后,经客户、治理受权前方能在现网施行。

咱们特地应用腾讯云 coding 承载变更工作流,变更工作在平台中实现闭环。一个合格的变更申请至多要蕴含变更目标、施行过程、验证计划、回退计划等。ITIL 的 change management 中均有标准,此处不再详述。变更时尽量遵循灰度公布,避免变更中产生较大影响面的问题。

以上是从技术架构、可观测体系、经营保障体系等运维体系各方面总结进去的、保障衰弱码过程中的心得,心愿能给大家一些借鉴和参考。整体来说,技术架构 上,根底资源尽量采纳云原生产品,满足大容量、可伸缩、高可用的根底资源能力。可观测体系 上,要采纳云原生产品构建业务前端、后端一体化观测体系,保障业务可用性。经营保障体系 上,好的零碎运维是设计进去的,一方面增强业务技术架构设计,可层可对后端提供爱护,通过限流、逻辑熔断等伎俩使业务架构具备容错能力;另一方面平时要一直通过混沌工程演习伎俩,测验零碎容量及高可用能力,保障团队可能及时响应,业余响应。

当然咱们碰到的业务场景无限,为了满足业务疾速上线,历史上所采纳的的一些技术实际也不肯定是最优的。以后云产品倒退突飞猛进,曾经产生了更好的产品解决方案,期待大家在评论区一起挖掘探讨。

腾讯工程师技术干货中转:

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

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

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

4、一文读懂 Go 函数调用

正文完
 0