美文网首页阿里巴巴dubbo
Dubbo微服务使用Sentinel对服务限流与降级

Dubbo微服务使用Sentinel对服务限流与降级

作者: do_young | 来源:发表于2018-09-04 17:12 被阅读202次

    背景

    通过Sentinel主要可以对我们所提供的服务进行限流,降级,塑型等。 想要了解Sentinel功能的详细内容请看Sentinel简介
    该组件是阿里的开源项目,主要是为了协助Dubbo提供更好的服务。但作为一个技术组件,组织也考虑到了该组件的通用性,定位于微服务的通用治理框架。对spring-cloud也提供了很好的支持。
    该项目提供了很好的项目说明以及Demo
    下面主要是本人基于已有Dubbo的工程,如何集成及使用Sentinel的步骤,以及对踩的坑作一下记录。

    Sentinel下载

    在本人写该文档的时候,Sentinel主干版本很不稳定,下载下来的源码编译的时候有各种问题。所以本人选择了一个最近打标签的版本0.1.1

    Dashboard的安装

    Dashboard是Sentinel的管理配置系统,可以通过Dashboard对微服务的治理规则进行动态配置,也可以对微服务的治理情况进行监控。
    该组件是基于spring-boot开发的一个web工程,前端需要npm来进行编译,具体内容请查看工程下的READ.ME
    前端编译完成以后,在工程路径下(Sentinel-0.1.1/sentinel-dashboard)通过指令进行打包。最终在工程的target目录下生成jar包。有了工程包以后,就可以通过指令来启动了。

    java -Dserver.port=8080  \
    -Dcsp.sentinel.dashboard.server=localhost:8080 \
    -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
    

    可以通过http://localhost:8080访问一下web界面。

    dashboard.png

    Dubbo集成

    官方的文档说明,在Dubbo的微服务工程中引入sentinel-transport-simple-http包就可以了。

    <dependency>
        <groupId>com.alibaba.csp</groupId>
        <artifactId>sentinel-transport-simple-http</artifactId>
        <version>x.y.z</version>
    </dependency>
    

    在启动的jvm中时候注意添加以下参数:

    -Djava.net.preferIPv4Stack=true
     -Dcsp.sentinel.api.port=8720 
     -Dproject.name=dubbo-consumer-demo
    -Dcsp.sentinel.dashboard.server=127.0.0.1:8080
    

    其中参数说明如下:

    -Dcsp.sentinel.api.port:客户端的 port,用于上报相关信息
    -Dcsp.sentinel.dashboard.server:控制台的地址
    -Dproject.name:应用名称,会在控制台中显示
    

    但本人在使用官方的Demo示例时,发现dubbo服务的csp.sentinel.api.port配置的端口无法提供服务给dashboard调用,来获取微服务的治理配置信息及微服务的调用统计信息。(将微服务启动以后,通过lsof -i:8720指令,发现端口状态异常。)也不把任何的异常信息。最后就是将工程的sentinel-transport-simple-http包依赖修改为
    sentinel-transport-netty-http包,微服务启动以后,服务信息上报的端口(csp.sentinel.api.port)就可以正常访问了。

    <dependency>
        <groupId>com.alibaba.csp</groupId>
        <artifactId>sentinel-transport-netty-http</artifactId>
        <version>x.y.z</version>
    </dependency>
    

    *备注:
    sentinel-transport-netty-http和sentinel-transport-simple-http是通过Eevent模式,提供一套REST-API,便于Dashboard调用,来获取微服务端的信息。其中sentinel-transport-netty-http依赖于netty来实现,sentinel-transport-simple-http是直接通过socket来编写的,可能是simple的实现有BUG,所以致使我的环境刚好无法正常运行。

    相关文章

      网友评论

        本文标题:Dubbo微服务使用Sentinel对服务限流与降级

        本文链接:https://www.haomeiwen.com/subject/ceagwftx.html