当前位置: 首页 > news >正文

聊一聊大型网站稳定性建设思路

目录

架构阶段的稳定性建设项目

编码阶段的稳定性建设

测试阶段的稳定性建设

发布阶段的稳定性建设

运行阶段的稳定性建设项目

故障发生时的稳定性建设


网站稳定性的建设是一项综合的系统工程,就像人的健康一样,如果平时不注意健康饮食、不注意锻炼,时间 长身体肯定会出问题,对稳定性的考量也是贯穿整个研发生命周期的如下图:


在网站的架构设计时就要考虑稳定性 考虑到网络光纤有可能被挖断,如果只有一个 房那就悲剧了, 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文件&#xff…...

视频处理基础之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…...

部署project_exam_system项目——及容器的编排

(一)安装docker、编辑daemon.json文件、安装docker-compose编排容器、启动docker 1.环境准备 [rootdocker--1 ~]# rz -Erz waiting to receive.[rootdocker--1 ~]# lsanaconda-ks.cfg docker.sh[rootdocker--1 ~]# source docker.sh [rootdocker--1 ~…...

网络工程师学习笔记——无线通信网

移动通信 从1G到3G都是针对语音通话设计的,只有4G才可以与Internet衔接 1978年美国贝尔实验室开发了高级移动电话系统(AMPS),可以随时随地的进行通信,采用蜂窝技术解决了公用通信系统所面临的大容量要求和…...

Vue(十三) 路由、路由嵌套、query、param传参、propos、replace属性。编程式路由导航,特有的生命周期函数,路由守卫

文章目录 路由1. 基本使用2. 多级(嵌套)路由3. 路由query传参4. 命名路由5. 路由param传参6. propos属性7. replace属性8. 编程式路由导航9. 缓存路由组件10. actived,deactived生命周期函数11. 路由守卫1、全局路由2、独享路由3、组件内路由守卫 12. 路由器工作的两…...

ArgoUML与StarUML的安装

ArgoUML与StarUML的安装 说明: 首次发表日期:2024-09-07ArgoUML 官网: https://argouml-tigris-org.github.io/tigris/argouml/StarUML 官网: https://staruml.io/ ArgoUML 以下内容基于: https://blog.csdn.net/h…...

828华为云征文|华为云服务器Flexus X搭建悟空crm管理系统——助力企业云上管理(解决APP Referer校验失败问题)

1、为什么我们企业会选择Flexus云服务器X实例来部署自己的CRM管理系统? 因为基于华为云Flexus X实例搭建CRM管理平台,可以从容面对企业内部瞬息万变的业务压力变化 2、华为云服务器Flexus X方案及优势: 灵活伸缩 搭配弹性伸缩服务AS及负载均…...

计算机毕业设计选题推荐-健康健身追踪系统-运动健身系统-Java/Python项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...

FPGA开发:初识FPGA × 开发环境

FPGA是什么? FPGA的全称是现场可编程门阵列(Field Programmable Gate Array),一种以数字电路为主的集成芯片,属于可编程逻辑器件PLD的一种。简单来说,就是能用代码编程,直接修改FPGA芯片中数字…...

电脑驱动分类

电脑驱动程序(驱动程序)是操作系统与硬件设备之间的桥梁,用于使操作系统能够识别并与硬件设备进行通信。以下是常见的驱动分类: 1. 设备驱动程序 显示驱动程序:控制显卡和显示器的显示功能,负责图形渲染和…...

理解C++全局对象析构顺序与 IPC 资源管理:避免 coredump

文章目录 0. 概述1. 问题背景2. 问题分析3. 解决方案:手动释放资源4. 深入剖析:为什么手动调用 reset() 有效?5. 延伸思考:如何避免全局对象带来的问题?6. 总结 0. 概述 在编写 C 程序时,使用全局或静态对…...

云计算之大数据(下)

目录 一、Hologres 1.1 产品定义 1.2 产品架构 1.3 Hologres基本概念 1.4 最佳实践 - Hologres分区表 1.5 最佳实践 - 分区字段设置 1.6 最佳实践 - 设置字段类型 1.7 最佳实践 - 存储属性设置 1.8 最佳实践 - 分布键设置 1.9 最佳实践 - 聚簇键设置 1.10 最佳实践 -…...