聊一聊大型网站稳定性建设思路
目录
架构阶段的稳定性建设项目
编码阶段的稳定性建设
测试阶段的稳定性建设
发布阶段的稳定性建设
运行阶段的稳定性建设项目
故障发生时的稳定性建设
网站稳定性的建设是一项综合的系统工程,就像人的健康一样,如果平时不注意健康饮食、不注意锻炼,时间 长身体肯定会出问题,对稳定性的考量也是贯穿整个研发生命周期的如下图:
在网站的架构设计时就要考虑稳定性 考虑到网络光纤有可能被挖断,如果只有一个 房那就悲剧了, 100% 流量都没了 甚至要考虑自然灾害的影响而多地建设机房稳定性的建设中有两个重要因素:一是思想上重视,开发人员对稳定性的重视(也就是敬畏之心)可以避免 70% 的故障;二是规范和工具的建设,用以保障稳定性。
架构阶段的稳定性建设项目
一个网站要有好的稳定性,必须在架构设计阶段就做长远考虑,就像建房子要先打好基础一样,否则楼建得越高越危险。
建设高稳定性的架构必须注意以下几点
避免单点: 高可用架构设计的第一条就是要避免单点,从概率出发来 ,无论是机器还是人,没有什么东西是不会犯错的, 避免某个完整的环节成为单点是架构设计的原则但是,在某些场景中,有些功能必须放在同一个应用中,例如统一登录、 网关 、安全过滤等 ,此时要保证尽 按照人群来划分,不要在逻辑上出现单点;或者尽 把服务拆成组件迁到不同的端上执行,例如,可以把安全服务作为 个模块集成 Nginx 或者应用机器中,而不是把它做成一个远程服务接口。
分组隔离: 把应用拆得更细一点,不同的功能模块做成单独的分组,每个分组占用一部分机器集群,这样可以做到服务分组隔离,避免不太重要的分组对重要分组的 现在非常流行的微服务就是一种非常好的分组隔离的实践。
异步化: 在系统设计中要让尽可能多的远程调用异步化,这 是一项重要原则很多时候会因为一个不太重要的功能的强依赖拖垮了整个应用,所以要尽量把不太重要的依赖改成异步调用,避免影响主调用链路的稳定性。
异地容灾 :考虑到很多不可抗力因素 影响,我 需要设计网站的 地容灾甚至全球部署策略,这些不可抗力的事件往往会影响网站的整个架构,必须做长远打算。
编码阶段的稳定性建设
编程阶段的稳定性建设尤其重要, 个好的程序在编码阶段就决定了整个应用系统的质 ,所以在编码阶段要注意下面一些规则:
错误捕获 :一个优雅的系统必然有一套优雅的异常处理机制,在适当的地方如I/O 处理、远程调用、多线程等关键处捕获异常非常重要,防御性编程可以更好地保证系统的健壮性;
异步线程: 在一些批处理调用的地方采用异步线程可以保证主请求的正常返回,同样也可以做到部分的隔离,防止部分请求挂起整个应用;
超时处理 :在远程调用或者调用外围设备时,非常有必要设定超时时间,这样可以保证所有的请求都有一个可预知的返回结果;
限流保护: 每个应用都有一个承载极限,超过这个极限就会带来很大的不确定性,因此,设置自我保护机制可以保证程序的健壮性;
测试阶段的稳定性建设
测试是程序上线前的最后一道保障,测试也是验证程序是否达到预期功能的手段,在本阶段要注意以下事项
自动化对比测试 对比测试就是用线上真实的环境和数据与预发环境对相同的业务接口做返回值的比较,以此判断新上线的代码是否符合预期。
Beta 测试 在线上的真实环境中选取若干台机器,通过绑定 VIP 的方式访问此机器上的数据,以此验证程序是否正确。
发布阶段的稳定性建设
发布阶段稳定性建设应留意以下事项:
分批发布 分批发布可以降低发布风险,不仅可以减少系统部署重启引起的RT 抖动,也可以在发现问题时 即终止发布
多版本发布 合并部署是将多个应用系统同时部署在同 Web 容器实例中共享同 个进程,每个应用之间相互隔离,但是应用之间的 RPC 是通过本地调用而不通过网络调用。
运行阶段的稳定性建设项目
运行阶段稳定性建设要做好几件事:实时监控报警、过载保护和自动降级、实时数据对账,核心原则是实时发现问题,提供必要的保护措施。
实时监控报警 线上监控必须包含系统监控,主要是监控服务器的 CPU Loa磁盘、内存等一些系统指标的异常情况;应用监控主要是监控响应时间、 QPS异常错误等;业务监控主要是监控一些业务指标是否有异常(如实时的下单量、司机和乘客的在线数量业务指标)。
过载保护和自动降级 线上运行中的系统需要有一些保护措施,如系统的某些指标达到瓶颈时要有必要的保护 Loa 达到系统的最高瓶颈时需要拒绝一些请求,以防止系统被压垮;涉及 些远程调用时可以设置最大并发数,一旦超过该阀值就自动 fast fail 以保护系统。
实时数据对账 这属于业务监控范围 在涉及 些敏感信息时,为了确保正确性,需要有实时的对账校验,最典型的就是资金数据,以及涉及跨单元数据复制时对数据一致性的对账检查.
故障发生时的稳定性建设
一旦发生故障,最重要的就是快速止损、定位故障并快速恢复 按照经验,当故障发生时,第一反应就是快速回滚了解故障现象,根据故障现象判读故障原因,进而找出解决办法。
减少故障的定位时间和快速恢复策略在故障发生时是至关重要的。
故障定位 快速定位故障可以缩短故障的恢复时间 如何定位故障?据统计,90% 的故障都是由变更所致,所以快速收集变更信息和线上机器的异常数据非常重要,但难点在于这些数据往往散落在各个 方,井且格式多样。
快速恢复 影响故障恢复时间的一是故障定位时间,二是所采用的快速恢复的手段 例如在多版本部署出现故障时,可以通过快速切换版本来恢复;在异地多活的情况下可以把流量切换到不同的单元来止损。
相关文章:

