稳定性治理二,稳定性分析

news2024/11/20 10:27:50

目录

  1. 重新认识系统稳定性(SLA与系分)

  2. 稳定性分析(单点,容量和性能,依赖,数据保护,安全,资损,弹性能力,业务连续性,变更控制)

  3. 压测方案(引流,单点压测,全链路压测)

  4. 线上问题分析与排查思路

  5. 大厂稳定性设计系统实现案例

上一章我们讲的是使用科学方法对系统进行现状分析,快速精准掌握系统的一些核心指标数据,本章我们就根据掌握的内容对稳定性进行分析。

单点问题

硬件单点

一个应用不能部署在同一台物理机的多个虚拟机上

存储单点

数据库采用主备方式,能否在秒级进行切换,同时确保主备库不再同一个机房架构里

网络单点

参考阿里的骨干网,采用全冗余设计,进行七网隔离,线上线下隔离,弹内弹外隔离

机房单点

确保应用部署时,同城部署时要在两个机房进行部署,以便于单机房演练。

支付宝2015年发生了大规模的宕机事件,原因是杭州市萧山区某地光纤被挖断导致,为确保异地容灾、多活,后面专门进行了全链路单元化改造,整个交易链路都进行了单元化改造,并且经常在大促前夕进行单机房演练;

「“单元化”是一种架构思想,核心是:把完整的业务处理组件封装成一个单元,每个单元都能独立的处理完业务。」优势是可以支持业务无限弹性扩展的,可以突破大厂未来的业务增长导致的系统容量瓶颈。

基础中间件单点

消息中心是否存在单点,当消息有延时或丢失时,要确保业务能正常访问(需要将消息当做弱依赖,做好补偿机制);

配置中心不能直接强依赖,例如nacos,apollo,redis 等,出现问题时,就会影响到正常业务。

数据库单点

典型的做法是先垂直拆分再水平拆分,需要解决多数据源,数据分片,访问透明问题。

内部服务访问单点

强依赖的下游接口,例如鉴权服务,登录服务等,这种接口尤其要注意,如果您系统中绕不开他们,则需要下游进行重保,以及做好失败的补偿和告警。

外部服务访问单点

外部三方提供的服务,例如银行网关,三方存储,这种无法推动改变的外部依赖,需要在调用端做好重试、补偿、告警,建立系统自愈能力减少人工干预(人为的变动也是风险)。

前端资源单点

是否有图片,js,css等静态资源单点,是否有CDN节点单点问题等

「如上这些单点问题,要解决起来是需要具备一定的财力的,现在的云计算服务,很大程度上减少了中小企业的搭建成本,可谓是养兵千日,用兵一时!」

容量评估

除了业务上的 bug,人为的事故,其他引起系统挂掉的几乎都是容量问题,主要分为两个部分:

  • 流量上涨超出系统本身的容量

  • 依赖服务的不稳定,导致系统本身的容量下降

评估服务的访问量与容量

  • 给出所提供服务的访问量(QPS);

  • 给出单台应用服务器的稳定峰值处理能力;

  • 根据当前部署架构中集群大小,评估峰值访问量与集群整体峰值处理能力间的关系;

  • 评估对于内部依赖服务的访问量;

  • 评估对于外部依赖服务的访问量

评估数据访问量,数据增长量及数据库连接池

  • 计算服务实现中对每一个数据库的访问量(TPS);

  • 每日日常数据的增长记录数及存储容量;

  • 计算承载服务的应用集群对数据库连接数的需求,确保所依赖的每一个数据库的总连接数不超过数据库的承载能力。

存储容量

本地存储请确保应用服务每天对本地磁盘的数据存取量是否会超过本地存储的容量极限,同时要确保单个文件的大小不会受到存储限制

网络流量

内部网络流量、连接数与请求数,确保不超过内部网络设备的承载能力。内部网络流量、连接数与请求数需要包含交换机、负载均衡设备、SSL设备、防火墙、专线等。通过性能压测获取阀值,根据线上服务的流量占比进行推算

消息量

需要计算服务处理对可靠消息数量与消息体大小的需求,当消息无法处理时可以根据优先级进行降级处理。

配置中心的容量

确保配置中心的容量足够,当配置中心宕机或服务不可用时,确保应用仍能正常运行。

突发性容量上涨

