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

如何提高系统的可用性/高可用

提高系统可用性常用的一些方法,有缓存、异步、重试、幂等、补偿、熔断、降级、限流。

缓存

缓存的速度,比数据库快很多,添加缓存是简单有效的做法。
注意缓存与数据库的一致性,数据表记录变更时记得处理缓存。
Redis缓存的示例,详情见:https://blog.csdn.net/sinat_32502451/article/details/132819596

异步

耗时比较高的功能,可以异步处理。
常用的异步有线程池异步, MQ异步。

线程池异步,详情见:https://blog.csdn.net/sinat_32502451/article/details/133039624

CompletableFuture多任务异步,详情见:https://blog.csdn.net/sinat_32502451/article/details/133955576

重试

访问第三方系统,有时会超时,或者失败,可以进行重试。重试几次,有可能就成功了。
SpringBoot中使用@Retryable注解进行重试。
详情见:https://blog.csdn.net/sinat_32502451/article/details/133774582

重试需要保证幂等性。

幂等性

保证幂等性,有几种常用的方法:

  • 唯一索引
    比如订单id使用唯一索引,在插入相同的订单id时,会报错。
  • 状态机制。版本号机制。利用乐观锁。
update tt_order set status = 2 where status = 1 and id = 'abc'
  • 高并发的场景。可以用唯一key放到redis。
    第一次收到请求时,执行业务逻辑,并将唯一key放到redis中,再次收到请求,发现redis中已经有这个唯一key,就不再执行业务逻辑。

补偿

比如请求第三方系统,第三方系统没有回调时,可以主动调用查询接口。
或者是在接口中处理业务逻辑,有些没有执行成功,可以通过定时任务再次执行业务逻辑,进行补偿。

熔断

服务熔断: 在分布式架构中,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。
雪崩效应:是一种因服务提供者的不可用导致服务调用者的不可用,并将不可用逐渐放大的过程。
熔断可以避免服务雪崩。

常用的熔断:SpringCloud Hystrix 、 Sentinel

降级

服务降级:当服务器压力剧增的情况下,根据实际业务情况及流量,对一些非核心的服务和页面不进行处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。

为了保证重要或基本的服务能正常运行,可以将一些不重要或不紧急的服务或任务延迟使用或暂停使用。

限流

限流:限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理。

单机版的RateLimiter限流,详情见 : https://blog.csdn.net/sinat_32502451/article/details/133054998

分布式限流,可以使用 Redis配置lua脚本,或者是 Sentinel 限流。
详情见: https://zhuanlan.zhihu.com/p/556765390

相关文章:

如何提高系统的可用性/高可用

提高系统可用性常用的一些方法,有缓存、异步、重试、幂等、补偿、熔断、降级、限流。 缓存 缓存的速度,比数据库快很多,添加缓存是简单有效的做法。 注意缓存与数据库的一致性,数据表记录变更时记得处理缓存。 Redis缓存的示例&…...

PCA和LDA数据降维计算(含数学例子推导过程)

PCA算法和LDA算法可以用于对数据进行降维,例如可以把一个2维的数据降低维度到一维,本文通过举例子来对PCA算法和LDA算法的计算过程进行教学展示。 PCA算法计算过程(文字版,想看具体计算下面有例子) 1.将原始数据排列成n行m列的矩阵&#xf…...

题目 1053: 二级C语言-平均值计算(python详解)——练气三层初期

✨博主:命运之光 🦄专栏:算法修炼之练气篇(C\C版) 🍓专栏:算法修炼之筑基篇(C\C版) 🍒专栏:算法修炼之练气篇(Python版) ✨…...

Python —— UI自动化之Page Object模式

1、Page Object模式简介 1、二层模型 Page Object Model(页面对象模型), 或者也可称之为POM。在UI自动化测试广泛使用的一种分层设计 模式。核心是通过页面层封装所有的页面元素及操作,测试用例层通过调用页面层操作组装业务逻辑。 1、实战 …...

职能篇—自动驾驶产品经理

自动驾驶产品开发流程 在讲自动驾驶产品经理之前,先简单了解一下自动驾驶的开发体系。如上图所示,从产品需求开始,经由系统需求、系统架构、软件需求、软件架构,最终分解到软件代码实现模块,再经由MIL、SIL、HIL、VIL完…...

ubuntu安装golang

