Soul 网关源码分析(五)Spring Cloud 插件(一)

上一篇文章中我们学习了 sign 插件是如何实现请求鉴权的,今天我们来试试 Soul 的Spring Cloud 插件。

流程演示

先解除soul-bootstrap Spring Cloud 依赖部分的如下注释:

        <!--soul springCloud plugin start-->
       <dependency>
            <groupId>org.dromara</groupId>
            <artifactId>soul-spring-boot-starter-plugin-springcloud</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-commons</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>

        <!--soul springCloud plugin start end-->

        <!-- springCloud if you config register center is nacos please dependency this-->
<!--        <dependency>-->
<!--            <groupId>com.alibaba.cloud</groupId>-->
<!--            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>-->
<!--            <version>2.1.0.RELEASE</version>-->
<!--        </dependency>-->

        <!-- springCloud if you config register center is eureka please dependency end-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>

Spring Cloud 插件支持 Nacos 或者 Eureka作为服务注册中的,这一次我们选择Eureka。

在 soul-bootstrap 的 application.yml 中添加Eureka 相关依赖:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  instance:
    prefer-ip-address: true

在 soul-admin 中开启Spring Cloud 插件支持。
在这里插入图片描述
直接启动 soul-examples-springcloud 和 soul-examples-eureka,打开Eureka的页面可以看到已经把我们的应用注册好了。
在这里插入图片描述
再回到 soul-admin,发现我们的 Spring Cloud 服务的相关 endpoints 已经加到了选择器和规则列表中:
在这里插入图片描述
接下来我们用 curl 来测试下:

➜  ~ curl "localhost:9195/springcloud/order/findById?id=1"
{"id":"1","name":"hello world spring cloud findById"}

成功返回数据。现在我们使用wrk执行一下压测,以下是不适用soul网关

➜  ~ wrk -t8 -c200 -d30s --latency  "http://localhost:8884/order/findById?id=1"
Running 30s test @ http://localhost:8884/order/findById?id=1
  8 threads and 200 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     8.21ms    6.05ms 155.20ms   92.54%
    Req/Sec     2.95k   703.14    15.51k    79.58%
  Latency Distribution
     50%    7.27ms
     75%    9.19ms
     90%   11.65ms
     99%   33.06ms
  700305 requests in 30.07s, 119.00MB read
Requests/sec:  23285.91
Transfer/sec:      3.96MB

使用soul网关

➜  ~ wrk -t8 -c200 -d30s --latency  "http://localhost:9195/springcloud/order/findById?id=1"
Running 30s test @ http://localhost:9195/springcloud/order/findById?id=1
  8 threads and 200 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    47.59ms   37.60ms 294.45ms   80.29%
    Req/Sec   592.92    129.17     0.97k    70.40%
  Latency Distribution
     50%   36.84ms
     75%   61.51ms
     90%   99.43ms
     99%  176.76ms
  141697 requests in 30.10s, 28.13MB read
Requests/sec:   4707.18
Transfer/sec:      0.93MB

可能跟笔者机器有关,网关在8个线程200个连接测试30秒的情况,延迟有比较明显的提升,初步怀疑受到了日志输出的影响,调整日志输出级别后再进行测试:

➜  ~ wrk -t8 -c200 -d30s --latency  "http://localhost:9195/springcloud/order/findById?id=1"
Running 30s test @ http://localhost:9195/springcloud/order/findById?id=1
  8 threads and 200 connections
^C  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    39.94ms   26.08ms 218.19ms   71.90%
    Req/Sec   657.54    122.81     0.91k    78.91%
  Latency Distribution
     50%   35.04ms
     75%   53.40ms
     90%   74.22ms
     99%  122.25ms
  33581 requests in 6.44s, 6.67MB read
Requests/sec:   5214.23
Transfer/sec:      1.04MB

设置日志输出级别为error后性能损耗要小一些。

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页