特点:持续时间短,请求量远大于容量,服务瞬间挂掉。表现为服务尖刺。

【解决】

  1. 限流(随机,IP,URL,如果是内部服务可以针对某系统限流,依据之前的系统分析,实施适合自己的限流策略)

  2. “当瓶颈资源在彻底挂掉(耗光)之前,保留一点资源用来 block 新的请求”,超过的流量直接返回 Server 忙的提示

  3. 降级其他不重要的服务,例如视频播放降级弹幕服务,淘宝交易降级推荐服务等,保障重要的服务

周期性容量上涨

特点:这些流量属于正常需求的流量,用户需求不会因为格挡而消失,由于本质原因是请求量持续的大于容量,所以用户的等待时间会无限期延长,直到超过服务器的超时时间,系统挂掉。

例如做大促,做活动,会持续一段时间,可以针对性的做系统扩容。

【解决】:

  1. 提前做好容量规划,进行扩容

  2. 临时增加,借调服务器

  3. 限流,超过容量的请求快速返回失败,保证系统“不挂”

依赖治理

依赖的资源不稳定

特点:依赖资源,主要是指远程服务或存储,由于远程服务的响应时间变慢,或者挂了,直接导致整个系统的容量下降。

由公式 Threads = QPS * RT / 1000 可以得出,输入 QPS是固定的,由于 RT 的变长,则需要更多的 Threads 才能支撑输入的 QPS,所以一旦依赖资源不稳定,结果是轻易使得线程资源达到瓶颈。

用户找过来时候,肯定不能说由于xx服务不稳定导致,这些都是废话,要不你就去掉这种依赖,去不掉就保障好链路。

【解决】:

  1. 资源做线程数依赖限流,不让过多的线程堵塞在该资源上;

  2. 线程数量能根据依赖资源的服务能力进行动态控制,动态减少或增加对资源的请求数量;

  3. 服务的强弱关系,做好常规、紧急预案,确保不会发生弱依赖影响关键主业务的问题。

依赖治理

强弱依赖识别:对关键链路的应用进行调用链路的服务进行强弱依赖分析,识别出哪些是强依赖,哪些是弱依赖。

强依赖一般指此服务不可用,流程不能往下走,直接影响功能,否则为弱依赖。

强弱依赖关系梳理方式:

  1. 手工梳理

  2. 工具扫描

  3. 日志分析

「强弱依赖的治理:」

  1. 首先不合理的依赖先去除

  2. 强依赖是否是真正的核心业务依赖,如果不是,就变成弱依赖

「对于弱依赖,一般的处理方式:」

  1. 增加业务开关,紧急情况可以降级掉这个功能

  2. 增加限流,通过控制线程的数量或结合响应时间来一起控制

「服务双链路保障:」

很多只读服务默认大部分是直接依赖DB,对于前端应用的高并发、大流量访问,对于没有强一致实时性的场景,能上cache的尽量上cache(tair)

「服务分组&隔离」

  1. 服务集群本身,如果重要性和访问QPS特别大,有必要对外考虑做服务分组集群。

  2. 针对重要的应用,加入集群白名单,正常提供服务;对于其他非重要应用,新建一集群,两集群隔离互不干扰

  3. 流程机制:服务中心因为其地位的重要性,在发布机制做约束,指定发布窗口

安全

  1. 安全开发 安全编码规范(XSS、CSRF、SQL注入)

  2. 代码安全扫描(白、黑盒扫描)

  3. 账户安全

  • 对于登录、认证等业务进行检验及通知提醒;

  • 最小权限选择,仅能访问业务设计时规定的资源和服务;

  1. 数据安全

  • 采用文件方式交互的数据,做双重检验;

  • 涉及到用户手机、身份证号、邮箱等敏感信息进行脱敏;

  1. 网络安全

  • 网络设计和部署上采用全冗余结构,具备充足带宽;

  • 具备网络服务防攻击能力(DDOS)

资损

任何由于系统故障、缺陷、人为操作、安全漏洞导致公司或客户蒙受直接或间接损失的事件,都属于资损事件。

涉及到的内容较为复杂,具体的不展开,这里想要强调的一点就是涉及到金钱的内容,需要额外做好分析,重点保障,核对等。

