电商项目_性能优化_限流-降级-熔断

        针对电商系统,在遇到大流量时,必须要考虑如何保障系统的稳定运行,常用的手段:限流,降级,拒绝服务。

一、限流

限流算法:计数器、滑动窗口、漏铜算法、令牌桶算法。

限流的方案

  1. 前端限流
  2. 接入层 nginx 限流
  3. 网关限流
  4. 应用层限流

网关限流

限流方式:

  • 同一个ip的访问频率
  • 接口QPS
  • 黑白名单

1. 基于 redis+lua 脚本限流

        gateway 官方提供了Spring Cloud Gateway(RequestRateLimiter 过滤器工厂) ,基于 redis+lua 脚本方式,采用令牌桶算法实现了限流。

具体使用可以参考  微服务专题 Spring Cloud Gateway 实战。

2. 整合 sentinel 限流

2.1 接入Sentinel步骤

(网关服务指的是电商系统中的tulingmall-gateway模块)

  1. 下载Sentinel客户端包,启动
  2. 服务中引入Sentinel依赖:
    <!--添加 Sentinel 的依赖-->
    <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
    <!-- gateway 接入 sentinel -->
    <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
    </dependency>
  3. 修改 application.yml 配置,配置Sentinel

        

        4. 测试, 启动网关服务,商品服务,访问Sentinel客户端

2.2 限流配置方式

1. 请求QPS、请求线程数

2. 请求属性

3. API维度(实际一般都是对这个做限流配置)

2.3 Sentinel规则持久化配置

        Sentinel规则默认保存在内存中,如果Sentinel控制台服务宕机了,规则就会丢失,所以需要将Sentinel规则持久化。

持久化改造步骤:

1. 引入sentinel-datasource-nacos依赖

2. 增加数据源、配置中心等配置

3. 启动持久化改造后的 Sentinel 控制台

指定端口和 nacos 配置中心地址:

java -Dserver.port=8000 -Dsentinel.nacos.config.serverAddr=192.168.65.103:8848 -jar

tulingmall-sentinel-dashboard-1.8.4.jar

应用层限流

微服务接入Sentinel, 比如商品服务tulingmall-product,  接入过程同网关服务接入过程一致。

限流场景_热点参数限流

二、熔断 / 降级

        降级就是当系统的容量达到一定程度时,限制或者关闭系统的某些非核心功能,从而把有限的资源保留给更核心的业务。

降级策略

1. 自动运维

2. 功能维度

3. 系统层次维度

整合Sentinel降级

1.在跨服务调用时,OpenFeign整合Sentinel, 并实现降级后的业务功能。

2. 配置降级规则

基于响应时间:

基于异常数: 

三、拒绝服务

        拒绝服务可以说是一种不得已的兜底方案,用以防止最坏情况发生,防止因把服务器压跨而长时间彻底无法提供服务。 系统直接拒绝所有请求的示例:

  • CPU 使用率达到90%
  • 系统 load 值达到 2*CPU 核数时

配置方式:

  1. Nginx 上设置过载保护:阿里开发的nginx过载保护插件sysguard :https://github.com/alibaba/nginx-http-sysguard
  2.  Sentinel 提供了系统规则限流

        Sentinel 系统自适应限流 从 整体维度对应用入口流量进行控制,结合应用的 Load、CPU 使用率、总体平均 RT、入口 QPS 并发线程数等几个维度的监控指标,通过自适应的流控策略,让系统的入口流量和系统的负载达到一个平衡,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。

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

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

相关文章

javaweb开发之Servlet笔记

第五章 Servlet 一 Servlet简介 1.1 动态资源和静态资源 静态资源 无需在程序运行时通过代码运行生成的资源,在程序运行之前就写好的资源. 例如:html css js img ,音频文件和视频文件 动态资源 需要在程序运行时通过代码运行生成的资源,在程序运行之前无法确定的数据,运行时…

sqli-labs靶场less26/a

