共计 3093 个字符,预计需要花费 8 分钟才能阅读完成。
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
@SpringBootApplication
public 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 公布!
正文完