博客园Logo
首页
新闻
博问
专区
闪存
云上钜惠
代码改变世界
搜索
注册
登录
返回主页chenpt博客园首页新随笔联系管理订阅订阅
随笔- 73 文章- 0 评论- 33
SpringCloudAlibaba-服务网关Gateway
一:网关简介
在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。这样的话会产生很多问题,例如:
客户端多次请求不同的微服务,增加客户端代码或配置编写的复杂性
认证复杂,每个微服务都有独立认证
存在跨域请求,在一定场景下处理相对复杂
为解决上面的问题所以引入了网关的概念:所谓的API网关,就是指系统的统一入口,它封装了应用程序的内部结构,为客户端提供统一服务,一些与业务本身功能无关的公共逻辑可以在这里实现,诸如认证、鉴权、监控、路由转发等。
比较流行的网关对比
Nginx+lua
使用nginx的反向代理和负载均衡可实现对api服务器的负载均衡及高可用lua是一种脚本语言,可以来编写一些简单的逻辑, nginx支持lua脚本
Kong
基于Nginx+Lua开发,性能高,稳定,有多个可用的插件(限流、鉴权等等)可以开箱即用。 问题:只支持Http协议;二次开发,自由扩展困难;提供管理API,缺乏更易用的管控、配置方式。
Zuul
Netflix开源的网关,功能丰富,使用JAVA开发,易于二次开发 问题:缺乏管控,无法动态配置;依赖组件较多;处理Http请求依赖的是Web容器,性能不如Nginx
Spring Cloud Gateway
Spring公司为了替换Zuul而开发的网关服务,将在下面具体介绍。
二:Gateway简介
Spring Cloud Gateway是Spring公司基于Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。它的目标是替代Netflix Zuul,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控和限流。
优点:
性能强劲:是第一代网关Zuul的1.6倍
功能强大:内置了很多实用的功能,例如转发、监控、限流等
设计优雅,容易扩展
缺点:
其实现依赖Netty与WebFlux,不是传统的Servlet编程模型,学习成本高
不能将其部署在Tomcat、Jetty等Servlet容器里,只能打成jar包执行
需要Spring Boot 2.0及以上的版本,才支持
三:Gateway核心架构
3.1:基本概念
路由(Route) 是 gateway 中最基本的组件之一,表示一个具体的路由信息载体。主要定义了下面的几个信息:
id:路由标识、区别于其他route
uri:路由指向的目的地uri,即客户端请求最终被转发到的微服务
order:用于多个route之间的排序,数值越小排序越靠前,匹配优先级越高
predicate:断言的作用是进行条件判断,只有断言都返回真,才会真正的执行路由
filter:过滤器用于修改请求和响应信息
3.2:执行流程
Gateway Client向Gateway Server发送请求
请求首先会被HttpWebHandlerAdapter进行提取组装成网关上下文
然后网关的上下文会传递到DispatcherHandler,它负责将请求分发给RoutePredicateHandlerMapping
RoutePredicateHandlerMapping负责路由查找,并根据路由断言判断路由是否可用
如果过断言成功,由FilteringWebHandler创建过滤器链并调用
请求会一次经过PreFilter–微服务–PostFilter的方法,最终返回响应
四:Gateway快速入门
4.1:创建一个api-gateway模块,导入相关依赖
完整版pom.xml
4.2:创建启动类
GatewayApplication
4.3:添加配置文件
application.yml
4.4:测试
五:网关限流
采用前面学过的Sentinel组件来实现网关的限流
5.1:导入依赖
com.alibaba.csp
sentinel-spring-cloud-gateway-adapter
5.2:编写配置类
基于Sentinel 的Gateway限流是通过其提供的Filter来完成的,使用时只需注入对应的SentinelGatewayFilter实例以及 SentinelGatewayBlockExceptionHandler 实例即可。
GatewayConfig
5.3:测试
作者: 不二尘
出处: https://home.cnblogs.com/u/chenpt/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
分类: 微服务
好文要顶 关注我 收藏该文
不二尘
关注 - 15
粉丝 - 32
+加关注
00
« 上一篇: SpringCloudAlibaba-服务容错Sentinel(进阶)
» 下一篇: SpringBoot自动装配解析
posted @ 2020-08-20 16:07 不二尘 阅读(1050) 评论(0) 编辑 收藏
刷新评论刷新页面返回顶部
登录后才能发表评论,立即 登录 或 注册, 访问 网站首页
博客园派送云上免费午餐,AWS注册立享12个月免费套餐
【推荐】News: 大型组态、工控、仿真、CADGIS 50万行VC++源码免费下载
【推荐】博客园 & 陌上花开HIMMR 给单身的程序员小哥哥助力脱单啦~
【推荐】博客园x示说网联合策划,AI实战系列公开课第二期
【推荐】了不起的开发者,挡不住的华为,园子里的品牌专区
【推荐】未知数的距离,毫秒间的传递,声网与你实时互动
【推荐】 阿里云双十一返场继续,云服务器0.73折起
【推荐】年薪100w+的技术人,都做对了什么?
相关博文:
· Spring-Cloud-Gateway
· SpringCloudGateWay
· Kubernetes-Istio之Gateway和VirtualService
· SpringCloud组件——gateway
· SpringCloudGateway跨域配置
» 更多推荐…
最新 IT 新闻:
· 网络“奔现师”为啥火了?
· 中芯国际第三季度收入10.8亿美元,净利润2.56亿美元
· 为什么平台采购成受贿案高发地?
· 换“芯”的苹果,换了新的打法
· 虎牙第三季度净利润3730万美元 同比增长105.3%
» 更多新闻…
历史上的今天:
2018-08-20 大话设计模式之迭代器模式
2018-08-20 大话设计模式之策略模式
公告
Hello
昵称: 不二尘
园龄: 2年9个月
粉丝: 32
关注: 15
+加关注
< 2020年11月 >
日 一 二 三 四 五 六
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 1 2 3 4 5
6 7 8 9 10 11 12
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
更多链接
随笔分类
Java工具类(4)
Java基础(10)
Java进阶-设计模式(23)
Java虚拟机(6)
Spring(2)
spring-boot之路(8)
并发编程(3)
面试题(3)
数据库(4)
算法(2)
微服务(8)
随笔档案
2020年9月(7)
2020年8月(8)
2019年12月(1)
2019年6月(2)
2018年11月(3)
2018年10月(6)
2018年9月(8)
2018年8月(19)
2018年7月(13)
2018年6月(2)
2018年5月(1)
2018年4月(3)
最新评论
- Re:记录libreoffice实现office转pdf(适用于windows、linux)
@MR丶C 确实在Windows的命令行下cmd少了start,差点就放弃了,感谢…
–飘了 - Re:mysql行转列(多行转一列)
@ㄓㄤㄑㄧㄤ 现在转的就是根据status来处理的啊。。…
–不二尘 - Re:记一次电话面试的题目
真的就是这么简略的回答吗
–Xuxing_2019
4. Re:Jvm垃圾回收器(终结篇)
@zzzHp 看…
–Xuxing_2019
5. Re:mysql行转列(多行转一列)
如果要把status也转成列,怎么转?
–ㄓㄤㄑㄧㄤ
阅读排行榜
- Jvm垃圾回收器(终结篇)(22657)
- Jvm运行时数据区(6932)
- 记一次电话面试的题目(5814)
- transient关键字详解(5678)
- mysql行转列(多行转一列)(5416)
评论排行榜 - 记一次电话面试的题目(22)
- 记录libreoffice实现office转pdf(适用于windows、linux)(5)
- Jvm垃圾回收器(终结篇)(4)
- mysql行转列(多行转一列)(2)
推荐排行榜 - 记一次电话面试的题目(17)
- Jvm垃圾回收器(终结篇)(14)
- Jvm运行时数据区(5)
- Spring循环依赖问题(3)
- Jvm垃圾回收器(算法篇)(3)
Copyright © 2020 不二尘
Powered by .NET 5.0.0 on Kubernetes 谨以此模板祝贺【博客园开发者征途】系列图书之《你必须知道的.NET》出版发行