API网关学习及介绍

1、什么是API网关

        

 

     API网关是一个服务器,是系统的后端统一入口。首先,它会提供最基本的路由服务,将调用转发到上游服务。其次,做为一个入口,它还能够进行认证,鉴权,限流等操做,对上游服务保护。因此说,有了API网关,就能够作到“一夫当关,万夫莫开”git

    从技术设计的角度上来讲,API是一种抽象,它隔离了咱们的使用以及实现;从开发管理的角度上来讲,API是一种契约。github

    API网关是一种微服务的架构解决方案,服务于API“契约”精神,并尽量的扩大这种契约的影响力,构建一种围绕API开发的“生态”。web

2、API网关特性

使用面向切面编程在完成一些功能时,可让代码的侵入性更小,实现更加优雅。而在微服务架构中,API网关能够给整个微服务增长面向切面编程的能力。API网关特性以下:spring

  • 路由转发
    以前说了「API网关」是内部微服务的对外惟一入口,因此外面所有的请求都会先发到这个「API网关」上,而后由「API网关」来根据不一样的请求去路由到不一样的微服务节点上。例如能够 根据路径 来转发、也能够 根据参数 来转发。
    而且因为内部微服务实例也会随着业务调整不停的变动,增长或者删除节点,「API网关」能够与「服务注册」模块进行协同工做,保证将外部请求转发到最合适的微服务实例上面去。
  • 负载均衡
    既然「API网关」是内部微服务的单一入口,因此「API网关」在收到外部请求以后,还能够根据内部微服务每一个实例的负荷状况进行动态的负载均衡调节。一旦内部的某个微服务实例负载很高,甚至是不能及时响应,则「API网关」就经过负载均衡策略减小或中止向这个实例转发请求。当全部的内部微服务实例都处理不过来的时候,「API网关」还能够采用限流或熔断的形式阻止外部请求,以保障整个系统的可用性。
  • 安全认证
    「API网关」就像是微服务的大门守卫,每个请求进来以后,都必须先在「API网关」上进行身份验证,身份验证经过后才转发给后面的服务,转发的时候通常也会带上身份信息。
    同时「API网关」也须要对每个请求进行安全性检查,例如参数的安全性、传输的安全性等等。
  • 日志记录
    既然全部的请求都须要走「API网关」,那么咱们就能够在「API网关」上统一集中的记录下这些行为日志。这些日志既能够做为咱们后续事件查询使用,也能够做为系统的性能监控使用。
  • 数据转换
    由于「API网关」对外是面向多种不一样的客户端,不一样的客户端所传输的数据类型多是不同的。所以「API网关」还须要具有数据转换的功能,将不一样客户端传输进来的数据转换成同一种类型再转发给内部微服务上,这样,兼容了这些请求的多样性,保证了微服务的灵活性。

 

3、经常使用API网关及其原理

1)Kong  

  

优势:sql

  1. 可扩展性,Kong依赖一个数据库来实现配置存储,依赖 serf 来实现 instance 之间的通讯。任何一个节点修改了其余节点会收到通知并从新reload配置。
  2. 模块化,Kong 能够方便地增长新的插件,而且插件能够经过 Restful API 进行管理。

缺点:数据库

        lua语言开发,某些功能是收费,维护成本高。编程

 

 

主要分析一下其源码和原理:后端

  1. core目录里面是一些基础框架代码,包括hooks,事件,插件基础
  2. plugins目录包括全部kong自带的插件,kong的插件扩展有一套本身的规范,按照规范来很是容易地就能扩展kong
  3. dao是数据库抽象层,目前kong自带支持数据库postgresql和cassandra。
  4. tools为一些工具函数,须要注意的是cache。由于全部配置(包括插件的配置)都会是用cache来缓存,为了减小读取数据库次数。
  5. api Kong会提供一个系列接口来更新配置

 2)Netflix Zuul 

        Zuul1 是基于 Servlet 框架构建,如图所示,采用的是阻塞和多线程方式,即一个线程处理一次链接请求,这种方式在内部延迟严重、设备故障较多状况下会引发存活的链接增多和线程增长的状况发生。api

  

   Zuul2 的巨大区别是它运行在异步和无阻塞框架上,每一个 CPU 核一个线程,处理全部的请求和响应,请求和响应的生命周期是经过事件和回调来处理的,这种方式减小了线程数量,所以开销较小。又因为数据被存储在同一个 CPU 里,能够复用 CPU 级别的缓存,前面说起的延迟和重试风暴问题也经过队列存储链接数和事件数方式减轻了不少(较线程切换来讲轻量级不少,天然消耗较小)缓存

 

缺点: 没有动态化配置,不利于管理。

3)sc-gateway

  spring Cloud Gateway 是 Spring Cloud 的一个全新项目,基于webflux的,底层也是基于netty,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。

  Spring Cloud Gateway 做为 Spring Cloud 生态系统中的网关,目标是替代 Netflix Zuul,其不只提供统一的路由方式,而且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。

相关概念:

  • Route(路由):这是网关的基本构建块。它由一个 ID,一个目标 URI,一组断言和一组过滤器定义。若是断言为真,则路由匹配。
  • Predicate(断言):这是一个 Java 8 的 Predicate。输入类型是一个 ServerWebExchange。咱们可使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。
  • Filter(过滤器):这是org.springframework.cloud.gateway.filter.GatewayFilter的实例,咱们可使用它修改请求和响应。

工做流程:

 

 缺点:没有动态化的配置,只是spring-cloud体系的,其余的业务系统的接入、公用服务的实现、新上接口的添加、动态调整接口的限流速率等等不少问题都很棘手。

 

4、API网关优缺点

      使用API网关的最大优势是,它封装了应用程序的内部结构。客户端只须要同网关交互,而没必要调用特定的服务。API网关为每一类客户端提供了特定的API。这减小了客户端与应用程序间的交互次数,还简化了客户端代码。
     API网关也有一些不足,它增长了一个咱们必须开发、部署和维护的高可用组件。为了暴露每一个微服务的端点,开发人员必须更新API网关。API网关的更新过程要尽量地简单,这很重要。不然,为了更新网关,开发人员将不得不排队等待。因为全部API请求都要通过网关,它很容易成为系统的性能瓶颈。不过,虽然有这些不足,但对于大多数现实世界的应用程序而言,使用API网关是合理的。

 

 

参考:

https://zhuanlan.zhihu.com/p/63944586

https://zhuanlan.zhihu.com/p/32660126

API网关做用、方案及如何选择 - frankyan的文章 - 知乎 https://zhuanlan.zhihu.com/p/32660126

https://www.zhihu.com/question/309582197  

https://tech.youzan.com/gateway/

https://mp.weixin.qq.com/s/QqFNcZfHdFbY31rVrsLsEA

https://www.zybuluo.com/yishuailuo/note/844059?utm_source=tool.lu

http://blog.didispace.com/hzf-ms-apigateway-1/

http://blog.didispace.com/hzf-ms-apigateway-2/#lg=1&slide=1

API网关做用、方案及如何选择 - frankyan的文章 - 知乎 https://zhuanlan.zhihu.com/p/32660126

API网关做用、方案及如何选择 - frankyan的文章 - 知乎 https://zhuanlan.zhihu.com/p/32660126

API网关做用、方案及如何选择 - frankyan的文章 - 知乎 https://zhuanlan.zhihu.com/p/32660126

API网关做用、方案及如何选择 - frankyan的文章 - 知乎 https://zhuanlan.zhihu.com/p/32660126

相关文章
相关标签/搜索