您的位置:首页 > 科技 > IT业 > 淘宝电商需要投资多少钱_html简单网页模板_免费网站建站2773_百度分公司

淘宝电商需要投资多少钱_html简单网页模板_免费网站建站2773_百度分公司

2025/3/10 3:42:54 来源:https://blog.csdn.net/m0_63949203/article/details/146112767  浏览:    关键词:淘宝电商需要投资多少钱_html简单网页模板_免费网站建站2773_百度分公司
淘宝电商需要投资多少钱_html简单网页模板_免费网站建站2773_百度分公司

Sentinel 笔记

1 介绍

Sentinel 是阿里开源的分布式系统流量防卫组件,专注于 流量控制、熔断降级、系统保护

官网:https://sentinelguard.io/zh-cn/index.html

wiki:https://github.com/alibaba/Sentinel/wiki

对比同类产品

产品特点
HystrixNetflix 开源,功能全面但已停止维护,基于线程池隔离,资源消耗较大
Resilience4j轻量级,基于函数式编程,但需要结合其他组件实现完整功能
Sentinel轻量级,实时监控和控制,支持动态规则配置,与 Spring Cloud 深度集成

2 架构

在这里插入图片描述

  • 核心模块
    • 资源:被保护的代码逻辑(如接口、方法)。
    • 规则:流量控制、熔断降级等策略。
    • 控制台:可视化规则配置与实时监控。

4 环境搭建

4.1 依赖

<!-- Spring Cloud Alibaba Sentinel -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

4.2 启动控制台

  1. 下载 Sentinel Dashboard 官方 Release或📎sentinel-dashboard-1.8.8.jar

  2. 启动命令:

    下载完成后:在文件目录输入cmd进入bash命令行

    在命令行窗口输入:即可启动项目

 java -jar sentinel-dashboard-1.8.8.jar

3.通过http://localhost:8080即可访问sentinel的控制台

在这里插入图片描述

正常访问后显示的界面:
在这里插入图片描述

4.3 配置连接

application.yml 中配置:

# 订单以及商品都要配置
spring:cloud:sentinel:transport:dashboard: localhost:8080 # 控制台地址eager: true # 立即初始化

配置成功后:

在这里插入图片描述

