Nacos + Gateway 实现动态刷新路由

Nacos + Gateway 实现动态刷新路由

一、一次微服务组件的替换

原有系统架构中的一些组件因着技术、业务不断的更新迭代已经渐现颓势,为此需要对一些微服务组件进行替换升级。

本文记录了其中的一部分升级过程,有不专业的地方还请指正。

替换项

  1. 服务注册中心:

    Kubernetes DNS → Nacos

  2. 服务配置中心:

    Spring Cloud Config → Nacos

  3. 路由网关:

    Zuul → Spring Cloud Gateway

替换理由

  1. 注册中心

    原有方案是使用linux的DNS作为注册中心,iptables路由表作转发规则。缺点是当iptables路由表逐渐增大时,路由效率会越来越低。

    替代为Nacos后,首先在Spring Cloud Alibaba生态下,Nacos的功能迭代更新以及Bug修复能得到保障,同时能保证在服务增多的同时性能不会有太大的损耗。

    同时Nacos最新的2.x版本已经支持gRPC的服务上/下线方式,能够做到几乎实时的服务上/下线感知,这是之前版本中的心跳机制所不能及的。

    image-20210816184337267

    上图摘自某同事PPT
  2. 配置中心

    首先Nacos本身就是一个配置中心,既然已经使用其作为注册中心,那么为了后期便于维护,也没有必要引入别的组件。

    同时Nacos不像Spring Cloud Config需要有一个git仓库来存储配置文件,它自身就提供了存储能力,同时也可以和DB结合使用。

    Nacos还支持基于长轮询的方式来热更新配置文件,结合上Spring Cloud Gateway就能实现动态路由,这也是本文的主题。

    image-20210816184505806

    上图还是摘自那位同事PPT
  3. 路由网关

    Zuul 1.x已经不再维护,并且Zuul 2.x Spring官方似乎也无意集成。

    Spring官方提供了一个简单、强大的替代方案——Spring Cloud Gateway。

    网关的本质是对请求进行路由转发,以及对请求进行前置和后置的过滤,它类似于门面模式,接收客户端的所有请求,经过层层过滤后转发到后端的微服务中。

    Spring Cloud Gateway较于Zuul的优势是显而易见的:

    Zuul 1.x采用的是传统的thread per connection,也就是针对每一个请求,会为这个请求专门分配一个线程来处理,直到请求完成后才会释放线程,若后台服务器响应较慢,该线程就会被阻塞,所以性能并不是很好。

    而Spring Cloud Gateway是基于WebFlux开发的响应式网关,WebFlux扫盲可以参考我引用部分WebFlux相关文章。

    image-20210816183323963

    网关示意——摘自《Spring Cloud Alibaba 微服务原理与实战》

二、Nacos + Spring Cloud Gateway + loadbalancer + resilience4j + openfeign 整合Demo

因为是整体组件的升级,除了路由网关和注册/配置中心的升级外,本次也对负载均衡器、断路器做了升级,当然后两个并不是本文的重点。

负载均衡升级

Ribbon → loadbalancer

断路器升级

hystrix → resilience4j

2.1 创建工程spring-cloud-gateway-demo

build.gradle

plugins {
   
   
    id 'org.springframework.boot' version '2.5.3'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.individual'
version = '1.0.0-SNAPSHOT'
sourceCompatibility = '11'

configurations {
   
   
    compileOnly {
   
   
        extendsFrom annotationProcessor
    }
}

repositories {
   
   
    mavenCentral()
}

ext {
   
   
    set('springCloudVersion', "2020.0.3")
    set('springCloudAlibabaVersion', "2021.1")
}

dependencies {
   
   
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-jdbc'
    implementation 'org.springframework.cloud:spring-cloud-starter-circuitbreaker-reactor-resilience4j'
    implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
    implementation 'org.springframework.boot:spring-boot-starter-tomcat'
    implementation 'org.springframework.cloud:spring-cloud-starter-loadbalancer'
    implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery'
    implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config'
    implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'
    implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
    implementation 'mysql:mysql-connector-java'
    compileOnly 'org.projectlombok:lombok'
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值