1.什么是网关

API网关是一个零碎的惟一入口。
是泛滥分布式服务惟一的一个进口。
它做到了物理隔离,内网服务只有通过网关能力裸露到外网被他人拜访。
简而言之:网关就是你家的大门

2.提供了哪些性能

  1. 身份认证(oauth2/jwt)
  2. 权限平安(黑白名单/爬虫管制)
  3. 流量管制(申请大小/速率)
  4. 数据转换(公共申请request/response)
  5. 监控/metrics
  6. 跨域问题(前后端拆散)
  7. 灰度公布(金丝雀公布/一部分去老客户端/一部分去新客户端)

3.市面上有哪些比拟好的开源网关

  1. OpenResty
  2. kong
  3. Spring Cloud Zuul/Gateway
  4. Zuul2
网关限流鉴权监控易用性可维护性成熟度
Spring Cloud Gateway能够通过IP,用户,集群限流,提供了相应的接口进行扩大一般鉴权、auth2.0Gateway Metrics Filter简略易用spring系列可扩大强,易配置 可维护性好spring社区成熟,但gateway资源较少
Zuul2能够通过配置文件配置集群限流和单服务器限流亦可通过filter实现限流扩大filter中实现filter中实现参考资料较少可维护性较差开源不久,材料少
OpenResty须要lua开发须要lua开发须要开发简略易用,然而须要进行的lua开发很多可维护性较差,未来须要保护大量lua脚本很成熟材料很多
Kong依据秒,分,时,天,月,年,依据用户进行限流。可在原码的根底上进行开发一般鉴权,Key Auth鉴权,HMAC,auth2.0可上报datadog,记录申请数量,申请数据量,应答数据量,接管于发送的工夫距离,状态码数量,kong内运行工夫简略易用,api转发通过管理员接口配置,开发须要lua脚本"可维护性较差,未来须要保护大量lua库绝对成熟,用户问题汇总,社区,插件开源

4.如何做一款网关(Spring Cloud Gateway)

  1. 第一个网关
    pom.xml
<dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-gateway</artifactId></dependency>

Application.java

@SpringBootApplicationpublic class GatewayApplication {    public static void main(String[] args) {        SpringApplication.run(GatewayApplication.class, args);    }        // 等同于在yml文件中的配置    @Bean    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {        return builder.routes().route(r -> r.path("/test/aa")                .uri("http://www.baidu.com"))                .route(r -> r.path("/baidu")                        .uri("http://www.baidu.com"))                .route(r -> r.path("/testa/**")                        .uri("lb://servicea"))                .build();    }}

启动参数 反对的路由形式

Loaded RoutePredicateFactory [After]2020-06-12 11:39:21.811  INFO 3680 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Before]2020-06-12 11:39:21.811  INFO 3680 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Between]2020-06-12 11:39:21.811  INFO 3680 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Cookie]2020-06-12 11:39:21.811  INFO 3680 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Header]2020-06-12 11:39:21.812  INFO 3680 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Host]2020-06-12 11:39:21.812  INFO 3680 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Method]2020-06-12 11:39:21.812  INFO 3680 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Path]2020-06-12 11:39:21.812  INFO 3680 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Query]2020-06-12 11:39:21.812  INFO 3680 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [ReadBodyPredicateFactory]2020-06-12 11:39:21.812  INFO 3680 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [RemoteAddr]2020-06-12 11:39:21.812  INFO 3680 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Weight]2020-06-12 11:39:21.812  INFO 3680 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [CloudFoundryRouteService]

开启端点查看

拜访url:
http://localhost:9002/actuato...

pom.xml增加

<dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-actuator</artifactId>        </dependency>

yml 增加配置 端点关上

management:  endpoints:    web:      exposure:        include: "*"

参考

代码地位:
https://github.com/jackssybin/springclouditems.git

本文由博客一文多发平台 OpenWrite 公布!