less261.我们打开这一关来看一下&#xff0c;他提示我们空格和其他一些什么都被过滤了2.我们来尝试绕过,按照之前的做法&#xff0c;可以看到闭合方式为单引号&#xff0c;并且过滤了--与#3.我们来尝试绕过一下&#xff0c;发现可以以下的方式绕过&#xff0c;空格用&#xff0…

从Docker衔接到导入黑马商城以及前端登录显示用户或密码错误的相关总结(个人理解,仅供参考)

目录 一、前言 二、从Docker衔接到导入黑马点评 三、谈谈端口映射及我的前端登录显示用户或密码错误 四、总结 一、前言 在学习24黑马SpringCloud课程时&#xff0c;说实话Docker那一块再到导入黑马商城是真的有点折磨&#xff0c;个人感觉老师水平还是很强的&#xff0c;但…

控制建模matlab练习10:滞后补偿器

此练习主要是&#xff1a;关于滞后补偿器。 ①滞后补偿器作用&#xff1b; ②不同滞后补偿器的效果&#xff1b; 一、为什么使用滞后补偿器 滞后补偿器&#xff1a;主要用于改善系统的稳态误差&#xff1b;滞后补偿器设计思路&#xff1a;同时为系统增加一个极点和零点&#xf…

力扣-108.将有序数组转换为二叉搜索树

