网关服务器(42)

高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计 减少系统不能提供服务的时间。我们都知道,单点是系统高可用的大敌,单点往往是系统高可用最大的 风险和敌人,应该尽量在系统设计的过程中避免单点。方法论上,高可用保证的原则是“集群化”,或者 叫“冗余”:只有一个单点,挂了服务会受影响;如果有冗余备份,挂了还有其他backup能够顶上。我们实际使用 Spring Cloud Gateway 的方式如上图,不同的客户端使用不同的负载将请求分发到后端 的 Gateway,Gateway 再通过HTTP调用后端服务,最后对外输出。因此为了保证 Gateway 的高可用 性,前端可以同时启动多个 Gateway 实例进行负载,在 Gateway 的前端使用 Nginx 或者 F5 进行负载 转发以达到高可用性。(1) 准备多个GateWay工程修改 shop_gateway_server 的application.yml。添加如下配置spring:
application:
name: api-gateway #指定服务名
cloud:
gateway:
routes:
– id: product-service
uri: lb://shop-service-product
predicates:
– Path=/product-service/**
filters:
– RewritePath=/product-service/(?<segment>.*), /$\{segment}
eureka:
client:
serviceUrl:
defaultZone: http://eureka1:8761/eureka/
registry-fetch-interval-seconds: 5 # 获取服务列表的周期:5s
instance:
preferIpAddress: true
ip-address: 127.0.0.1

spring:
profiles: gateway01
server:
port: 8080 #服务端口

spring:
profiles: gateway02
server:
port: 8081 #服务端口通过不同的profiles配置启动两个网关服务,请求端口分别为8080和8081。浏览器验证发现效果是一致 的。(2) 配置ngnix找到ngnix添加负载均衡配置#配置多台服务器(这里只在一台服务器上的不同端口)
upstream gateway {
server 127.0.0.1:8081;
server 127.0.0.1:8080;
}
#请求转向mysvr 定义的服务器列表
location / {
proxy_pass http://gateway;
}

在浏览器上通过访问http://localhost/order-service/order/buy/1请求的效果和之前是一样的。这次关 闭一台网关服务器,还是可以支持部分请求的访问。执行流程分析Spring Cloud Gateway 核心处理流程如上图所示,Gateway的客户端向 Spring Cloud Gateway 发 送请求,请求首先被 HttpWebHandlerAdapter 进行提取组装成网关上下文,然后网关的上下文会传递 到 DispatcherHandler 。 DispatcherHandler 是所有请求的分发处理器, DispatcherHandler 主要 负责分发请求对应的处理器。比如请求分发到对应的 RoutePredicateHandlerMapping (路由断言处 理映射器)。路由断言处理映射器主要作用用于路由查找,以及找到路由后返回对应的 FilterWebHandler 。 FilterWebHandler 主要负责组装Filter链并调用Filter执行一系列的Filter处理, 然后再把请求转到后端对应的代理服务处理,处理完毕之后将Response返回到Gateway客户端。

本文出自快速备案,转载时请注明出处及相应链接。

本文永久链接: https://www.175ku.com/26669.html