微服务——Sentinel限流熔断入门

x33g5p2x  于2021-10-28 转载在 其他  
字(1.9k)|赞(0)|评价(0)|浏览(290)

1.(拓展)模拟服务的注册与发现(多线程)

  • ConcurrentHashMap 线程安全 底层是桶状结构
  • HashTable 排他锁
  • 读写锁的使用 悲观写 乐观读
  • 考虑安全与性能
  • HashMap通常用于单线程或者方法内部使用 因为线程不安全

2.Sentinel限流熔断

2.1准备工作

2.1.1下载并启动Sentinel

启动命令

java -Dserver.port=8180 -Dcsp.sentinel.dashboard.server=localhost:8180 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.1.jar

2.1.2登录Sentinel

2.2入门案例

2.2.1在provider中添加sentinel依赖

<!--添加sentinel依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>

添加sentinel依赖 会在项目中添加一个拦截器对象,这个对象会对服务发出的请求进行拦截,拦截到请求以后,会与sentinel控制台定义的规则进行比对,假如在允许的范围之内,则继续访问,否则进行限流或者降级

2.2.2修改yml文件

2.2.3新建Controller层

package com.jt.provider.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/provider")
public class ProviderSentinelController {
    @GetMapping("/sentinel01")
    public String sentinel01(){
        return "sentinel 01 text";
    }
}

实现效果

2.2.4测试限流

sentinel限流的基本原理

  • 底层拦截请求,通过流控规则限定对资源的访问
  • 拦截器

2.3流控模式

2.3.1关联模式

2.3.2链路模式

  • @SentinelResource作用:使用此注解描述的方法,在此方法被访问时
    会在sentinel的簇点链路中显示,此注解中指定的名字就是资源名,我们可以对这个资源进行访问, 按照指定的链路进行限流设计.

创建Service层

package com.jt.provider.service;
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import org.springframework.stereotype.Service;
@Service
public class ResourceService {
    @SentinelResource("doGetResource") /*使用此注解描述的方法,在此方法被访问时 会在sentinel的簇点链路中显示,此注解中指定的名字就是资源名,我们可以对这个资源进行访问, 按照指定的链路进行限流设计*/
    public String doGetResource(){
        return "do get resource";
    }
}

更新Controller层

/*测试链路模式*/
    @Autowired
    private ResourceService resourceService;
    @GetMapping("/sentinel03")
    public String sentinel03(){
        resourceService.doGetResource();
        return "sentinel 03 text";
    }

实现效果

总结

  • 限流作用:系统的处理能力有限,保证系统的可靠运行
  • 限流模式:直接、关联、链路
  • sentinel限流的基本原理:底层拦截请求,通过流控规则限定对资源的访问
  • sentinel限流算法:滑动窗口算法(默认算法:把时间分成若干块)、计数、令牌桶、漏桶
  • sentinel限流效果:快速失败、预热、排队

相关文章