国产APISIX网关VS spring-cloud-gateway

网关是架构师绕不过的一个话题。在大型系统中,网关的设计直接决定项目的成败。

一般我们将熔断、限流、鉴权能力写在网关层。本文通过传统的spring-cloud-gateway 和 APISIX网关的介绍,分析一下 APISIX网关的优势。

其优势在于以下几个方面:

1 spring-cloud-gateway 注册中心只能应用一种而APISIX支持多种服务发现,流量转发更灵活

比如: 现在有三个后端微服务A和微服务B、微服务C, 微服务A采用 nacos 作为注册中心, 而微服务B 采用 eureka, 而微服务C采用Dubbo协议。如果采用 spring-cloud-gateway 作流量控制的前提是 三个微服务均使用同一种注册中心。 即仅当 微服务A和微服务B、微服务C采用同一注册中心 才可使用同一个网关进行流量负载均衡管理,下面以 NACOS 注册中心为例。

spring:
  application:
    name: dian-gateway
  cloud:
    loadbalancer:
      ribbon:
        enabled: false
      discovery:
        locator:
          enabled: true
      routes:
        - id: web-a
          uri: lb://web-a
          predicates:
            - Path=/api/a/**
          filters:
            - StripPrefix=0
        - id: web-b
          uri: lb://web-b
          predicates:
            - Path=api/b/**

             - id: web-c

                    uri: lb://web-c

                    predicates:

                       - Path=api/c/**

这是传统 spring-cloud-gateway 的最大短板。

而 APISIX 完全可以突破这种限制。以上述案例来说明, 假设我们期待域名 https://gw.com 所有的流量都能通过负载均衡转发至后端微服务A(nacos 作为注册中心)、微服务B( eureka作为注册中心)、微服务C (Dubbo 作为注册中心)。先来看一下实际生产中的架构设计:

 如上图: 在实际生产环境中,往往最上层使用商业版负载均衡器将域名下所有的流量转发至APISIX的网关即apisix-gateway。APISIX实际的部署分为:apisix-gateway  和 apisix-dashboard 和 etcd 集群三部分。如下图:k8s 下安装的 APISIX。

 通过kubectl get  pods 查看:

通过 kubectl get svc 查看服务。

apisix-dashboard包括:apisix-admin (APISIX管理端服务)和 apisix-dashboard H5 (后台UI)。

APISIX 再将请求路由进行匹配,将相应的流量转发至对应微服务。 

这里可以形象地讲APISX比较成流量的“插座”, 其他各种服务发现对应为“插头”。 只需要“插头”插上“插座”, 电流就通电了(流量就可以转发了) 。 

本案例中,微服务C使用 Dubbo , 如果部署在与其他两个微服务同一个K8S集群,完全可以采作K8S 的DNS服务发现机制。如下图:

 微服如果通过DNS服务发现机制,必须使用 “微服务名.k8s命名空间.svc.cluster.local:端口“的形式。

2  spring-cloud-gateway 插件不如 APISIX 灵活

 从插件功能的实现上来说,spring-cloud-gateway 要实现一种熔断、限流插件往往要通过代码实现。需要使用 spring-cloud-starter-netflix-hystrix、spring-boot-starter-data-redis-reactive 等去自行实现,而且算法在准确性上不太可靠。关于spring-cloud-gateway熔断、限流插件就不在此介绍。下面介绍APISIX 网关插件的使用。

第一步:创建路由。 填写路由名称。

填写域名及匹配的请求URL。

 

执行下一步。 可以选择上流服务,也可以手动填写,在服务发现类型下拉中, 可以看见APISIX支持主流的DNS、Consul、Nacos、Eureka服务发现机制。

填写完毕执行一下步:

接下来可以启用APISX的各种插件。 

如:  api-breaker 熔断插件。

 限流也可以参考使用以下插件:  

其中:  traffic-split 插件可用于灰度发布的场景中。

3  大型分布式系统中,APISIX 可以显著降低网关的使用数量,降低企业资源使用成本

如: 一个企业如果有多种异构系统并存,有使用 eureka ,  nacos, consul,这个时候如果使用传统 spring-cloud-gateway 会使用用多个spring-cloud-gateway 来实现微服务网关层的负载均衡及鉴权能力。简单理解,APISIX 可以通过网关插件来实现熔断、限流、流量转发、负载均衡的能力,网关手插件就可以取代 spring-cloud-gateway  的 Filter 过滤器 。在下一章节,我将专题介绍APISIX网关插件。

当然,对比spring-cloud-gateway APISIX的优势不仅仅只是以上三点。本文只是依据个人在实际项目中的应用进行的总结。不全之处,请多多指教。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值