题目链接 108.将有序数组转换为二叉搜索树 class Solution {public TreeNode Traverse(int[] nums, int begin, int end) {if (end < begin)return null;int mid (begin end) / 2;TreeNode root new TreeNode(nums[mid]);root.left Traverse(nums, begin, mid - 1);ro…

`npm error code CERT_HAS_EXPIRED‘ 问题

问题: npm error code CERT_HAS_EXPIRED npm error errno CERT_HAS_EXPIRED npm error request to https://r2.cnpmjs.org/string_decoder/-/string_decoder-1.3.0.tgz failed, reason: certificate has expired npm error A complete log of this run can be found in: /home…

数据结构---概念、数据与数据之间的关系(逻辑结构、物理结构)、基本功能、数据结构内容、单向链表(概念、对象、应用)

数据结构在数据结构部分&#xff0c;研究数据在内存中如何存储。数据存储的形式有两种&#xff1a;变量和数组&#xff08;数据结构的顺序表&#xff09;。一、什么是数据结构&#xff1f;数据类型被用来组织和存储数据。程序设计 数据结构 算法二、数据与数据之间的关系1、逻…

CMS框架漏洞

一、WordPress姿势一1.下载vulhub靶场cd /vulhub/wordpress/pwnscriptum docker-compose up -d2.我们进入后台&#xff0c;网址拼接/wp-admin/3.我们进入WP的模板写入一句话木马后门并访问其文件即可GetShell4然后我们拼接以下路径/wp-content/themes/twentyfifteen/404.php&am…

控制建模matlab练习07:比例积分控制-③PI控制器的应用

此练习主要是比例积分控制&#xff0c;包括三部分&#xff1a; ①系统建模&#xff1b; ②PI控制器&#xff1b; ③PI控制器的应用&#xff1b; 以下是&#xff0c;第③部分&#xff1a;PI控制器的应用。 一、比例积分控制的应用模型 1、整个系统是如图&#xff0c;这样一个单位…

【MySQL】MySQL 中的数据排序是怎么实现的?

MySQL 数据排序实现机制详解 MySQL 中的数据排序主要通过 ORDER BY 子句实现&#xff0c;其内部实现涉及多个优化技术和算法选择。让我们深入探讨 MySQL 排序的完整实现机制。 一、排序基础&#xff1a;ORDER BY 子句 基本语法&#xff1a; SELECT columns FROM table [WHERE c…

JVM-垃圾回收器与内存分配策略详解

1.如何判断对象已死1.1 对象引用的4种类型&#xff08;强软弱虚&#xff09;1.1.1 强引用特点&#xff1a;最常见的引用类型&#xff0c;只要强引用存在&#xff0c;对象绝不会被回收Object strongObj new Object(); // 强引用注意&#xff1a;集合类型&#xff0c;如果对象不…

新手向:简易Flask/Django个人博客

从零开始搭建个人博客:Flask与Django双版本指南 本文将详细讲解如何使用两种主流Python框架构建功能完整的个人博客系统。我们将从零开始,分别使用轻量级的Flask框架和功能全面的Django框架实现以下核心功能: 用户认证系统: 用户注册/登录/注销功能 密码加密存储 会话管理…

使用 Trea cn 设计 爬虫程序 so esay

使用 Trea cn 设计 爬虫程序 so esay 在现代数据驱动的时代&#xff0c;网络爬虫已成为数据采集的重要工具。传统的爬虫开发往往需要处理复杂的HTTP请求、HTML解析、URL处理等技术细节。而借助 Trea CN 这样的AI辅助开发工具&#xff0c;我们可以更高效地构建功能完善的爬虫程…

MySQL Redo Log

MySQL Redo Log MySQL主从复制&#xff1a;https://blog.csdn.net/a18792721831/article/details/146117935 MySQL Binlog&#xff1a;https://blog.csdn.net/a18792721831/article/details/146606305 MySQL General Log&#xff1a;https://blog.csdn.net/a18792721831/artic…

项目实战1:Rsync + Sersync 实现文件实时同步

项目实战&#xff1a;Rsync Sersync 实现文件实时同步 客户端中数据发生变化&#xff0c;同步到server端&#xff08;备份服务器&#xff09;。 Rsync&#xff1a;负责数据同步&#xff0c;部署在server端。 Sersync&#xff1a;负责监控数据目录变化&#xff0c;并调用rsync进…

Spring Boot 全 YAML 配置 Liquibase 教程

一、项目初始化配置 1.1 创建 Spring Boot 项目 通过 Spring Initializr 生成基础项目&#xff0c;配置如下&#xff1a; ​​Project​​: Maven​​Language​​: Java​​Spring Boot​​: 3.5.3&#xff08;最新稳定版&#xff09;​​Project Metadata​​: Group: com…

STM32-驱动OLED显示屏使用SPI(软件模拟时序)实现

本章概述思维导图&#xff1a;SPI通信协议SPI通信协议介绍SPI通讯&#xff1a;高速的、串行通讯、全双工、同步、总线协议&#xff1b;&#xff08;通过片选信号选中设备&#xff09;&#xff1b;注&#xff1a;SPI通讯通过片选信号选中设备&#xff0c;串口通讯通过端口号选中…

Easy系列PLC相对运动指令实现定长输送(ST源代码)

汇川Easy系列PLC总线伺服转矩控制功能块 Easy系列PLC总线伺服转矩控制功能块(详细PDO配置+完整ST源代码)_pdo中添加目标力矩然后映射到轴中-CSDN博客文章浏览阅读215次。Easy系列PLC如何实现轮廓速度模式PV速度模式Easy系列PLC如何实现轮廓速度模式PV速度控制_汇川easy plc轮廓…

SpringCloud学习第一季-4

目录 16.SpringCloud Alibaba Nacos服务注册和配置中心 SpringCloud Alibaba简介 1. 为什么出现 SpringCloud Alibaba 2. SpringCloud Alibaba带来了什么 2.1 能干什么 2.2 去哪里下载 2.3 怎么玩 3. 学习资料的获取 17.SpringCloud Alibaba Nacos服务注册和配置中心 …

嵌入式开发学习———Linux环境下数据结构学习(五)

折半查找&#xff08;二分查找&#xff09;适用于已排序的数组&#xff0c;通过不断缩小查找范围定位目标值。int binarySearch(int arr[], int size, int target) {int left 0, right size - 1;while (left < right) {int mid left (right - left) / 2;if (arr[mid] t…