第七篇

博客园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)
最新评论

  1. Re:记录libreoffice实现office转pdf(适用于windows、linux)
    @MR丶C 确实在Windows的命令行下cmd少了start,差点就放弃了,感谢…
    –飘了
  2. Re:mysql行转列(多行转一列)
    @ㄓㄤㄑㄧㄤ 现在转的就是根据status来处理的啊。。…
    –不二尘
  3. Re:记一次电话面试的题目
    真的就是这么简略的回答吗

–Xuxing_2019
4. Re:Jvm垃圾回收器(终结篇)
@zzzHp 看…
–Xuxing_2019
5. Re:mysql行转列(多行转一列)
如果要把status也转成列,怎么转?

–ㄓㄤㄑㄧㄤ
阅读排行榜

  1. Jvm垃圾回收器(终结篇)(22657)
  2. Jvm运行时数据区(6932)
  3. 记一次电话面试的题目(5814)
  4. transient关键字详解(5678)
  5. mysql行转列(多行转一列)(5416)
    评论排行榜
  6. 记一次电话面试的题目(22)
  7. 记录libreoffice实现office转pdf(适用于windows、linux)(5)
  8. Jvm垃圾回收器(终结篇)(4)
  9. mysql行转列(多行转一列)(2)
    推荐排行榜
  10. 记一次电话面试的题目(17)
  11. Jvm垃圾回收器(终结篇)(14)
  12. Jvm运行时数据区(5)
  13. Spring循环依赖问题(3)
  14. Jvm垃圾回收器(算法篇)(3)
    Copyright © 2020 不二尘
    Powered by .NET 5.0.0 on Kubernetes 谨以此模板祝贺【博客园开发者征途】系列图书之《你必须知道的.NET》出版发行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值