Gateway 服务网关 ~ 1. 学习前知识了解。

1. 学习目标

 2. 什么是 Spring Cloud Gateway

        Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是代替 Netflix Zuul,其不仅提供统一的路由方式,并且还基于 Filter 链的方式提供了网关基本的功能。目前最新版Spring cloud 中引用的还是 Zuul 1.* 版本,而这个版本是基于过滤器的,是阻塞 IO,不支持长连接。

 Zuul 2.* 版本一直跳票,2019年5月, Netflix 终于开源了支持异步调用模式的Zuul 2.0版本,但是 Spring cloud 已经不再集成 Zuul 2.* 了。现在了叫一下Spring Cloud Gateway。

Spring Cloud Gateway 是基于Spring 生态系统之上构建的API 网关,包括:Spring5、Springboot2和Project Rector.Spring Cloud Gateway 旨在提供一种简单有效的方法来路由到API。并为他们提供跨领域的关注点,例如:安全性,监视/指标、限流等。由于Spiring 5.0 支持 Netty, Http2,而 Springboot2.0 支持Spring 5.0 ,因此Spring Cloud Gateway 支持 Netty 和 Http2 顺理成章。

3. 什么是服务网关

        API Gateway (APIGW /API 网关),顾名思义,是出现在系统边界上的一个面向API的,串行集中式的强管控服务,这里的边界是指企业IT系统的边界,可以理解为 企业级应用防火墙,主要起到 隔离外部访问与内部系统的作用。在为服务概念的流行之前,API 网关就已经诞生了,例如银行、证卷等领域常见的前置机系统,它也是解决访问认证、报文转换、访问统计等问题的。

        API 网关的流行,源于近几年来移动应用与企业间互联需求的兴起。移动应用,企业互联,是的后台服务支持的对象,从以前单一的web应用,扩展到多种使用场景,且每种使用场景对后台服务的要求都不尽相同。这不近增加了后台服务的响应量,还增加了后台服务的复杂性。随着为服务架构概念的提出,API 网关成为了微服务架构的一个标配组件。

        API网关是一个服务器,是系统对外的唯一入口。API 网关封装了系统内部架构,为每个客户端提供定制的API、所有的客户端和消费端都通过统一的网关接入为服务,在网关层处理所有非业务功能。API 网关并不是微服务场景中必须的组件,如下图,不管有没有API 网关,后端微服务都可以通过API很好的支持客户端的访问。

    

 4. 为什么要使用网关

  • 单体应用:浏览器发起请求到单体应用所在的机器,应用从数据库查询数据原路返回给浏览器,对于单体应用来说是不需要网关的。
  • 微服务:微服务的应用可能部署在不同的机房,不同地区,不同域名下。此时客户端(浏览器/手机/软件工具)想要请求对应的服务,都需要知道机器的具体IP 或者域名 URL, 当微服务示例众多时,这是非常难以记忆的,对于客户端来说也太复杂难以维护。此时就有了网关,客户端相关的请求直接发送到网关,有网关根据请求标识解析判断出具体的微服务地址,再把请求转发到微服务实例。这其中的记忆功能就全部交由网关来操作了。

5. 网关解决了什么问题 

        网关具有身份认证与安全、审查与监控、动态路由、负载均衡、缓存、请求分片与管理、静态响应处理功能。当然最主要的职责还是与“外街联系” 

        总结一下,网关应当具备以下功能:

  • 性能:API 高可用,负载均衡,  容错机制
  • 安全:权限身份认证、脱敏、流量清洗,后端签名(保证全链路可信调用),黑名单(非法调用的限制)。
  • 日志:日志记录,一旦涉及分布式,全链路跟踪必不可少。
  • 缓存:数据缓存
  • 监控:记录请求响应数据,API 耗时分析,性能监控
  • 限流:流量控制,错峰流控,可以定义多种限流规则。
  • 灰度:线上灰度部署,可以减少风险
  • 路由:动态路由规则

6. 常用 网关解决方案

1. Nginx + lua

        Nginx 是由lgorSysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,一个高性能的HTTP和反向代理服务器。Nginx一方面可以做反向代理,另一方面可以做静态资源服务器。

  • Nginx 适合做门户网关,是作为整个全局的网关,对外的出于最外层那种;而Gateway 属于业务网关,主要用来对应不同的客户端提供服务,用于聚合业务。各个微服务独立部署,职责单一,对外提供服务的时候需要有一个东西把业务聚合起来。
  • Gateway 可以实现熔断、重试等功能,这是Nginx 不具备的。

2. Kong

        kong 是 Mashape 提供的一款 API 管理软件,它本身是基于 Nginx +lua 的,但比Nginx 提供了更简单的配置方式,数据采用了ApacheCassandra/PostgreSQL 存储,并且提供了一些优秀的插件,比如验证,日志,调用频繁限制等。Kong 非常诱人的地方就是提供了大量的插件来扩展应用,通过设置不同的插件可以服务提供各种增强功能。

优点:基于Nginx 所在性能和稳定性上都没有问题。Kong 作为一款商业软件,在Niginx 上做了扩展工作,而且还有很多付费的商业软件,Kong 本身也有付费的企业版,其中包括技术支持,使用培训服务和以及API 分析插件。
缺点:如果使用springcloud, kong 如何结合目前已有的服务治疗

3. Traefik

        Traefik 是一个开源的 GO 语言开发的为了让部署微服务更加便捷而诞生的现代HTTP 反向代理、负载均衡工具。它支持多种后台(Docker、Swarm、Kubernetes、Marathon、Mesos、Consul、Etcd、Zookeeper、BoltDB,Rest API,file……)来自动化、动态的应用它的配置文件配置。Traefik 拥有一个基于AngularJS 编写的简单网站页面,支持Rest API,配置文件热更新,无需重启进程。高可用集群模式等。

相对 Spring Cloud 和 Kubernetes 而言,目前比较适合Kubernetes

4. Spring Cloud Netflix Zuul

        Zuul 是Netflix 公司开源的一个API网关组件,SpringCLoud 对其进行二次基于Springboot的注解式封装坐到开箱即用。目前来说 结合 SpringCloud提供的服务治理体系,可以做到请求转发。

根据配置或者默认的路由规则和Load Balance,无缝集成Hystrix

虽然可可以通过自定义Fuleter 实现我们想要的功能,但是由于 Zuul本身的设计基础 单线程的接收请求和转发处理,是阻塞IO,不支持长链接,目前来看Zuul就显得很鸡肋,随着Zuul 2.* 一直跳票(2019年5月发布了Zuul 2.0 版本),Spring Cloud 退出自己的Spring Cloud Gateway。

大意就是:Zuul 已死,Spring Cloud Gateway 永生。

5. Spring Cloud Gateway

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值