假设我们要把createOrder注册为我们要管理的服务。

    @SentinelResource(value = "createOrder")public Order createOrder(Long userId, Long productId) {//Product product = productFeignClient.getProductById(productId);//使用RestTemplate实现负载均衡//Product product = getProductFromRemqteWithLoadBalanceAnnotation(productId);//使用feignClient实现远程调用Product product = productFeignClient.getProductById(productId);Order order = new Order();order.setId(1L);order.setTotalAmount(product.getPrice().multiply(new BigDecimal(product.getNum())));//order.setTotalAmount(BigDecimal.valueOf(0));order.setUserId(userId);order.setNickName("zhangsan");order.setAddress("尚硅谷");order.setProductList(Arrays.asList(product));return order;}

创建订单的请求:http://localhost:8000/order/create?userId=1&productId=100

在这里插入图片描述

接下来就可以对资源进行流控。

QPS:每秒能接收的请求数

5 异常处理

image.png

5.1 自定义 BlockExceptionHandler

目的:处理业务异常,出现异常可以给前端传递一些消息。

实现 BlockExceptionHandler 接口,处理流控/熔断异常:

// order模块下
@Component
public class MyBlockExceptionHandler implements BlockExceptionHandler {private ObjectMapper objectMapper = new ObjectMapper();@Overridepublic void handle(HttpServletRequest request, HttpServletResponse response,String resourceName, BlockException e) throws Exception {response.setStatus(429); //too many requestsresponse.setContentType("application/json;charset=utf-8");PrintWriter writer = response.getWriter();R error = R.error(500, resourceName + " 被Sentinel限制了,原因:" + e.getClass());String json = objectMapper.writeValueAsString(error);writer.write(json);writer.flush();writer.close();}
}

5.2 blockHandler

使用 @SentinelResource 注解指定降级方法:

 @SentinelResource(value = "createOrder",blockHandler = "createOrderFallback")@Overridepublic Order createOrder(Long productId, Long userId) {
//        Product product = getProductFromRemoteWithLoadBalanceAnnotation(productId);//使用Feign完成远程调用Product product = productFeignClient.getProductById(productId);Order order = new Order();order.setId(1L);// 总金额order.setTotalAmount(product.getPrice().multiply(new BigDecimal(product.getNum())));order.setUserId(userId);order.setNickName("zhangsan");order.setAddress("尚硅谷");//远程查询商品列表order.setProductList(Arrays.asList(product));return order;}//出现异常,兜底回调public Order createOrderFallback(Long productId, Long userId, BlockException e){Order order = new Order();order.setId(0L);order.setTotalAmount(new BigDecimal("0"));order.setUserId(userId);order.setNickName("未知用户");order.setAddress("异常信息:"+e.getClass());return order;}
//没自定义异常,就会自动向上抛,最后给Spring的全局拦截器捕获到,由spring去处理异常

5.3 OpenFeign-兜底回调

  1. 实现 Fallback 类:
@FeignClient(value = "service-product",fallback = ProductFeignClientFallback.class) // feign客户端
public interface ProductFeignClient {//mvc注解的两套使用逻辑//1、标注在Controller上,是接受这样的请求//2、标注在FeignClient上,是发送这样的请求@GetMapping("/product/{id}")Product getProductById(@PathVariable("id") Long id);}

2.在 Feign 接口中指定:

@FeignClient(name = "user-service", fallback = UserServiceFallback.class)
public interface UserService { /* ... */ }

6 规则 - 流量控制

image.png

6.1 阈值类型

  • QPS:每秒请求数。
  • 线程数:并发线程数。

6.2 流控模式

img

  • 直接:针对当前资源。
  • 关联:关联资源触发阈值时限流。
  • 链路:基于调用链路限流。

6.3 流控效果

image.png

  • 快速失败:直接拒绝请求。
  • Warm Up:预热模式,逐步增加阈值。
  • 排队等待:请求进入队列等待处理。

7 规则 - 熔断降级

7.1 断路器状态

image.png

  • Closed:正常状态。
  • Open:熔断状态,拒绝所有请求。
  • Half-Open:尝试放行部分请求探测恢复情况。

7.2 工作原理

image.png

  • 慢调用比例:响应时间超过阈值且比例超限。
  • 异常比例:异常比例超限。
  • 异常数:异常数超限。

7.3 熔断与兜底

image.png


8 规则 - 热点参数

image.png

8.1 环境搭建

  1. 添加热点参数限流规则:
 @GetMapping("/seckill")@SentinelResource(value = "seckill-order",fallback = "seckillFallback")public Order seckill(@RequestParam(value = "userId",required = false) Long userId,@RequestParam(value = "productId",defaultValue = "1000") Long productId){Order order = orderService.createOrder(productId, userId);order.setId(Long.MAX_VALUE);return order;}public Order seckillFallback(Long userId,Long productId, BlockException exception){System.out.println("seckillFallback....");Order order = new Order();order.setId(productId);order.setUserId(userId);order.setAddress("异常信息:"+exception.getClass());return order;}

重点总结

  1. 核心功能
    • 流量控制(QPS/线程数)、熔断降级(慢调用/异常比例)、热点参数限流。
  2. 优势
    • 动态规则配置,实时监控,与 Spring Cloud 无缝集成。
  3. 实操关键
    • 控制台启动后需配置 spring.cloud.sentinel.transport.dashboard
    • 使用 @SentinelResource 定义资源和降级逻辑。
    • OpenFeign 需结合 Fallback 类实现服务降级。
  4. 注意事项
    • 规则配置后需持久化到 Nacos/Redis,避免重启丢失。
    • 生产环境建议开启 Sentinel 的集群流控功能。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com