稳定、可控、高可用:运维最应该加持哪些技术 buff?
如何保障开发需求高效交付,系统高峰扛得住、长期平稳,是项目组中的每位技术人必须面对的问题。
本文大纲
1、强稳定性Buff
2、风控服务实时性Buff
3、高资源利用率Buff
1.强稳定性Buff
强稳定性背后有三大挑战,其一是应对发布变更引起故障问题的挑战,从历史数据中得知,70% 以上的故障都是由于变更引起的。做好变更管控,就能减少大部分的故障。
其二是保障跨云网络链路持续可用的挑战。TT语音业务采取跨云部署策略,实现跨云容灾价值的同时,也对跨云流量治理提出更高的要求。当跨云之间发生网络波动或者中断时,将造成业务波动或不可用的后果。
其三是面对故障的快速响应的挑战,就算有再优秀的架构、再完美的设计,故障始终难以全部避免。当故障真正发生时,做到故障问题的快速感知、快速定位和快速恢复,是保障业务稳定性的关键一环。
1.1 加强变更管控管理
通过系统化的手段来管理是最理想的方式,包括发布时间(如规避业务高峰期),发布方式(如灰度),验收及回滚等。当企业底层基础服务和中间件服务的系统化建设处于尚未完善的阶段,通过设定变更管控的规则,严格控制变更的需求,强化变更人员的意识,是较为有效的举措。
对于成本优化、统一网格服务化治理所需的架构改造,以及容灾演练活动等进行严格的评估,避免突然变更。同时,技术团队制定重大变更执行方案评审机制、对所有变更执行变更通知规范性检查,以及执行高危命令审计及预警切实保障变更的规范性。
1.2 保障跨云链路高可用
基础架构团队设计了多云互联互通的多条专线和多条 VPN 线路互相备份方案。具体而言,当专线链路不可用时,自动实现通过 VPN 线路承载全部业务流量。该方案有几大特点:
- 基于 BGP 协议实现秒级自动切换
- 多条 VPN 线路实现负载均衡
- 专线线路恢复后 VPN 流量自动切换回专线
通过以上举措,TT 语音年度盛典项目组的技术团队实现了不同云厂商的互联互通高可用,该技术方案在行业内处于较为领先水平。
1.3 提高运维保障能力
AIOps 监控感知问题
当出现故障时,快速感知是故障处理的关键能力。以往,技术团队采用比较传统的手段,针对不同级别的应用和基础组件,通过阈值调优,增加监控项等手段精细化管理。
为了更快更全面的感知用户侧问题,今年盛典期间,技术团队引入 AI 算法能力,通过文本识别和 NLP 语义理解,在用户反馈侧提前感知故障问题,大大提高了故障处理的效率。
强化故障处理意识
采取“多沟通多同步勿慌乱”以及“先恢复快止损后根因”两大策略,从人员意识上,提升故障定位和恢复的执行力。
云商风险识别治理
技术团队完成了云商迁移,所有流量第一次全部承载在一个全新的基础设施上,其风险不言而喻。为此,与云厂商技术团队深入合作,系统性地对云服务进行风险识别和治理,共发现风险41个,并完成了36个风险治理,将故障隐患提前消除。
2. 风控服务实时性Buff
合规安全是当前业务的底线和生命线,实时风控与业务流程强绑定,一旦风控服务实时性差或不可用,直接导致用户体验差或者业务不可用。业务侧对于风控的实时性,也提出了明确的技术指标:99.5% 的请求在 200 毫秒内响应。
为保障风控合规能力的实时性,大数据团队需通过存算分离、数据分级、服务降级三个方面来保证每天上百亿行为实时计算和服务。因此,在海量数据场景中,保障风控服务实时性及可用性是个巨大的挑战。
2.1 存算分离
故障随时随地迁移,不影响数据实时性
采用 on K8S 的架构方案,计算应用 docker 化运行在 k8s 环境,实现了计算逻辑和计算资源的解耦。同时引入对象存储来存储计算状态,解决资源迁移时可随时随地读取计算状态的问题。最终实现计算和存储能力的可迁移可扩展性,应对突发的大计算资源水平扩展及节点异常自动迁移。
2.2 数据分级
根据数据和业务场景分级优化,提升存储查询引擎响应性能
面对风控识别高并发(30KQPS)的请求,服务过程中同时涉及多用户多特征(全平台亿级用户 300+ 维特征)更新,大数据团队根据数据热度和实时程度对数据进行分级处理。
- 活跃用户特征存储在内存 KV 库,全量用户特征存储在分布式 NoSQL KV 库;
- 实时性高的使用 Pipline 方式微批更新到内存 KV 库,实时性低的数据以文件形式批量更新到分布式 NoSQL KV 库,以此来降低更新数据带来的压力;
通过优化数据分区算法,数据分布更均衡大幅提升并发查询性能。
2.3 服务降级
数据服务链路解耦,极端情况可实现降级保障稳定性
风控服务链路分为用户特征计算、用户特征更新及风控识别服务。
- 特征计算利用流平台和大数据 IDP 平台灵活定制特征;
- 特征更新集中作业统一优化更新数据到 KV 库;
- 风控识别服务采用分布式+异步查询+默认特征兜底,保障服务高可用。
大数据生产和服务技术组合多且复杂,为了避免极端情况,风控服务不可用的情况,首先整体服务采用异步式架构解耦相互关联性,其次在无关性的基础上,可根据下游压力情况灵活调整上游策略。若 KV 库负载压力大,可降低数据更新频率降低负载;若极端情况 KV 库全部宕机,服务仍在线,保障业务过程不受影响,对用户无感知。
通过以上优化,盛典期间零故障,99.9% 服务响应在 50 毫秒内,大幅提升用户使用产品的体验。
3.高资源利用率Buff
在保证业务稳定的情况下尽可能降低成本,需要提升资源的利用率。具体来说,技术团队需要提升应用服务 Pod 利用率和容器 Node 节点的分配率,达成节点利用率的提升。而资源利用率越高,服务受负载影响导致业务受损的可能性就越大。
因此,在不降低稳定性的前提下,最大限度的节省资源成本,是资源调度平台面临的较大挑战。
3.1 提高应用的资源利用率
3.1.1 应用弹性伸缩
应用资源的弹性伸缩是当前云原生架构下常见的提升利用率的手段,得益于技术团队较早在云原生领域探索,应用的云原生化覆盖率比较高,95% 的应用具备弹性伸缩的能力。
然而,弹性伸缩若太频繁,也将对服务稳定性造成威胁。为了提升应用利用率资源,同时兼顾业务稳定性,需要设置合理的 Pod 资源申请与 HPA 的阈值。
- 案例分享
有一个关键的业务 Pod,由于红框标记部分为 HPA 和 request 值设置不合理导致的频繁伸缩,不仅影响资源利用率,同时也为业务稳定带来影响。
图1:某业务优化前的应用负载趋势图
如图,红框标记部分为 HPA 和 request 值的不合理设置。技术团队根据自己的业务情况特征建立了一套 Pod 资源申请模型,解决应用资源的不合理使用问题,最大化应用资源利用率,集群应用 CPU 均值利用率达到 57%。
3.1.2 应用定时伸缩
对于赛事活动,会遇到突发流量,往常的做法是人工提前扩容,以应对高峰期的访问压力,使服务保持稳定。人工扩容比较繁琐、低效且有一定的浪费。技术团队针对突发流量,上线了定时伸缩策略,较好地解决业务稳定性。同时,精准的定时伸缩策略,也进一步提升了资源利用率。
如下图,通过采用定时伸缩方案,在业务突发流量到来前,提前扩容。
图2:优化后的应用负载趋势图
如下图,从业务指标看,较好地解决了突发流量带来的异常。
图3:接口页面指标检测图
3.2 提升 Node节点的分配率
3.2.1 集群节点弹性伸缩(定时伸缩)
借助于云商的 CA (集群自动扩缩)能力,技术团队在所有集群上开启了这个功能。然而,当存在突发流量时,集群节点资源无法满足业务需求,此时 CA 扩容需要 5 分钟。
- 案例分享
如下图所示,节点扩容时间晚于业务峰值时间。
图4:业务峰值时期的应用负载趋势图
由于节点扩容不及时存在瞬间失败的情况,一般应对手段是准备更大的集群空闲资源,但造成资源一定程度的浪费。如下图,由于节点扩容不及时,出现访问异常数升高的情况。
图5:接口页面指标监测图
为此,开启了集群节点的定时伸缩机制,在 20:00 和 00:00 两个高峰期提前扩容节点,解决了服务瞬时失败问题,同时提升节点的资源利用率。
图6:集群节点趋势图
3.2.2 优化机型配置
Kubernetes 是基于 Pod 的 request 资源进行调度的,任意一种资源不满足 request 就不会把 Pod 调度到该节点。为了提升节点的分配率,减少资源碎片化,节点的机型选择就需要一定的技巧。
- Pod 申请的 CPU 和 MEM 的比例尽可能跟 Node 的 CPU 与 MEM 的比例接近
- Pod 的 CPU 和 MEM 的使用尽可能和申请资源的比例接近
*注意:这里统计的是整个集群的 Pod 情况,不针对单一 Pod。
技术团队根据历史业务对 CPU 资源与 MEM 资源的需求情况,选择最配匹的 Node 机型,将全部集群的分配率提升到 85% 以上,尽可能减少了无法分配的资源碎片。
3.3 离在线混部
行业内都知道,分时复用是提升资源的利用率有效手段,将离线和在线业务负载时间段正好错开,是分时复用的最佳场景。
离在线混部系统是基于业务特征设计的一套调度系统,主要实现包含基于实时资源感知的动态调度算法、离线 Pod 调度算法、基于优先级的 Pod 资源隔离方案、 Node 资源过载干预方案等。此系统在保证在线业务 SLA 的情况下,充分利用 Node 空余资源。
来源:本文转自公众号“码上跃见”
相关文章:
稳定、可控、高可用:运维最应该加持哪些技术 buff?
如何保障开发需求高效交付,系统高峰扛得住、长期平稳,是项目组中的每位技术人必须面对的问题。 本文大纲 1、强稳定性Buff 2、风控服务实时性Buff 3、高资源利用率Buff 1.强稳定性Buff 强稳定性背后有三大挑战,其一是应对发布变更引起故障问…...
动态网站开发讲课笔记02:Java Web概述
文章目录零、本讲学习目标一、 XML基础(一)XML概述1、XML2、XML与HTML的比较(二)XML语法1、XML文档的声明2、XML元素的定义3、XML属性的定义4、XML注释的定义5、XML文件示例(三)DTD约束1、什么是XML约束2、…...
如何保护 IP 地址的隐私问题
是不是只有运营商才能查到某个人的住址信息呢?在大数据时代的今天,各种互联网应用收集了大量的数据信息,它们其实也可以根据这些信息,推断出某个人的大致地址位置。例如百度地图会一直用 App SDK 以及网页的方式记录 IP 和地址位置…...
高并发系统设计之限流
本文已收录至Github,推荐阅读 👉 Java随想录 文章目录限流算法计数器算法滑动窗口漏桶算法令牌桶算法限流算法实现Guava RateLimiter实现限流令牌预分配预热限流Nginx 限流limit_connlimit_req黑白名单限流这篇文章来讲讲限流,在高并发系统中…...
ZCMU--5286: Rose的字符串(C语言)
Description 一天Rose同学想得到一个仅由01组成的字符串S,Jack同学为了让Rose同学开心,于是打算去商店购买另一个也仅由01组成的字符串T。而商店的字符串价格由它的长度决定,比如字符串011售价3元,001011售价6元,商店…...
MAC下搭建hadoop
一:简介 Hadoop是一个用Java开发的开源框架,它允许使用简单的编程模型在跨计算机集群的分布式环境中存储和处理大数据。它的设计是从单个服务器扩展到数千个机器,每个都提供本地计算和存储。特别适合写一次,读多次的场景。 Hado…...
Python如何实现自动登录和下单的脚本,请看selenium的表演
前言 学python对selenium应该不陌生吧 Selenium 是最广泛使用的开源 Web UI(用户界面)自动化测试套件之一。Selenium 支持的语言包括C#,Java,Perl,PHP,Python 和 Ruby。目前,Selenium Web 驱动…...
华为OD机试真题Python实现【关联子串】真题+解题思路+代码(20222023)
关联子串 题目 给定两个字符串str1和str2 如果字符串str1中的字符,经过排列组合后的字符串中 只要有一个是str2的子串 则认为str1是str2的关联子串 若不是关联子串则返回-1 示例一: 输入: str1="abc",str2="efghicaibii" 输出: -1 预制条件: 输入的…...
Flutter+【三棵树】
定义 在Flutter中和Widgets一起协同工作的还有另外两个伙伴:Elements和RenderObjects;由于它们都是有着树形结构,所以经常会称它们为三棵树。 这三棵树分别是:Widget、Element、RenderObject Widget树:寄存烘托内容…...
若依系统【SpringBoot】如何集成qq邮件发送【超详细,建议收藏】
若依系统的部署博主就不在这儿阐述了,默认大家的电脑已经部署好了若依系统,这里直接开始集成邮件系统,首先我们得需要对qq邮箱进行配置;一套学不会你来打我😀; 一、开启我们的qq邮箱发送邮件的配置 1、先进…...
kettle使用--1.mysql多表关联导入mongoDB
文章目录1. 初步体验:csv 转为excelKettle概念配置mysql链接mysql 一对多关联查询结果保存到mongodb中1. 初步体验:csv 转为excel Windows环境下安装pdi-ce-8.0.0.0-28.zip ,解压后执行lib下的Spoon.bat 将csv输入拖入 双击拖进去的csv&…...
2023年CDGA考试-第10章-参考数据和主数据(含答案)
2023年CDGA考试-第10章-参考数据和主数据(含答案) 单选题 1.实现主数据中心环境的三种基本方法中不包括哪种? A.参考目录 B.注册表 C.交易中心 D.混合模式 答案 A 2.参考数据还具有很多区别于其他主数据 (例如,企业结构数据和交易结构数据)的特征。以下哪项目描述错误的…...
2023年,什么行业更有发展前景?
关于有前景有发展的行业推荐,小课今天还是推荐咱们IT互联网行业。 很多人会说现在懂电脑的那么多,这个行业都饱和了,很多学电脑的找不到工作都改行了。但事实是现在每个行各业都需要互联网,需要懂电脑的技术人才,尤其是在云计算、大数据到来…...
致盛咨询携手亚马逊云科技进一步开拓中国市场
作为医疗保健领域的咨询公司,ZS需要保证服务可靠性、敏捷性和安全性的同时,获得经济效益。亚马逊云科技丰富的云服务产品简化了ZS基础架构的搭建,为ZS节省了大量的人力与资金成本。同时,缩短了ZS扩展基础设施的周转时间࿰…...
ts之 命名空间 namespace、三斜线指令、声明文件(declare 声明ts的变量函数第三方模块等 )
目录ts之 命名空间 namespacets之 命名空间 namespacets之 三斜线指令 ( 引入其他.ts文件 )app.tsindex.tsts之 声明文件 d.ts - declare01:declare声明express第三方模块typings 为代码或者第三方模块 编写声明文件index.ts02:de…...
Day898.Join语句执行流程 -MySQL实战
Join语句执行流程 Hi,我是阿昌,今天学习记录的是关于Join语句执行流程的内容。 在实际生产中,关于 join 语句使用的问题,一般会集中在以下两类: 不让使用 join,使用 join 有什么问题呢?如果有…...
ChatGPT商业前景如何?人工智能未来会如何发展?
ChatGPT不仅在互联网和多个行业引发人们的关注,在投资界还掀起了机构对人工智能领域的投资热潮。人工智能聊天程序ChatGPT在去年11月亮相之后,在推出仅两个月后,今年1月份的月活用户已达到了1亿,成为史上增长最快的消费者应用程序…...
代码随想录第十六天(347、194、195、94)
347. 前 K 个高频元素 答案 思路: 1、首先,用到了每个值对应的出现次数,想到要用哈希map存放 2、还需要将出现频率从大到小进行排序,找出前k个元素 3、时间复杂度应该比O(nlogn)小 如果想用快速排序&…...
< elementUI组件样式及功能补全: 实现点击steps组件跳转对应步骤 >
文章目录👉 前言👉 一、效果演示👉 二、点击steps跳转效果实现👉 三、实现案例往期内容 💨👉 前言 在 Vue elementUi 开发中,elementUI中steps步骤条组件只提供了change方法,并未提…...
【学习笔记】互联网金融:芝麻信用分的建模过程
学习资料: 数据分析学习随记 | 互联网金融行业2C授信模型(芝麻信用) 1. 背景 互联网金融的本质是风控。 1.1 数据分析师的角色 数据分析师在金融行业基本上有两种角色: 1.1.1 数据建模师 偏算法,但要很懂业务。要求对算法的理解较深&am…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
