您当前的位置: 首页 > 

水的精神

暂无认证

  • 1浏览

    0关注

    711博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

使用sentinel 遇到的一些坑

水的精神 发布时间:2021-04-02 21:35:30 ,浏览量:1

  在之前的架构里边,想要在gateway网关里边使用阿里的开源技术,sentinel来做网关层面的限流。一方面,阿里开源的,扛过高并发,上过生产,放心使用。另一方面社区相对来说已经成熟。

 但是由于错误的评估,话费了非常多的时间,因为sentinel使用起来,并不是那么的容易。特别是用在gateway网关中,更是到处都是坑。

 

 

目前我已经实现

1. gateway整合sentinel ,也就是在网关层面,实现使用sentinel限流。限流包括针对客户端ip限流,针对热点参数限流,针对head的某个字段限流。

2. 在经过修改源码以后,能够实现将sentinel的限流规则从dashbord推送到nacos。

 

我的技术选用

 springboot 2.2.5

2.2.5.RELEASE

 springCloud  Hoxton.SR3

Hoxton.SR3

 springCloudAlibaba  2.2.1.RELEASE

2.2.1.RELEASE

 

gateway  利用了springCloudAlibaba去适配的版本

nacos 利用了springCloudAlibaba去适配的版本, nacous的职责有 :注册中心*(用于gateway根据服务名称准发)、服务的配制中心、sentinel限流规则持久化的承载中心

 

 

这篇文章的目的

帮助想要使用sentinel的人,合理的去避免一些坑,少走一些弯路。明确一点,我这个主要针对在gateway网关中使用sentinel。我会写出来一些例子,就是demo项目的全部代码。

不是和sentinel官方抬杠。写的真的不怎么样,我是一个喜欢以官方文档作为一手学习资料的人,但是看过这么多,唯独sentinel这个,实在是看不下去,到处都是坑。

 

先来聊聊sentinel中都有哪些坑 官方文档不完整

 sentinel的官方文档,真的敷衍的不行。如果不花点时间,真的不知道在搞什么,看着官方文档,绝对搞不出来个一二三来。没有注意事项,没有详细的文档。自己借助了挺多文章来解决问题的。我都会分享出来。

使用sentinel因为版本没选对,而导致sentinel限流不生效问题

  各种不生效问题,多半是因为选用版本造成的。sentinel的官方文档上,并没有告诉我们,我们具体应该使用哪个版本。这就导致了,网上、社区里,官方群里,到处都是问为什么我的sentinel不生效。sentinel支持了跟很多技术的整合,可能功能挺好,但是文档太寒酸了。我会在这篇文章里把能用的资料都分享出来,具体的问题,在哪里找资料,以及如何解决。

  我遇到的第一个问题,就是在gateway 中刚引入sentinel的时候,限流不生效。官方文档没有告诉我们,springboot的版本大于 2.2.0 小于 2.3.1的。这个官方文档上并没有说。如果超出这个范围就是不生效。这是在我怎么都不生效的时候,我重新创建项目重新引入依赖的时候发现的。看下边的截图。

 

关于需要改源码才生上生产的问题

  sentinel官方版本,目前到1.8.2版本是不支持 持久化限流规则的。在官方文档上,告诉我们,这样不能上生产,想要上生产,必须改造源码。至于怎么改造,没有明说,官网的例子很难看懂。果然是做技术的都不喜欢写文档,感情官网是加班写的吧。不过毕竟是有收费版的,如果这个大家都能用了,谁还去用收费版呢!

 能够上生产的sentinel,必须是把限流规则持久化到例如 nacos,等文件中。我们希望在生产中,能够不重启网关服务,就能够进行修改流控规则。我们最想要在sentinel提供的dashbord控制台修改了限流规则,然后把这个规则推到nacos,然后由我们的网关客户端吗,把它加载到内存中,并且限流生效。我选用的是使用nacos来做持久化,源码也是针对nacos来改造的。其实也不是很难,抓住一个关键点,无非就是找到把限流规则加载到内存中的操作,替换成推送到nacos。始终都是围绕这个点来展开的,我会用一篇详细的文章来介绍,如何改源码。并负责能让你的流控生效,又能持久化到你的nacos中。

  而限流规则一共有这么几种方式:

  •  通过编写代码的方式(弊端就是,每次修改规则,都需要重启网关,但凡是线上项目,都不会每次都重启项目来更新限流规则);
  •  通过sentinel提供的dashbord控制台(官方实现的是基于内存的,重启项目,就会丢失,相当于是每次重启项目,都需要手动重新配制限流规则,小孩子过家家,都不会这样玩);
  •  或者引入第三方放数据源(支持nacos,文件,等。但是想要使用这个,都是需要自己实现的,需要改源码的。本身sentinel源码里边并不支持,只能通过改源码)。

 

如何解决问题 官方文档不完整

 关于这个问题,个人是时间。很难不去全部补上,我这里只能给一个可用的案例。我会提供两篇单独的文章补到这里。

一篇是 gateway + sentinel + nacos 的案例。

一篇是修改源码,让sentinel—gateway  支持推送限流规则到 nacos。

我会保证我写的案例,一步一步跟着做出来,能够跑通。不再踩坑!

 

 

使用sentinel因为版本没选对,而导致sentinel限流不生效问题

  sentinel如何选择和springboot适配的版本,如何选择和springCloud适配的版本,如何选择和 springCloudAlibaba适配的版本。在官网上没有,但是在 springCloudAlibaba里边提到了sentinel,这是官网地址:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

 另外我在这里分享出来我gateway整合sentinel 的全部的pom。这个是我使用的,我可以保证百分百能用。替换成我的,还是不能用的话,绝对是其他地方的错误,不用担心是因为版本的问题。



    4.0.0
    com.angus
    gateway
    0.0.1-SNAPSHOT
    gateway
    业务网关


    
    
        org.springframework.boot
        spring-boot-starter-parent
        2.2.5.RELEASE
         
    
    
        1.8
        UTF-8
        UTF-8
        UTF-8
        Hoxton.SR3
        2.2.1.RELEASE
        5.4.3
        1.2.71
        1.18.8
    
    
        
            
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                ${spring-cloud-alibaba.version}
                pom
                import
            
        
    


    
        
        
            org.springframework.cloud
            spring-cloud-starter-gateway
        

        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        

        
        
            org.springframework.boot
            spring-boot-starter-actuator
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        







        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-sentinel
        

        
        
            com.alibaba.csp
            sentinel-spring-cloud-gateway-adapter
            1.8.1
        

        
        
            com.alibaba.csp
            sentinel-parameter-flow-control
            1.8.1
        

        
        
            com.alibaba.csp
            sentinel-datasource-nacos
        

    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                        
                            org.projectlombok
                            lombok
                        
                    
                
            
        
    


 

关于需要改源码才生上生产的问题

 

让sentinel—gateway  支持推送限流规则到 nacos ,这里单独补充一个文章。 

 

 

 

 

 

关注
打赏
1664074814
查看更多评论
立即登录/注册

微信扫码登录

0.0410s