APIGateway
在学习 APIGateway 之前,首先应该清楚一些我们经常谈论或者平时使用的技术概念
1. SOA 与 ESB
关于 SOA 与 ESB 的概念和它们之间的关系有不同的版本
SOA ---- 是一种面向服务架构的思想,实际上强调的是软件的一种架构,一种支撑软件运行的相对稳定的结构,它指的不是具体的技术,是一种通过服务整合来解决系统集成的一种策略。有不同的实现方式。
ESB ---- 企业服务总线,有一种比较有意思的说法,它像一根“聪明”的管道,用来连接各个“愚笨”的节点。为了集成不同系统,不同协议的服务,ESB 做了消息的转换解释与路由等工作,让不同的服务互联互通。
理解ESB在SOA中的作用:
ESB的确是SOA中一个非常重要的集成层组件(Integration Layer),几大主流SOA供应商,都将ESB置于SOA架构的核心位置。ESB在SOA中扮演着重要的角色,在技术层解决了SOA的整合问题,耦合了应用与应用之间的集成逻辑,使得SOA更灵活,更易于扩展,更敏捷。有了ESB,新建的服务消费者应用程序不需要关心服务的提供者在哪里,使用何种通讯协议,与其交互的数据是怎样的……,它只需向ESB发出请求,使用开放的、标准的通讯协议。相反,若某个可重用的价值较大的服务位于某一个遗留系统中,而由于种种原因,该遗留系统不能在短期内重写,此时ESB可以架起该服务与其使用者之间沟通的桥梁。当然,ESB的作用远不止这些,业内也有很多讨论。
2. APIGateway
APIGateway,这实际上微服务架构里面的很重要的内容,其作用类似于传统企业内部的 ESB 服务总线,只是更加轻量和高性能来解决微服务的管控和治理问题。而对于负载均衡,缓存,路由,访问控制,服务代理,监控,日志等都属于基本的服务管控内容,也是 APIGateway 需要考虑的核心能力。
APIGateway 是一个服务器,是调用服务的唯一节点和请求应答出入口。API Gateway 封装内部系统的架构,并且提供 API 给各个客户端。通常情况下它还需要实现其他功能,如认证授权、访问控制、路由、负载均衡、缓存、日志、限流限额、转换、映射、过滤、熔断、注册、服务编排、API管理、监控、统计分析等等。
从API网关的能力来看,我们可以理解其重要性。一夫当关,万夫莫开。API网关就承担这么一个重要的职责。其不但是整个服务系统的安全屏障,也承担着很多服务治理的能力。所以实现或者选择一个好的API网关,是建设容器云和微服务体系中一个至关重要的事项。这也决定了API网关的部署,要尽可能的减少接触面,确保安全。
image.png
举个例子:
假设我们以前的微服务架构是这样的:我们有 customer 模块、order 模块、Invoices 模块,那么,客户端就不得不去请求 Customers,然后再到 Orders,然后是 Invoices。客户端需要去知道怎么去一起来消费这三个不同的 service。
image.png
那么我们可以将 API 网关放到我们的微服务们的最前端,并且让API 网关变成由应用所发起的每个请求的入口。这样就可以明显的简化客户端实现和微服务应用程序之间的沟通方式。使用API网关,我们可以抽象所有这些复杂性,并创建客户端们可以使用的优化后的端点,并向那些模块们发出请求。如果我们假设客户(Customers),订单(Orders)和发票(Invoices)每个模块都返回不同的JSON响应,并且假设客户端想要检索此信息。有两种方法。一种方式是,客户端向客户(Customers)模块发出 GET 请求以检索客户,然后到订单(Orders),然后到指定订单的发票(Invoices)。第二种方式是我们可以通过使用API网关来抽象此客户端实现的复杂性。然后,API网关可以公开一个特定的端点,在这个端点上将产生请求,然后在[网关]消费了微服务之后返回给客户端一个唯一的响应(response)。也就是说,比如,我们可以把很多的 response 折叠成一个,request 也是一个。
这样对我们帮助很大,而且特别是对于手机等其他移动客户端来说特别的受益。这样就可以加速我们的客户端的实现。而且可以轻松的做一些替换。
API网关让我们的客户端不用再需要知道和关心模块的地址了。网关负责来搞这些事情,你只需要知道网关就好了。你可以去改变实现而且还可以改变API接口。不过通常来说,你改变接口后,会增加客户端出问题的风险。
使用API网关后,你可以在单独的层上有效地抽象,这样你就可以更改实现和接口,同时保持现有客户端的公共接口相同。这意味着你总是可以做一些调整的事情。
此外,APIGateway 还可以实现一些附加功能,如身份验证、监控、负载均衡、缓存、报文转换、蓝绿部署、金丝雀发布、断路器等。
3. APIGateway 产品
越来越多的企业采用微服务,越来越多的人认识到微服务API网关的重要性,API网关的发展和完善也越来越好。很多开源的产品功能也很强大,足以满足大部分企业的部署需求。基于这些开源产品,可以定制扩展一些功能,更好的满足业务需求。还有一些比较好用的
Tyk(https://tyk.io/)是一个开放源码的API网关、面板和API管理平台,由Tyk公司开发和支持。Try 是一个基于Go实现的网关服务。包括Tyk API Gateway,Tyk Dashboard, Tyk Developer Portal, Tyk Pump, Tyk Identity Broker等组件。Tyk开源 API Gateway 对实际上的请求管理做了重大的提升:路由、访问控制、数据转换、日志等等。Tyk 可以完全独立运行,只需要有效的 Redis 数据库,可以横向扩展(如下图)
Kong(https://getkong.org/)是一款基于Nginx_Lua模块写的高可用,易扩展的开源的 API Gateway 项目。Kong 在任何RESTful API的前面运行,通过插件扩展,它提供了超越核心平台的额外功能和服务。由于 Kong 是基于 Nginx 的,所以可以水平扩展多个 Kong 服务器,通过前置的负载均衡配置把请求均匀地分发到各个 Server,来应对大批量的网络请求。
Kong主要有三个组件:
- Kong Server :基于nginx的服务器,用来接收 API 请求。
- Apache Cassandra/PostgreSQL :用来存储操作数据。Cassandra 是最终一致的数据库。 这意味着如果你有一个由多个节点组成的 Cassandra 集群,你存储数据的话,则最终该数据将传播到所有其他节点 – 但不是同时[或“立即”]到达每个节点。
- Kong dashboard:官方推荐UI管理工具,当然,也可以使用 restfull 方式 管理admin api。
Kong 采用插件机制进行功能定制,插件集(可以是0或n个)在API请求响应循环的生命周期中被执行。插件使用 Lua 编写,目前已有几个基础功能:HTTP 基本认证、密钥认证、CORS( Cross-origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、API 请求限流、请求转发以及 nginx 监控。
Zuul 是 Netflix 出品的一个基于JVM 路由和服务端的负载均衡器。它的主要功能有:认证、动态路由、监视、弹性、压力测试、金丝雀测试、负载削减、安全、静态响应处理和主动/主动交换管理。被用来作为上 Spring Cloud 的 API 网关组件,可以和 spring cloud 的各个组件结合使用。
就像上图中所描述的一样,Zuul 提供了四种过滤器的 API,分别为前置(Pre)、后置(Post)、路由(Route)和错误(Error)四种处理方式。
一个请求会先按顺序通过所有的前置过滤器,之后在路由过滤器中转发给后端应用,得到响应后又会通过所有的后置过滤器,最后响应给客户端。在整个流程中如果发生了异常则会跳转到错误过滤器中。
一般来说,如果需要在请求到达后端应用前就进行处理的话,会选择前置过滤器,例如鉴权、请求转发、增加请求参数等行为。在请求完成后需要处理的操作放在后置过滤器中完成,例如统计返回值和调用时间、记录日志、增加跨域头等行为。路由过滤器一般只需要选择 Zuul 中内置的即可,错误过滤器一般只需要一个,这样可以在 Gateway 遇到错误逻辑时直接抛出异常中断流程,并直接统一处理返回结果。
还有两个可以提供 API 网关的产品:
axway
axway API Gateway 服务可以管理,交付和保护企业 API、应用程序和消费者。 以下概述图显示了左侧API网关支持的传输和协议范围,以及它在右侧提供的服务:
Axway API Gateway 支持的主要服务:
1)API转换
2)API 控制和治理
3)API 安全性
4)API 监控
5)API 开发生命周期
6)API 管理
API Gateway 为 API 提供应用程序服务器为应用程序所做的工作。 此 API网关角色作为核心应用程序基础结构如下所示:
image.png
API 网关可以看作是 API 运行时环境,它提供以下核心服务:
1)安全性(例如,身份验证和授权)
2)与一系列不同协议的连接
3)虚拟化
4)可扩展性和弹性
5)高可用性
6)可管理性(例如,使用API网关管理器)
7)容易部署
由于 API 网关提供此核心API基础结构,因此开发人员可以专注于提供应用程序逻辑。他们不再需要将这些服务构建到他们的应用程序中,并且可以利用 API 网关提供的核心基础结构。API Gateway 将 API 视为第一类工件,具有自己的特定构造和自己的运行时环境。
MuleSoft
https://www.cnblogs.com/Leo_wl/p/3417948.html
http://cloud.idcquan.com/yjs/148607.shtml
http://blog.didispace.com/hzf-ms-apigateway-1/
https://www.scienjus.com/api-gateway-and-netflix-zuul/
网友评论