弹性能力

  1. 业务监控能力 对关键路径的系统进行详细的监控,发现问题自动报警 系统级(CPU、内存、IO)监控、JVM监控、业务监控

  2. 故障隔离能力

  • 确保故障不会从低等级系统/组件传播到高等级系统/组件

  • 强依赖核心服务按组别进行隔离,确保不受低级别应用的影响

  1. 访问量控制能力

  • 服务提供者要给出服务最大能承受的访问量,并做好控制

  • 服务请求者对依赖服务进行控制,确保自身容量不受太大影响

  1. 服务降级能力 依赖服务不可用时,是否可以做降级处理,有一定的降级标准

  2. 系统容错能力 系统容错、数据库容错、关键应用容错、服务不可用容错等的设计

变更控制

  1. 项目测试环境 项目中申请的测试服务器,部署项目专用分支代码,用于测试功能与否。

  2. 日常测试环境 这个是最接近我们线上环境的测试环境,是应用要发布到线上最重要测试关卡。日常需求和项目在正式发布前,都需要把代码合并到日常环境,进行最终的功能回归及自动化回归,只有全部通过后,应用的新代码才允许部署到线上环境。

  3. 预发布环境 是线上环境的预检环境。为正式环境中不对外服务的一组机器,应用在日常测试环境测试通过后,可以要求进入预发布环境进行线上数据的功能测试。

  4. 灰度环境 对于某些新业务或重要度较高的业务,为确保上线后完全正常,可以先用内部流量进行测试,待功能完全验证通过后,再发布上线。

  5. 正式环境 即生产环境,为对外服务的环境。

本篇先到这里,下一篇是压测。欢迎关注我,一个有趣的灵魂。

本期相关稳定性治理一,重新认识系统

50cee39d2af698d05cf0fc9a0e5c4a95.gif

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

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

相关文章

面向对象3构造器

类的成员之三:构造器(Constructor) 我们 new 完对象时,所有成员变量都是默认值,如果我们需要赋别的值,需要 挨个为它们再赋值,太麻烦了。我们能不能在 new 对象时,直接为当前对象的 某个或所有成员变量直接…

美团买菜基于 Flink 的实时数仓建设

摘要:本文整理自美团买菜实时数仓技术负责人严书,在 Flink Forward Asia 2022 实时湖仓专场的分享。本篇内容主要分为四个部分: 1. 背景介绍 2. 技术愿景和架构设计 3. 典型场景、挑战与应对 4. 未来规划 Tips:点击「阅读原文」免…

ReentrantLock实现原理-条件锁

在前两篇文章中,我们了解了ReentrantLock内部公平锁和非公平锁的实现原理,可以知道其底层基于AQS,使用双向链表实现,同时在线程间通信方式(2)中我们了解到ReentrantLock也是支持条件锁的,接下来我们来看下,…

ISO21434 网络安全支持终止与退役(十一)

目录 一、概述 二、目标 三、网络安全支持终止 3.1 输入 3.2 要求和建议 3.3 输出 四、退役 4.1 输入 4.1.1 先决条件 4.1.2 进一步支持信息 4.2 要求和建议 4.3 输出 一、概述 退役不同于结束网络安全支持。一个组织可以结束对一个项目或组件的网络安全支持&#…

【Linux】常用命令总结

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员,2024届电子信息研究生 目录 1.登录操作 2.操作系统 a.os是什么? b.好的操作系统的衡量指标?为什么要有操作系统? 3.Linux下的基本指令 a.ls指令 b.pwd指令 c.cd指令 d…

SB领导的特征

越是SB领导,往往越有这9大特征,难怪员工不服气。 孔子曾说过:“视其所以,观其所由、察其所安、人焉善哉?” 领导也是如此,想要判断领导是不是SB,关键就看他的所作所为。 越是“SB”的领导&#…

在CRM系统中如何获取联系人的信息?

CRM客户管理系统可以有效应对企业对联系人管理的需求,帮助销售人员随时随地查阅、记录、修改联系人,为业务开展做好铺垫。CRM中联系人是什么?如何获取联系人信息? 1.CRM中联系人是什么? CRM系统联系人指的是沟通对象…

薅羊毛!阿里云免费GPU云主机畅玩AI绘画,免费领取阿里云v100显卡搭建AI绘画利器Stable Diffusion

