1.什么是网关
API网关是一个零碎的惟一入口。
是泛滥分布式服务惟一的一个进口。
它做到了物理隔离,内网服务只有通过网关能力裸露到外网被他人拜访。
简而言之:网关就是你家的大门
2.提供了哪些性能
- 身份认证(oauth2/jwt)
- 权限平安(黑白名单/爬虫管制)
- 流量管制(申请大小/速率)
- 数据转换(公共申请request/response)
- 监控/metrics
- 跨域问题(前后端拆散)
- 灰度公布(金丝雀公布/一部分去老客户端/一部分去新客户端)
3.市面上有哪些比拟好的开源网关
- OpenResty
- kong
- Spring Cloud Zuul/Gateway
- Zuul2
网关 | 限流 | 鉴权 | 监控 | 易用性 | 可维护性 | 成熟度 |
---|---|---|---|---|---|---|
Spring Cloud Gateway | 能够通过IP,用户,集群限流,提供了相应的接口进行扩大 | 一般鉴权、auth2.0 | Gateway 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)
- 第一个网关
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 公布!