看版本:https://go.dev/dl/ 下载: wget https://go.dev/dl/go1.21.3.linux-amd64.tar.gz卸载已有的go,可以apt remove go,也可以which go之后删除那个go文件,然后: rm -rf /usr/local/go && tar…...

ES 8 新特性

1. async 和 await async 和 await 两种语法结合可以让异步代码像同步代码一样。(即:看起来是同步的,实质上是异步的。) 先从字面意思理解,async 意为异步,可以用于声明一个函数前,该函数是异步的。await 意为等待,即等待一个异步方法完成。 1.1 async async 声明(…...

linux-防火墙

目录 一、防火墙概念 1.软件防火墙 2.iptables默认规则 3.iptables的五链 4.iptables动作 5.四表五链 6.iptables实例 一、防火墙概念 linux下防火墙一般分为软件防火墙、硬件防火墙 硬件防火墙:在硬件的级别实现防火墙过滤功能,性能高&#xf…...

Pytorch--3.使用CNN和LSTM对数据进行预测

这个系列前面的文章我们学会了使用全连接层来做简单的回归任务,但是在现实情况里,我们不仅需要做回归,可能还需要做预测工作。同时,我们的数据可能在时空上有着联系,但是简单的全连接层并不能满足我们的需求&#xff0…...

爬虫进阶-反爬破解9(下游业务如何使用爬取到的数据+数据和文件的存储方式)

一、下游业务如何使用爬取到的数据 (一)常用数据存储方案 1.百万级别数据:单机数据库,搭建和使用方便快捷,成本低 2.千万级别数据:负载均衡的多台数据库,安全和稳定 3.海量数据:…...

Docker常用应用部署

Docker常用应用部署 一、Ubuntu系统Docker快速安装 Docker官网安装文档:https://docs.docker.com/engine/install/ubuntu/ # 文本处理的流编辑器 -i直接修改读取的文件内容,而不是输出到终端 # sed -i s/原字符串/新字符串/ /home/1.txt # 下面这个是修…...

【数据分享】2014-2022年我国淘宝村点位数据(Excel格式/Shp格式)

电子商务是过去一二十年我国发展最快的行业,其中又以淘宝为代表,淘宝的发展壮大带动了一大批服务淘宝电子商务的村庄,这些村庄被称为淘宝村! 截至到目前,阿里研究院梳理并公布了2014-2022年共9个年份的淘宝村名单&…...

Ubuntu 安装 docker-compose

在Ubuntu上安装Docker Compose,可以按照以下步骤进行操作: 下载 Docker Compose 二进制文件 sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker…...

vue2、vue3中路由守卫变化

什么是路由守卫? 路由守卫就是路由跳转的一些验证,比如登录鉴权(没有登录不能进入个人中心页)等等等 路由守卫分为三大类: 全局守卫:前置守卫:beforeEach 后置钩子:afterEach 单个…...

Leetcode—547.省份数量【中等】

2023每日刷题(八) Leetcode—547.省份数量 实现代码 static int father[210] {0};int Find(int x) {if(x ! father[x]) {father[x] Find(father[x]);}return father[x]; }void Union(int x, int y) {int a Find(x);int b Find(y);if(a ! b) {fathe…...

Nginx 防盗链

nginx防盗链问题 盗链: 就是a网站有一张照片,b网站引用了a网站的照片 。 防盗链: a网站通过设置禁止b网站引用a网站的照片。 nginx防止网站资源被盗用模块 ngx_http_referer_module 如何区分哪些是不正常的用户? HTTP Referer…...

26. 通过 cilium pwru了解网络包的来龙去脉

pwru是一种基于eBPF的工具,可跟踪Linux内核中的网络数据包,并具有先进的过滤功能。它允许对内核状态进行细粒度检查,以便通过调试网络连接问题来解决传统工具(如iptables TRACE或tcpdump)难以解决甚至无法解决的问题。在本文中,我将介绍pwru如何在不必事先了解所有内容的…...

刷题笔记day01-数组

704 题 主要强调,左闭右闭的情况,就是每次查询都会和 [left, right] 进行比较。所以后面的都是mid-1,mid1 的情况。 package mainfunc search(nums []int, target int) int {// 二分查找方法// 每次查找都是左闭右闭的情况left : 0right : …...

C#调用C++ 的DLL传送和接收中文字符串

1 c#向c传送中文字符串 设置&#xff1a;将 字符集 改为 使用多字节字符集 cpp代码&#xff1a; extern "C"_declspec(dllexport) int input_chn_str(char in_str[]) {cout<<in_str<<endl;return 0; }c#代码&#xff1a; [DllImport("Demo.dll…...

【MySQL】数据库常见错误及解决

目录 2003错误&#xff1a;连接错误1251错误&#xff1a;身份验证错误1045错误&#xff1a;拒绝访问错误服务没有报告任何错误net start mysql 发生系统错误 5。 1064错误&#xff1a;语法错误1054错误&#xff1a;列名不存在1442错误&#xff1a;触发器中不能对本表增删改1303…...

proxy-doctor:自动化诊断与修复开发工具代理配置的利器

1. 项目概述与核心价值最近在折腾一些需要稳定网络连接的项目时&#xff0c;遇到了一个老生常谈但又极其恼人的问题&#xff1a;代理配置。无论是开发环境里的包管理工具&#xff0c;还是日常使用的命令行工具&#xff0c;一旦涉及到网络请求&#xff0c;代理设置不对&#xff…...

AICoverGen终极指南:5分钟用AI制作专业级翻唱歌曲

AICoverGen终极指南&#xff1a;5分钟用AI制作专业级翻唱歌曲 【免费下载链接】AICoverGen A WebUI to create song covers with any RVC v2 trained AI voice from YouTube videos or audio files. 项目地址: https://gitcode.com/gh_mirrors/ai/AICoverGen 想不想让AI…...

如何在Mac上完美读写NTFS硬盘:Free NTFS for Mac终极指南

如何在Mac上完美读写NTFS硬盘&#xff1a;Free NTFS for Mac终极指南 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mounting, and management…...

JVM调优实战:让你的服务性能提升50%

一、背景 线上一个核心订单服务&#xff0c;QPS 3000左右&#xff0c;经常出现接口超时告警。监控显示&#xff1a; 平均RT: 180ms&#xff08;要求<100ms&#xff09;Full GC频率: 每天20次&#xff0c;每次STW 1.5sCPU使用率: 峰值85%服务规格: 8C16G&#xff0c;堆内存…...

一种用于并网光伏系统的创新型多层逆变器,以降低总谐波失真(THD)研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 &#x1f381…...

别再只盯着CSI-2了!用示波器实测MIPI D-PHY波形,手把手教你排查Camera不通的硬件问题

别再只盯着CSI-2了&#xff01;用示波器实测MIPI D-PHY波形&#xff0c;手把手教你排查Camera不通的硬件问题 调试Camera模块时&#xff0c;MIPI信号问题往往是硬件工程师最头疼的挑战之一。当系统出现图像异常、花屏或无法识别时&#xff0c;大多数工程师的第一反应是检查CSI-…...

防火墙和手动启动都试了?ArcGIS License Server无响应,可能是这两个核心文件在捣鬼

ArcGIS许可服务故障深度解析&#xff1a;当核心文件成为隐形杀手 当你面对ArcGIS License Server无响应的红色报错框&#xff0c;已经尝试了关闭防火墙、调整服务配置、甚至重启服务器等一系列标准操作后&#xff0c;那个令人沮丧的"cannot connect to license server sys…...

Claw框架数据库迁移工具claw-migrate:原理、实践与团队协作指南

1. 项目概述&#xff1a;一个专为Claw设计的迁移工具最近在折腾一个叫Claw的开源项目&#xff0c;它本身是一个轻量级的Web框架&#xff0c;用起来挺顺手。但项目迭代过程中&#xff0c;难免会遇到数据库结构变更、数据迁移这类“脏活累活”。手动写SQL脚本&#xff1f;太原始&…...

基于Nginx-Lua镜像构建高性能可编程网关的实践指南

1. 项目概述&#xff1a;一个为现代Web架构而生的Nginx镜像如果你和我一样&#xff0c;长期在容器化环境中部署和管理Web服务&#xff0c;那么你一定对Nginx的灵活性和Lua脚本的强大能力印象深刻。但将这两者结合&#xff0c;并打包成一个稳定、安全、功能齐全的Docker镜像&…...

Godot引擎实验项目解析:从角色控制到着色器优化的实战指南

1. 项目概述与核心价值如果你是一名游戏开发者&#xff0c;尤其是对独立游戏开发充满热情&#xff0c;那么“Godot”这个名字对你来说一定不陌生。它是一个功能强大、开源免费的游戏引擎&#xff0c;以其轻量、高效和友好的编辑器而闻名。然而&#xff0c;引擎本身只是一个工具…...