❝ AI绘画利器Stable Diffusion,因为对电脑显卡,磁盘,内存等都有一些限制,导致大部分人望而止步,所以小编今天教大家免费领取阿里云的免费显卡服务器,免费试用3个月,以方便各位快速学习与使用。 ❞ 领取免费…

MapReduce编程

Hadoop的MapReduce计算框架 概述 MapReduce计算框架是一种计算框架,用于计算处理大规模的数据集,他将数据分成小块,然后在集群中的多个节点上并行处理这些块MapReduce框架是由两个组件组成:Map和Reduce Map任务将输入数据分解成…

团队管理之性能实施团队日志12

这几天算是多事之秋。本来就有几个严重的问题天天在折腾。 还是出现了各种差错。 其实对于做项目来说,就是这样,总会有紧要的事情突然冒出来。 我倒是习惯了这种状态。 只是时间不等人。 这两天在写各系统的最终报告。结果写到某个系统的时候发现&#…

零基础学Python,最受推荐的10本Python书籍

目录 适合初学者的最佳Python书籍1、《Python编程:从入门到实践》2、《Head-First Python (2nd edition)》3、《“笨方法”学Python》4、《Python程序设计(第3版)》 最适合初学者的免费Python书籍5、《像计算机科学家一样思考Python (第2版)》…

学习【菜鸟教程】【C++ 继承】(未完)

链接 1. 教程原文 面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。 当创建一个类时,您不需要重新编写新的…

0基础学习VR全景平台篇第41篇:编辑器底部菜单-素材管理

大家好,欢迎观看蛙色VR官方系列——后台使用课程! 本期为大家带来蛙色VR平台,底部菜单—素材管理功能操作。 功能位置示意 一、本功能将用在哪里? 素材管理,主要是对场景列表相关的基础操作做一个详细的讲解&#xf…

自研API 网关 - 媲美美团这套Shepherd网关架构!

作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获!😄 我说:“很多互联网大厂,很少基于 SpringMVC 模块对外提供 WEB 服务的 HTTP 接口!” 一下炸窝…

【瑞萨RA MCU创意氛围赛】基于FSP库开发 --- Qt遥控小车

文章目录 引言一、产品功能介绍二、硬件清单三、软件设计1. RASC2. Keil2. Qt 四、视频展示 引言 很高兴能够加入“野火”这个大家庭中,且能有机会参加第一期的【瑞萨RA MCU创意氛围赛】,在此之前,我竟都没能了解瑞萨这个产品,是…

如何计算一个实例占用多少内存?

我们都知道CPU和内存是程序最为重要的两类指标,那么有多少人真正想过这个问题:一个类型(值类型或者引用类型)的实例在内存中究竟占多少字节?我们很多人都回答不上来。其实C#提供了一些用于计算大小的操作符和API&#…

【026】C++的内联函数、函数重载、函数的默认参数与占位参数

C的内联函数、函数重载、函数的默认参数与占位参数 引言一、内联函数1.1、声明内联函数1.2、宏函数和内联函数的区别1.3、内联函数的注意事项 二、函数重载2.1、函数重载的概述2.2、函数重载的条件2.3、函数重载的底层实现原理 三、函数的默认参数四、占位参数五、extern "…

STM32单片机TFT显示AD9833 DDS信号发生器语音播报正弦波方波三角波

实践制作DIY- GC0146---TFT显示AD9833 DDS信号发生器 基于STM32单片机设计---TFT显示AD9833 DDS信号发生器 二、功能介绍: 硬件组成:STM32F103C系列最小系统板 1.8寸TFT彩屏AD9833信号模块4*4矩阵键盘DY-SV17F语音播报模块 1.通过4*4键盘来设定频率值和…

ExpertLLaMA:超越Vicuna,通过角色扮演增强指令,显著提升回答质量

本文向大家介绍我们刚刚开源的对话模型及相应的训练数据。 首先是 git Repo 和 paper 链接,欢迎大家给我们⭐star⭐ 论文标题: ExpertPrompting: Instructing Large Language Models to be Distinguished Experts 论文链接: https://arxiv.or…

.Net7矢量化的性能优化

前言 矢量化是性能优化的重要技术,也是寄托硬件层面的优化技术。本篇来看下。文章来源:微软官方博客 概括 一:矢量化支持的问题: 矢量化的System.Runtime.Intrinsics.X86.Sse2.MoveMask 函数和矢量化的Vector128.Create().Extract…