聊一聊大型网站稳定性建设思路
目录 架构阶段的稳定性建设项目 编码阶段的稳定性建设 测试阶段的稳定性建设 发布阶段的稳定性建设 运行阶段的稳定性建设项目 故障发生时的稳定性建设 网站稳定性的建设是一项综合的系统工程,就像人的健康一样,如果平时不注意健康饮食、不注意锻炼…...

Nginx常用配置
Windows版本Nginx开机自启动 可直接下载已经配置好的文件,点击即可下载:Windows版本Nginx1.26.0 下载WinSW v2.12.0 首先从https://github.com/winsw/winsw/releases下载WinSW v2.12.0 下载Nginx 下载地址https://nginx.org/en/download.html 修…...

前端开发中遇到的小问题以及解决方案记录2
1、H5中适配屏幕的工具-postcss-px-to-viewport postcss-px-to-viewport。因为设计稿一般给的都是375px宽度的,所以假如一个字体是16px,那么在开发中不能直接写死为16px,因为各个厂商的手机屏幕大小是不同的,所以要根据屏幕大小去…...

Qt-常用控件(3)-输入类
1. QLineEdit QLineEdit 用来表示单行输入框.可以输入一段文本,但是不能换行 核心属性 属性说明text输入框中的文本inputMask输入内容格式约束maxLength最大长度frame是否添加边框echoMode显示方式. QLineEdit::Normal :这是默认值,文本框会显示输入的文本。QLineE…...
使用Docker启动Redis容器并映射端口
在现代软件开发中,Redis 是一种非常流行的开源内存数据结构存储,通常用作数据库、缓存或消息传递系统。Docker 是一个开源的应用容器引擎,它允许开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux …...

用fastapi搭建cpca地址提取服务接口
以前的客户地址比较乱,现在想提取出省份城市, 开始了解分词技术,后发现python有这样的库 cpca提取地址挺不错,可以从垃圾地址中提取省市区以及区号。 文章会用fastapi搭建服务端 通过post调用cpca,提取来了后&#…...
libvncclient编写多线程qt的VNC客户端
概述 使用qt和libvncclient编写vnc的客户端程序,多线程读写,拒绝卡顿。qt环境:5.15.3libvncclient:0.9.14下载地址:https://github.com/LibVNC/libvncserver/releases 编译libvncclient 打开CMakeList文件ÿ…...
视频处理基础之gradio框架实现
这些函数是用于处理视频文件的Python代码片段,它们依赖于ffmpeg和ffprobe工具,这些工具是FFmpeg项目的一部分,用于处理视频和音频数据。下面是每个函数的用途和用法的总结: 1. ffmpeg_installed() 函数: - 用途&am…...

