前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >grpc断路器之sentinel

grpc断路器之sentinel

作者头像
一笠风雨任生平
发布2020-04-24 10:23:44
1.5K0
发布2020-04-24 10:23:44
举报
文章被收录于专栏:服务化进程服务化进程

背景

为了防止下游服务雪崩,这里考虑使用断路器

技术选型

由于是springboot服务且集成了istio,这里考虑三种方案

  • istio
  • hystrix
  • sentinel

这里分别有这几种方案的对比

微服务断路器模式实现:Istio vs Hystrix

Sentinel 与 Hystrix 的对比

首先考虑的是istio,但是在使用istio进行熔断、分流时,流量不稳定,并且返回状态以及数据达不到预取效果,后面考虑到sentinel自动集成了grpc,所以这里使用sentinel。

步骤

1、增加相关依赖
代码语言:javascript
复制
 <dependencies>
  <dependency>
           <groupid>com.alibaba.cloud</groupid>
           <artifactid>spring-cloud-starter-alibaba-sentinel</artifactid>
       </dependency>
       <dependency>
           <groupid>com.alibaba.csp</groupid>
           <artifactid>sentinel-grpc-adapter</artifactid>
           <version>1.7.1</version>
       </dependency>
   </dependencies>

<dependencymanagement>
       <dependencies>
           <dependency>
               <groupid>com.alibaba.cloud</groupid>
               <artifactid>spring-cloud-alibaba-dependencies</artifactid>
               <version>2.0.1.RELEASE</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
          </dependencies>
   </dependencymanagement>
2、增加配置类

方案一:增加全局拦截器

代码语言:javascript
复制
/**
 * @Auther: lipeng
 * @Date: 2020/3/23 17:24
 * @Description:
 */
@Order(Ordered.LOWEST_PRECEDENCE)
@Configuration
@Slf4j
public class SentinelConfig {
    @Bean
    public ClientInterceptor sentinelGrpcClientInterceptor(){
        return new SentinelGrpcClientInterceptor();
    }
    @Bean
    public GlobalClientInterceptorConfigurer globalInterceptorConfigurerAdapter(ClientInterceptor sentinelGrpcClientInterceptor) {
        return registry -&gt; registry.addClientInterceptors(sentinelGrpcClientInterceptor);
    }
}

方案二:调用时增加拦截器 当然这里也可以换一种方式增加拦截器,如下,在启动类中增加

代码语言:javascript
复制
@Bean
    public ClientInterceptor sentinelGrpcClientInterceptor(){
        return new SentinelGrpcClientInterceptor();
    }

然后在调用类中增加依赖

代码语言:javascript
复制
    @Autowired
    private ClientInterceptor sentinelGrpcClientInterceptor;

   public void doXXX(){
         XXXGrpc.XXXBlockingStub stub = XXXGrpc.newBlockingStub(serverChannel).withInterceptors(sentinelGrpcClientInterceptor);
         XXXApi.XXXResponse response = stub.withDeadlineAfter(grpcTimeout, TimeUnit.MILLISECONDS).doXXX(request);

}
3、增加sentinel dashboard配置
代码语言:javascript
复制
spring:
  cloud:
    sentinel:
      transport:
        port: 8719
        dashboard: localhost:7080
4、部署sentinel dashboard

部署参考下面链接:

Sentinel 控制台

启动后访问下相关链接,grpc自动集成上去了,效果如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

详细配置可以参考官方wiki:https://github.com/alibaba/Sentinel/wiki/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 技术选型
  • 步骤
    • 1、增加相关依赖
      • 2、增加配置类
        • 3、增加sentinel dashboard配置
          • 4、部署sentinel dashboard
          相关产品与服务
          服务网格
          服务网格(Tencent Cloud Mesh, TCM),一致、可靠、透明的云原生应用通信网络管控基础平台。全面兼容 Istio,集成腾讯云基础设施,提供全托管服务化的支撑能力保障网格生命周期管理。IaaS 组网与监控组件开箱即用,跨集群、异构应用一致发现管理加速云原生迁移。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档