黑马点评2——商户查询缓存(P37店铺类型查询业务添加缓存练习题答案)redis缓存、更新、穿透、雪崩、击穿、工具封装
文章目录 什么是缓存?添加Redis缓存店铺类型查询业务添加缓存练习题 缓存更新策略给查询商铺的缓存添加超时剔除和主动更新的策略 缓存穿透缓存空对象布隆过滤 缓存雪崩解决方案 缓存击穿解决方案基于互斥锁方式解决缓存击穿问题基于逻辑过期的方式解决缓存击穿问题…...

概率DP (由一道绿题引起的若干问题。目前为一些老题,蒟蒻的尝试学习1.0)
概率DP: 利用动态规划去解决 概率 期望 的题目。 概率DP 求概率(采用顺推) 从 初始状态推向结果,同一般的DP类似,只是经历了概率论知识的包装。 老题: 添加链接描述 题意: 袋子里有w只白鼠&am…...
[Python]生成器和yield关键字
生成器和yield关键字 1.生成器介绍: 概述: 它指的是 generator, 类似于以前学过的: 列表推导式, 集合推导式, 字典推导式… 作用: 降低资源消耗, 快速(批量)生成数据. 实现方式: 1.推导式写法. my_generator (i for i in range(5)) 2.yield写法. def get_gene…...

Nginx 负载均衡+高可用 集群部署(Keepalived+LVS DR模式)
一、LVS负载均衡简介 1.1 LVS基本介绍 LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导开发的开源负载均衡项目,目前LVS已经被集成在Linux内核中。该项目在Linux内核中实现了基于IP地址的请求数据负载均衡调度方…...
算法 | 基础 | 出现奇数次的数字
这里写自定义目录标题 异或运算题目1题目2 本篇是关于异或(^)运算的运用。后期看算法过程中如果再碰到异或的都会收录到本篇中 异或运算 在逻辑学中,逻辑算符异或(exclusive or)是对两个运算元的一种逻辑析取类型&am…...

log4j 控制台和文件输出乱码问题解决
一个小问题,却让我感觉到,现在真正动脑的人很少。。我来说说吧。 今天遇到一个小问题, log4j输出到文件乱码,控制台正常。显然是编码问题导致。Google一搜,几乎一水的说: 项目中log4j在英文版linux下输出中…...

在国产芯片上实现YOLOv5/v8图像AI识别-【4.2】RK3588获取USB摄像头图像推流RTSP更多内容见视频
本专栏主要是提供一种国产化图像识别的解决方案,专栏中实现了YOLOv5/v8在国产化芯片上的使用部署,并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频:https://www.bilibili.com/video/BV1or421T74f 前言…...
TCP/IP协议栈详解及其在现代网络中的应用
在当今数字化时代,网络已成为我们生活中不可或缺的一部分。无论是社交、工作还是娱乐,网络都在背后发挥着至关重要的作用。而这一切的实现,都离不开TCP/IP协议栈。本文将详细介绍TCP/IP协议栈的结构、各层功能以及它在现代网络中的应用。 什…...

亚信安全荣获“2024年网络安全优秀创新成果大赛”优胜奖
近日,由中央网信办网络安全协调局指导、中国网络安全产业联盟(CCIA)主办的“2024年网络安全优秀创新成果大赛”评选结果公布。亚信安全信舱ForCloud荣获“创新产品”优胜奖,亚信安全“宁波市政务信息化网络数据安全一体化指挥系统…...

如何从硬盘恢复已删除/丢失的文件?硬盘恢复已删除的文件技巧
如何从硬盘恢复已删除/丢失的文件?本教程将教您如何使用专业硬盘恢复软件从内置或外置硬盘恢复数据,或不使用软件从硬盘恢复已删除的文件。 “有人知道如何从外部硬盘恢复文件吗?当我将外部硬盘插入计算机时,我错误地删除了一些文…...

[Linux]:权限
✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. Linux权限的基本概念 1.1 root与普通用户 在Linux系统中,存在…...
启动Spring Boot报错
一、遇到的问题 启动Spring Boot报错 Unable to close ApplicationContext org.springframework.boot.SpringApplication: Application run failed java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.cache.CacheAutoCo…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...

《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》
近日,嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》,海云安高敏捷信创白盒(SCAP)成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天,网络安全已成为企业生存与发展的核心基石,为了解…...