首页 » Web前端 » phpudp接口技巧_一文具体讲解API网关核心功能和API治理扩展

phpudp接口技巧_一文具体讲解API网关核心功能和API治理扩展

访客 2024-11-24 0

扫一扫用手机浏览

文章目录 [+]

作者:人月神话,新浪博客同名

简介:多年SOA方案培植,私有云PaaS平台架构设计履历,长期从事一线项目实践

phpudp接口技巧_一文具体讲解API网关核心功能和API治理扩展

本日准备再详细讲解下API网关的根本观点,利用场景和核心功能,以及基于API网关核心引擎做的API全生命周期管理功能扩展等,最好再先容下当前主流的开源API网关引擎。

phpudp接口技巧_一文具体讲解API网关核心功能和API治理扩展
(图片来自网络侵删)
API网关概述

在微做事架构体系里面,我们一样平常会利用到微做事网关或叫API网关。

大家都比较清楚,在微做事架构体系下本身是去中央化的架构,通过做事注册中央来实现做事注册创造和消费调用,那么为何又须要利用API网关?

在传统的ESB总线进行做事集成的时候我们就常常谈到一个观点便是位置透明,即须要屏蔽底层业务模块供应API接口做事地址信息,并实现多个微做事API接口的统一出口。
即类似设计模式里面常常谈到的门面模式。

如何给API网关一个定义?

大略来说API网关便是将所有的微做事供应的API接口做事能力全部汇聚进来,统一接入进行管理,也正是通过统一拦截,就可以通过网关实现对API接口的安全,日志,限流熔断等共性需求。
如果再大略说下,通过网关实现了几个关键能力。

内部的微做事对外部访问来说位置透明,外部运用只需和网关交互统一拦截接口做事,实现安全,日志,限流熔断等需求

从这里,我们就可以看到API网关和传统架构里面的ESB总线是类似的,这些关键能力本身也是ESB做事总线的能力,但是ESB做事总线由于要考虑遗留系统的接入,因此增加了:

大量适配器实现对遗留系统的遗留接口适配,多协议转换能力进行数据的复制映射,路由等能力

对付两者,我原来做过一个大略的比拟,大家可以参考。

这个观点理解后,我们再回到微做事架构里面。

对付微做事架构大家常常说的最多的便是去中央化的架构,认为ESB中央化架构模式已经由时。
而实际上经由上面剖析你可以看到。
在微做事架构里面的API网关仍旧是中央化的架构模式,所有的API接口都要经由网关这个点。

非中央化架构-》走微做事里面的做事注册中央进行接口交互中央化架构-》走网关进行接口做事暴露和共享交互

对付微做事架构里面有无去中央化的架构?当然是有的,即我们常说的微做事模块之间可以通过做事注册中央来实现做事创造查找,做事间的点对点调用纵然去中央化的。

如果一个单体拆分为微做事后,完备不须要和外部运用打交道,也不须要共享自己的接谈锋能,那么这个微做事体系里面就不须要用API网关,仅仅利用做事注册中央即可。
通过做事注册中央实现完备的去中央化和接口调用更高的性能。

什么时候须要利用API网关?

如果一个微做事架构下,虽然不会外部的其它运用进行交互和集成,但是全体运用本身存在APP运用端,而APP运用端通过前后端剖析开拓,同时须要通过互联网访问。
本身存在须要一个统一访问API访问入口,同时也须要考虑和内部微做事模块进一步进行安全隔离。

当我们谈到这里的时候,你会创造我们常说的API网关的做事代理或透传能力,实际和我们常说的Ngnix反向代理或路由是一个意思。

如果你仅仅是为了统一API接口的访问出口,并考虑类似DMZ区的安全隔离,那么在你架构前期完备不须要立时履行API网关,直接采取Ngnix进行做事路由代理即可。
由于在这种架构下,API接口消费端,供应端全部是一个开拓团队开拓,各种问题剖析排查都相称方便,类似API接口安全访问等也可以通过JWT,Auth2.0等统一实现,而且这个过程也并不繁芜。

能力开放或多运用外部集成对API管控管理须要

但是当我们面临是和多个外部运用集成,或者说将自己的API接口做事能力开放给外部多个互助伙伴利用的时候,这个时候对付API接口的管控管理哀求自然增加。

即在常规的做事代理路由根本上,须要增加类似负载均衡,安全,日志,限流熔断等各种能力,而且我们不肯望这些能力在API接口开拓的时候考虑,而是希望这些能力是在API接入到网关的时候统一灵巧配置来实现管控。

那么这个时候利用API网关浸染就表示出来。

API网关核心功能解释

对付API网关实际上前面已经多次强调,可以看做是ESB总线的轻量化实现,不再须要繁芜的协议转换,适配和数据映射等能力,但是提升了流量掌握和安全,实时监控等方面的能力。
对付API网关引擎部分供应的核心功能,再大略总结如下:

1.实现统一做事代理和做事统一出口

这点是网关和常规点对点做事注册中央最大的一个差异点,便是位置透明,消费端只须要和网关打交道,详细网关如何和后台的微做事模块打交道,后台微做事模块的支配逻辑,模块供应做事的IP地址等都不用关心。

由于实现了位置透明,带来一点便是数据流必须通过网关,那么网关本身又成为了去中央的微做事架构中的中央化节点,那么就必须考虑网枢纽关头点的性能,可靠性和弹性扩展能力。

网关要实现位置透明,延伸出来对应的网关必须供应的能力就包括了

供应做事注册和做事接入的能力供应做事代理和做事路由能力,能够将做事路由到详细的原始做事上供应负载均衡能力(该点并不是必须具备)

在这里准备重点强调下负载均衡能力,实际上对付API网关每每并不是必须具备负载均衡能力。

其一是供应API接口做事的模块本身进行了负载均衡,再供应地址其二是类似容器化集成和支配,已经可以通过Kubernetes实现了负载均衡

我们可以看下对付注册和接入到API网关做事的三种场景,只有场景一须要由API网关来供应负载均衡能力。

把稳API网关是否须要具备负载均衡能力,是必须考虑的一个点,即如果底层微做事模块供应的API接口做事本身能够供应负载均衡后的地址,那么网关不须要进行负载均衡。
如果底层模块不具备这个能力,那么网关必须具备负载均衡能力。

微做事模块本身可以基于容器化资源池供应的能力进行动态扩展,因此这个地方本身又有两层负载均衡,一个是kubernates供应的集群能力,一个是多个API网关本身供应的集群能力。
当然API网关本身也具备负载均衡功能,可以和Kubernate进行衔接。

2. 通过网关的拦截能力来实现所有共性能力抽取和实现

刚才已经谈到启用网关后就承载了数据流,因此可以通过对接口访问输入和输出的拦截来实现所有共性可复用能力的抽取和实现。
这些共性能力可以理解为网关实现的一个个拦截插件,本身可插拔,灵巧可配置。

这些插件能力中最核心的便是安全,日志,流控。

个中安全可以实现访问安全,传输安全,数据安全等,个中访问安全本身又可以实现类似Token,IP,用户名密码等多种安全掌握策略。
包括对Auth2.0等标准规范的支持等。

对付日志也是网关供应的一个关键能力,即可以实现对做事消费日志,详细的输入和输出报文的查询能力,这个在各开源网关每每并不具备这个能力,也无法面向业务系统职员去利用,因此这块能力提升每每都须要在开源网关根本上做大量扩展。

流控是我们谈的其余一个关键能力,包括了做事限流和做事熔断。
对付做事限流紧张是实现对做事消费前哨程数掌握,资源分配实现消费前等待。
而对付做事熔断,即直接对做事进行下线或禁用,以避免大并发做事消费调用对网关造成的影响或带来的做事雪崩等。

一个网关来说,流控能力相对关键,由于网关是中央化节点,必须担保网关的高可靠运行。
因此网关流控能力强弱直接影响到网关的高可靠性和性能,而判断流控能力强弱的关键则在于灵巧的流量掌握策略配置,只有这样才能够做到既实现流控,又不影响到关键业务和接口做事的访问。

3. 知足前后端分离的需求

把稳,如果一个企业开拓的业务系统涉及得手机APP端,而手机APP端一定涉及到公网访问,按业务系统内部支配安全策略也一定涉及到DMZ区的设置和硬件防火墙隔离。

而对付API网关本身恰好又是可以支配到DMZ区的一个内容,既实现了做事代理路由,又实现了安全隔离,如果存在这种场景,纵然业务运用反面外部系统打交道,为了前后真个隔离和外部访问,每每也须要API网关能力支撑。
当然前期你也可以利用Ngnix来替代API网关实现统一代理。

4. 灰度发布或金丝雀发布

这个在我原来谈网关的文章的时候很少谈到这点,但是实际上在DevOps和微做事架构履行下,对付灰度发布能力每每也是必须的。
比如我们对已有的一个接口做事做了修正,我们想先在某些业务系统试用,没有问题再发布到所有的业务系统。
这个时候就涉及到金丝雀发布的问题。
当然你可以配置是按系统,按IP,按用户还是其他的发布策略。

这块的能力不仅仅是DevOps的自动支配,同时也必须考虑网关层能够基于动态发布的内容进行路由。
确保做事调用消费的路由路径是隔离开的。
而对付金丝雀发布策略许可你直接只导入指定量的流量到新的版本,API网关就可以帮你来做这件事情。
你可以配置10%的要求到新的版本,然后一旦你确保了新版本没有bug,你可以把流量切换到100%。

5. 做事组合能力

实际上当我们谈API网关的时候,一样平常不会商做事组合能力,由于一涉及到做事组合或编排,那么一定导入网关整体架构变重。
从当前主流网关看,一样平常也不供应类似能力。

实际上做事组合编排难点在于,上个做事的输出每每要成为下一个做事的输入,同时做事输入和输出还存在大量的数据映射操作。
我们回顾下类似聪慧家庭里面的组合场景编排,实际上很大略,比如我回到家后须要打开空调,关窗帘,打开热水器,开灯的一系列动作,我只是须要大略将这些动作编排在一起。

对应到API网关的做事组合,实际上我们也可以做轻量的做事组合,即去掉数据映射等繁芜组合场景,只须要实现大略的做事多次调用,做事返回数据的组合等即可。

对付详细的做事组合和编排,可以参考下面这篇文章:

从ESB做事组合编排到NetflixConductor微做事编排

API全生命周期管理能力

可以看到,API网关更多是一个底层引擎,而要实现完全的API管控,每每还须要合营API全生命周期管理能力。
这个完备可以在底层API网关引擎根本上进行扩展开拓。

API接口的定义

在定义API接口的时候首先要定义API分组,这个从京东,淘宝等OpenAPI能力开放平台的API文档都可以看到,首先要有API归类分组,然后再定义详细的API。

比如京东开放平台,有商品,店铺,仓储,支付等多个类目,然后各种眼前有详细的API的定义。

API的定义包括两个部分,一个是API基本信息定义,一个是详细输入输出定义。

API基本信息仍旧是包括了API的编码,API名称,API的分组,API的用场描述,API的缓存,安全等基本掌握信息的定义等。
还有便是这个API接口的访问路径定义,API接口是Get还是Post方法定义等。

API详细信息紧张便是API的输入和输出信息定义。

API的输入参数把稳实际有多种形式,一个便是在API访问路径上的路径参数,还有一个便是在访问路径后?参数后面的查询参数信息,还有便是一个完全的Request Body要求参数信息。

比如对付Http Rest查询接口,这类Get方法接口,可以看到并没有Body信息,更多的是通过路径和查询参数定义来完成查询。
而对付Post接口每每就涉及到详细的Body信息定义。

但是要把稳,为了实现Http Rest接口和SOAP WS接口做事的相互转换,对付SOAP WS查询做事接口在自动转换为Http Rest接口做事的时候实际上仍旧为转换为Post方法+Body参数模式。

对付API接口定义,仍须要预留标准的系统级参数部分内容。
这部分内容是API网关实现统一标准化管理的根本,不能随便修正和变动。
比如京东API平台预留的API名称,方法,版本,Token,APP_Key,Date等都是利用系统级别的参数定义,是每一个接口API暴露后都须要增加的参数头信息。

API快速开拓的支持

在API接口做事定义完成后,一方面是可以通过类似WADL或RAML等标准的Rest接口定义规范文件,其余一个便是须要供应客户端和做事真个开拓框架代码。

在这个根本上,还可以供应完全的示例代码下载,方便开拓商或互助伙伴对API接口进行快速开拓。
开拓完成的后端原始做事接口,在注册接入前还可以供应接口做事的模型匹配自校验功能,确认开拓的做事完备遵照从上到下办法-》API开拓框架天生和API后端做事开拓。

对付API接口管理,如果是标准的从顶朝下模式,即在定义了API接口后,实现天生类似WADL或RAML标准接口规范。
后端做事基于我们标准的API接口左券进行开拓,那么开拓完成后就方便快速代理办法接入,在接入过程中就不再有参数映射和转换的问题,否则我们的API接入过程会比较繁芜。

API接口做事的注册和接入

API接口定义过程和API接口的注册接入最好分开。

在API接口定义完成后进行API接口做事的注册,即选择详细的后端做事,然后对做事进行接入。
同时将后端做事对应到我们在前面定义的API接口代理做事上。
把稳在前面谈到的API路径定义,方法类型定义,实际上也可以在API接口做事注册和接入的时候来完成。

API接口做事的后续变更发布,还可以考虑和DevOps平台合营并支持灰度发布功能。

反向的后端做事快速接入并发布为API接口做事,即直接对后端已有的API做事进行快速接入,将API后端做事发布为代理做事,在全体接入过程中须要定义API接口名称,API访问路径,API方法类型等信息。
在发布为API接口做事后,对付后端做事的API参数信息也须要进行快速导入,以方便在API接口查询中看到详细的接口内容定义。

在将后端业务做事发布为API接口做事的时候,发布的代理做事要自动增加系统级的输入参数信息,这个输入参数最好的办法是在访问路径中进行增加,以减少对已有的后端做事的影响。

API接口在注册和接入完成后,将自动进行做事支配和做事发布,即注册接入完成后的做事可以通过发布的访问路径地址进行访问。

做事接入适配能力

做事注册接入本身分为两个层面,一个是已有做事的注册接入,一个是须要适配后的做事发布。
在设计的时候须要考虑到两个方面的需求。

对付已有做事的存代理接入最大略,即只须要供应业务系统的Rest接口做事地址即可,在接入的时候,对干系的日志,安全,流控,负载均衡等策略进行配置,配置完成后即完成做事接入和注册。
同时对付路由做事接入须要单独考虑,对付路由做事在接入的时候可以适配到多个原始业务系统的接口做事地址。

做事发布是对原来我们做事适配功能的一个改进,即直接从底向上的进行做事发布,而不须要实现定义做事元数据或模型,制订做事左券格式等,在做事发布完成后再天生干系的根本数据到做事元数据库即可。
对付做事发布参考做事适配的能力,我们可以考虑如了局景下的需求。

将一个已有的SOAP WS做事发布和注册为一个Http Rest接口做事。
将一个数据库表,或存储过程发布为一个Http Rest接口做事。
将一个JMS接口发布为一个Http Rest接口做事。
将一个JAR包中的API接口方法或函数发布为一个Http Rest接口做事。

对付做事发布而言,如果不仅仅是微做事网关能力,而是一个微做事支撑或微做事快速开拓平台的话,还可以供应完全的做事开拓和设计能力。
即在微做事平台首先定义数据或工具模型,然后将工具模型转换为Http Rest中的资源工具,并发布对应的Get , Post各种Http Rest接口做事。

对应发布的接口做事可以直接在微做事平台上进行拦截,仿照天生干系的输入或输出数据。
当然也可以直接将数据模型工具天生到对应的数据库,同时将微做事API接口的实现天生对应的Java代码框架并给出参考实现。
而我们剩余的事情,仅仅是添补代码逻辑即可。
通过这种办法可以极大的提高我们进行微做事架构开拓的速率。

API接口在线仿照测试功能

这个功能参考当前的OpenAPI能力开放平台的做法来实现即可。
即对付已经发布完成的API接口做事,供应在线测试工具进行在线测试。
同时对接口做事调用的输入参数进行构造化展示,方便用户对测试须要的各种参数进行输入。
在输入完成后形成完全的提交参数完全字符串。
通过测试,可以返回终极的仿照调用返回结果字符串信息。

同样,这里可以采取Swagger工具来完成,Swagger不仅仅是API接口的定义,接口文档的天生,同时还可以根据可以接口定义,自动天生接口测试用例,对接口进行测试事情。
我们也很随意马虎将Swagger能力整合都API网关的管理平台中。

API接口查询功能

对付API接口查询功能也是一个标准的功能,实际上可以考虑将查询功能和API接口做事的分类浏览分开。
对付API接口的分类浏览参考开放平台的API接口文档做法来实现接口。
对付API接口查询,即可以设置不同的动态查询条件,对API接口进行查询,返回结果集。
对付查询到的API接口清单列表,可以点击详细进入到API接口详细的输入和输出信息查看界面。

API状态管理功能

对付已经注册和发布的API接口可以对其状态进行管理。
个中紧张的状态包括了待发布,上线,停息,下线废弃等几种关键状态。
对付API状态本身还须要和后续的API监控管理结合,能够通过API性能监控动态的调度API接口的状态。
比如在API触发熔断后,自动对API接口状态调度为停息。

API版本管理能力

对付API须要启用版本管理能力。
当前一些API接口做事实现方法会在路径参数中增加API版本信息,以确定究竟访问哪个版本。
但是由于不同的API版本可能存在返回的结果集的数据构造不一样的问题,因此对付这种场景须要针对该API定义不同的大版本,不同的大版本实际上对应不同的后端原始做事。

在这里我们先容下当前主流的一些API网关功能供参考。

开源Kong API网关

在微做事架构之下,做事被拆的非常零散,降落了耦合度的同时也给做事的统一管理增加了难度。
如上图左所示,在旧的做事管理体系之下,鉴权,限流,日志,监控等通用功能须要在每个做事中单独实现,这使得系统掩护者没有一个全局的视图来统一管理这些功能。
API 网关致力于办理的问题便是为微做事纳管这些通用的功能,在此根本长进步系统的可扩展性。

Kong 的插件机制是其高可扩展性的根源,Kong 可以很方便地为路由和做事供应各种插件,网关所须要的基本特性,Kong 都如数支持:

云原生: 与平台无关,Kong可以从裸机运行到Kubernetes动态路由:Kong 的背后是 OpenResty+Lua,以是继续了动态路由的特性限流和熔断康健检讨日志: 可以记录通过 Kong 的 HTTP,TCP,UDP 要乞降相应。
鉴权: 权限掌握,IP 黑白名单,同样是 OpenResty 的特性SSL: Setup a Specific SSL Certificate for an underlying service or API.监控: Kong 供应了实时监控插件认证: 如数支持 HMAC, JWT, Basic, OAuth2.0 等常用协议REST API: 通过 Rest API 进行配置管理,从繁琐的配置文件中解放可用性: 天然支持分布式高性能: 背靠非壅塞通信的 nginx,性能自不用说插件机制: 供应浩瀚开箱即用的插件,且有易于扩展的自定义插件接口

从上面图可以看到,Kong网关是基于OpenResty运用做事器,OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。
用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 运用、Web 做事和动态网关。
而Kong 核心基于OpenResty构建,并且拥有强大的插件扩展功能。

在Http要求到达Kong网关后,转发给后端运用之前,可以通过网关的各种插件对要求进行流量掌握,安全,日志等各方面的处理能力。
当前Kong的插件分为开源版和社区版,社区版还有更多的定制功能,但是社区版是要收费的。

目前,KONG开源版本一共开放28个插件,如下:

acl、aws-lambda、basic-auth、bot-detection、correlation-id、cors、datadog、file-log、galileo、hmac-auth、http-log、ip-restriction、jwt、key-auth、ldap-auth、loggly、oauth2、rate-limiting、request-size-limiting、request-termination、request-transformer、response-ratelimiting、response-transformer、runscope、statsd、syslog、tcp-log、udp-log。

以上这些插件紧张分五大类,Authentication认证,Security安全,Traffic Control流量掌握,Analytics & Monitoring剖析&监控,Logging日志,其他还有要求报文处理类。
插件类似AOP开拓中的横切功能,可以灵巧的配置进行拦截掌握,下面选择一些关键性的插件进行大略的解释。

黑白名单掌握能力-ip-restriction

Kong供应的IP黑白名单掌握能力还算相称强,从配置项里面可以看到紧张可以针对两个维度进行配置,一个是针对所有的API接口还是针对特定的API接口,一个是针对所有的所有的消费方还是特定的某个消费方。
对付IP配置可以是一个区段,也可以是特定的IP地址。
但是黑白名单不能同时配置,其次当前没有一个功能是针对某一个别系供应的所有做事都启用黑名单或白名单功能。

日志记录能力-syslog, file-log,http-log

这里紧张日志的插件比较多,一个是sysLog在配置后可以直接将Kong产生的日志写入到运用做事器的系统日志文件中。
如果配置了file-log则是单独写入到你指定的file文件中。
对付http-log则是对付http做事要求,可以详细的记录要求的输入和输出报文信息,但是详细是记录到哪里,须要通过config.http_endpoint配置。
详细关键的配置参数信息如下:

consumer_id: 可选参数,消费者id(启用了消费者认证可以利用,根据id识别发出要求的消费者);

config.http_endpoint: 日志吸收做事器(包括利用的协议,http or https);

config.method: 可选参数,默认POST,访问日志做事器的要求办法(可选值:PUT,PATCH,POST);

config.timeout: 可选参数,默认10000毫秒,要求超时时间

config.keepalive: 可选参数,默认60000毫秒,连接在关闭之前可存活韶光

熔断插件-request-termination

该插件用来定义指定要求或做事不进行上层做事,而直接返回指定的内容.用来为指定的要求或指定的做事进行熔断。
把稳Kong的熔断插件觉得是临时对做事的禁用,而不是说当达到某一种监控阈值的时候自动触发熔断,或者干系内容还没有理解到。
从官方文档的运用处景也可以看到这点。

Temporarily disable a Service (e.g. it is under maintenance).

Temporarily disable a Route (e.g. the rest of the Service is up and running, but a particular endpoint must be disabled).

Temporarily disable a Consumer (e.g. excessive consumption).

如果仅仅是这种办法的熔断话,实际上意义并不是很大。
但是可用的地方就在于当某个业务系统进行发版支配的时候我们可以对该业务系统或该业务系统所供应的所有做事进行熔断。

限流插件-rate-limiting

Kong当前供应的限流相对来说还是比较弱,即紧张是掌握某一个API接口做事在单位韶光内最多只能够调用多少次,如果超过这个次数那么网关就直接谢绝访问并返回缺点提示信息。
而在前面我讲限流和流量掌握的时候常常会说到,便是限流实际上一个是根据做事调用次数,一个是根据做事调用数据量,须要在这两个方面进行限流。
而里面更加主要的反而是数据量的限流,由于大数据量报文每每更加随意马虎造成内存溢出非常。

安全认证类插件

当前Kong网关供应basic-auth,key-auth、ldap-auth,hmac-auth多种认证插件。

Basic-auth基本认证插件,即我们根据用户名和密码来天生一个base64编码,同时将该编码和目标做事绑定,这样在消费目标做事的时候就须要在报文头填写这个Base64编码信息。

Key-auth认证插件则是利用提前预设好的关键字名称,如下面设置的keynote = apices,然后为consumer设置一个key-auth 密钥,如果key-auth=test@keyauth。
在要求api的时候,将apikey=test@keyauth,作为一个参数附加到要求url后,或者放置到headers中。

Hmac-auth插件是设置绑定的service和rout,以启动hmac验证。
然后在Consumers页面中Hmac credentials of Consumer设置中添加一个username和secret。

要求报文容量限定-request-size-limiting

该插件用于限定要求报文的数据量大小,可以限定单个做事,也可以显示所有的API接口做事。

支持OAuth2.0身份认证-oauth2

Kong网关支持OAuth2.0身份认证,OAuth2.0 协议根据利用不同的适用场景,定义了用于四种授权模式。

Authorization code(授权码模式):标准的 Server 授权模式,非常适宜 Server 真个 Web 运用。
一旦资源的拥有者授权访问他们的数据之后,他们将会被重定向到 Web 运用并在 URL 的查询参数中附带一个授权码(code)。
在客户端里,该 code 用于要求访问令牌(access_token)。
并且该令牌交流的过程是两个做事端之前完成的,防止其他人乃至是资源拥有者本人得到该令牌。
其余,在该授权模式下可以通过 refresh_token 来刷新令牌以延长访问授权韶光,也是最为繁芜的一种办法。

Implicit Grant(隐式模式):该模式是所有授权模式中最大略的一种,并为运行于浏览器中的脚本运用做了优化。
当用户访问该运用时,做事端会立即天生一个新的访问令牌(access_token)并通过URL的#hash传回客户端。
这时,客户端就可以利用JavaScript等将其取出然后要求API接口。
该模式不须要授权码(code),当然也不会供应refresh token以得到长期访问的入口。

Resource Owner Password Credentials(密码模式):自己有一套用户体系,这种模式哀求用户供应用户名和密码来交流访问令牌(access_token)。
该模式仅用于非常值得信赖的用户,例如API供应者本人所写的移动运用。
虽然用户也哀求供应密码,但并不须要存储在设备上。
由于初始验证之后,只需将 OAuth 的令牌记录下来即可。
如果用户希望取消授权,由于其真实密码并没有被记录,因此无需修正密码就可以立即取消授权。
token本身也只是得到有限的授权,因此比较最传统的 username/password 授权,该模式依然更为安全。

Client Credentials(客户端模式):没有用户的观点,一种基于 APP 的密钥直接进行授权,因此 APP 的权限非常大。
它适宜像数据库或存储做事器这种对 API 的访问需求。

大略转换能力-request-transformer and response transformer

Kong网关供应对输入和输出报文大略转换的能力,这部分内容后续再详细展开先容。
从当前配置来看,紧张是对报文供应了Add, Replace,Rename,Append等各种大略操作能力。

Kong网关和其它网关的一些比拟。

从上面对比图也可以看到,Kong网关在功能,性能,插件可扩展性各方面都能够更好的知足企业API网关的需求。
因此我们也是基于Konga来进一步定制对Kong网关的管控管理平台。

在全体定制中增加了基于DB适配的Http Rest API接口的自动发布,API做事自动化注册,做事日志采集和做事日志查询,常见映射模板定制,接口做事的自动化测试等方面的能力。

阿里公有云API网关

首先我们来看下阿里云供应的API网关产品的功能先容:

API 网关(API Gateway),是供应API托管做事,涵盖API发布、管理、运维、售卖的全生命周期管理。
赞助用户大略、快速、低本钱、低风险的实现微做事聚合、前后端分离、系统集成,向互助伙伴、开拓者开放功能和数据。

阿里供应的API网关供应的关键功能,参考产品本身的功能文档解释,紧张如下:

API 生命周期管理

支持包括API 注册和接入发布、API 测试、API 下线等生命周期管理功能。
支持 API 日常管理、API 版本管理、API 快速回滚等掩护功能。
基本须要覆盖API管理全生命周期。

全面的安全防护

支持多种认证办法,支持 HMAC (SHA-1,SHA-256) 算法署名。
支持 HTTPS 协议,支持 SSL 加密。
防攻击、防注入、要求防重放、要求防修改。
(没看到是否支持Auth2.0和详细的Token验证机制)

灵巧的权限掌握

用户以 APP 作为要求 API 的身份,网关支持针对 APP 的权限掌握。
只有已经得到授权的 APP 才能要求相应的 API。
API 供应者可以将调用某个API 的权限主动付与给某个APP。
若 API上架到 API 市场,购买者可以将已购买的 API 授权给自己的 APP。
(没看到是否基于IP进行掌握,还是基于Token进行掌握,即对付消费方分配独立的Token信息)

精准的流量掌握

流量掌握可以用于管控 API的被访问频率、APP的要求频率、用户的要求频率。
流量掌握的韶光单位可以是分钟、小时、天。
支持流控例外,许可设置分外的 APP 或者用户。
(流量掌握只支持做事运行频率,没看到可以基于数据量进行流控)

要求校验

支持参数类型、参数值(范围、列举、正则、Json Schema)校验,无效校验会被 API 网关直接谢绝,以减少无效要求对后端造成的资源摧残浪费蹂躏,大幅降落后端做事的处理本钱。
(这个功能实际有一定的用途,并不会捐躯太多的性能,但是会实现一些大略的参数完全性校验能力。

数据转换

通过配置映射规则,实现前、后端数据翻译。
支持前端要求的数据转换。
支持返回结果的数据转换。
(暂时不清楚数据转换功能能够实现的能力)

监控报警

供应可视化的API实时监控,包括:调用量、流量大小、相应韶光、缺点率,在陆续增加维度。
支持历史情形查询,以便统筹剖析。
可配置预警办法(短信、Email),订阅预警信息,以便实时节制API运行情形。

自动工具

自动天生 API 文档,可供在线查看。
API 网关供应多种措辞 SDK 的示例。
降落 API 的运维本钱。
供应可视化的界面调试工具,快速测试,快速上线。
(当前网上也有不少的API接口文档自动天生工具可选)

API 市场

可将 API 上架到 API 市场,供更多开拓者采购和利用。

从全体功能的先容可以看到对付API的全生命周期管理(注册,接入,代理,路由,负载均衡),安全,权限,流量掌握,监控和告警等是所有API网关都必须具备的功能。
而对付API市场,API文档自动天生,要求的参数校验,数据的转换等则可以看做是扩展功能。

对付API市场每每是一个主要的扩展能力,即对付API接口做事可以作为商品一样进行订购和利用,并根据相应的调用次数,调用的数据量等条件进行计费处理。
这我们我们说的PaaS平台的做事层能力作为产品和做事发布,能够进行订购生产订单,能够进行计费等完备是一个道理。

对付公有云上API网关存在的背景解释

对付类似亚马逊,华为云,阿里云等公有云上为何要供应API网关类产品,其关键点还是在于一个企业如果内部的主动业务运用和系统都迁移到公有云后,那么当企业须要将内部多个业务系统的共享或发布给外部利用的时候如何做?这个时候必须要有一个API网关,来进行能力的统一发布,最基本是供应统一的做事目录访问,更加主要的是实现统一的安全管理,授权,做事日志监控预警能力。

因此一个企业迁移到公有云后,只要存在内部多业务系统,多组件都须要发布API接谈锋能给外部利用的时候,一定存在API网关的运用处景。

其它开源API网关

有赞团队的API网关实践

https://tech.youzan.com/api-gateway-in-practice/

有赞API网关目前承载着微商城、零售、眇小店、餐饮、美业、AppSDK、部分PC、三方开拓者等多个业务的调用,每天有着亿级别的流量。

有赞后端做事最开始是由PHP搭建,随着全体技能体系的升级,后面逐步从PHP迁移到基于Dubbo开拓了一个新的框架Nova,兼容Dubbo调用,同时支持调用PHP做事。
于是网关也支持了新的Nova协议,这样就有Dubbo、Http、Nova三种协议。

在这篇文章中提到的网关核心设计部分干系内容可以参考

异步特性:我们利用Jetty容器来支配运用,并开启Servlet3.0的异步特性,由于网关业务本身便是调用大量业务接口,因此IO操作会比较频繁,利用该特性能较大提升网关整体并发能力及吞吐量。

缓存:为了进一步提升网关的性能,我们增加了一层分布式缓存(借用Codis实现),将一些不常常变更的API元数据缓存下来,这样不仅减少了运用和DB的交互次数,还加快了读取效率。

链式处理:在设计网关的时候,我们采取任务链模式来实现网关的核心处理流程,将每个处理逻辑算作一个Pipe,每个Pipe按照预先设定的顺序先后实行

平滑限流:肃清了大略计数器限流带来的短韶光内流量不均的问题。
目前网关支持IP、店铺、API、运用ID和三方ID等多个维度的限流,也支持各维度的自由组合限流。

熔断降级:利用Hystrix进行熔断降级处理。
Hystrix支持线程池和旗子暗记量2种模式的隔离方案,内部也开拓了一个基于Hystrix的做事熔断平台

预警监控:实时地从Kafka消费API调用日志,如果创造某个API的RT或者缺点次数超过配置的报警阈值,则会立即触发报警

企业级API网关设计

https://cloud.tencent.com/developer/article/1080652

这篇文章是对企业级API网关设计必须系统化的产生,从API网关的概述,API网关所起的浸染,当前主流的API网关功能比拟剖析,API网关的高可用性设计多方面进行了阐述。

网关层作为客户端与做事真个一层挡板,紧张起到了三大类浸染:

隔离浸染:作为企业系统边界,隔离外网系统与内网系统。
解耦浸染:通过解耦,使得微做事系统的各方能够独立、自由、高效、灵巧地调度。
脚手架浸染:供应了一个地点,方便通过扩展机制对要求进行一系列加工和处理。

API网关作为对外供应做事的入口,就像企业做事的大门。
一方面,要有足够的能力,应对大量的对外访问,另一方面,还要给对内的做事供应一定的安全保障。
除此之外,企业供应的API做事多种多样,API网关要能够对这些API的全生命周期进行便捷的管理,例如做事发布、调度、下架、计费、监控等。

企业API网关在功能设计上紧张该当考虑如下内容:

API 生命周期管理功能:覆盖 API 的定义、测试、发布的全体生命周期管理。

API开拓和利用支持功能:

安全防护功能:API 要求到达网关须要经由身份认证、权限认证,才能到达后端做事。
流量掌握功能:API调用次数,非常,分级。
流控粒度:分钟、小时、天。
要求管理功能:可根据配置进行参数类型、参数值(范围、列举、正则)的校验监控告警功能:供应实时、可视化的 API 监控,调用量、调用办法、相应韶光、缺点率。
API交易功能: 供应API交易市场,计量计费、Quota 掌握、运营售卖等需求。

顺着这篇文章,我们参考了其余一篇谈如何设计高并发下API网关的一篇文章,重点对并发模型,SEDA基于事宜的并发架构进行了阐述。

地址:https://mp.weixin.qq.com/s?__biz=MzI5MDEzMzg5Nw==&mid=412734308&idx=1&sn=f1c1bd5e22e2ae7dedf4b788a625e814&scene=21#wechat_redirect

传统的并发编程模型紧张有两种:一种是Thread-based concurrency, 另一种是Event-driven concurrency。
总结下两种模式的特点如下:

基于线程的并发:每个任务一线程直线式的编程利用资源高昂,context切换代价高,竞争锁昂贵,太多线程可能导致吞吐量低落,相应韶光暴涨;

基于事宜的并发:单线程处理事宜的每个并发流实现为一个有限状态机运用直接掌握并发负载增加的时候,吞吐量饱和相应韶光线性增长。

SEDA架构是目前云打算、微做事时期下一种精良的处理架构,而且历经磨练,稳定可靠。
SEDA架构的核心思想:把一个要求处理过程分成几个Stage,每个Stage可由不同的微做事进行处理,不同资源花费的Stage利用不同数量的线程来处理,微做事之间采取异步通讯的模式。

开源API网关Goku

GoKu API Gateway,中文名:悟空API网关,是eoLinker旗下、海内首个企业级开源的go措辞API网关,帮助企业进行API做事管理与API性能安全掩护,为企业数字化赋能。

GoKu支持OpenAPI与微做事管理,支持私有云支配,实现API转发、要求参数转换、数据校验等功能,供应图形化界面管理,能够快速管理多个API网关,提高API业务安全性。

码云地址:https://gitee.com/eolinker/goku-api-gateway官网地址:https://www.eolinker.com/product/api_gateway/

Goku API Gateway (悟空 API 网关)是运行在企业系统做事边界上的微做事网关。
当您构建网站、App、IOT乃至是开放API交易时,Goku API Gateway 能够帮你将内部系统中重复的组件抽取出来并放置在Goku网关上运行,如进行用户授权、访问掌握、防火墙、数据转换等;并且Goku 供应做事编排的功能,让企业可以快速从各种做事上获取须要的数据,对业务实现快速相应。

Goku API Gateway 的社区版本(CE)拥有完善的利用指南和二次开拓指南,代码利用纯 Go 措辞编写,拥有良好的性能和扩展性,并且内置的插件系统能够让企业针对自身业务进行定制开拓。
并且 Goku API Gateway 支持与 EOLINKER 旗下的 API Studio 接口管理平台结合,对 API 进行全面的管理、自动化测试、监控和运维。

产品关键特性

掌握台:通过清晰的UI界面对网关集群进行各项配置。
集群管理:Goku网枢纽关头点是无状态的,配置信息自动同步,支持节点水平拓展和多集群支配。
热更新:无需重启做事,即可持续更新配置和插件。
做事编排:一个编排API对应多个backend,backend的入参支持客户端传入,也支持backend间的参数通报;backend的返回数据支持字段的过滤、删除、移动、重命名、拆包和封包;编排API能够设定编排调用失落败时的非常返回。
数据转换:支持将返回数据转换成JSON或XML。
负载均衡:支持有权重的round-robin负载平衡。
做事创造:从 Consul、Eureka 等注册中央创造后端做事器。
HTTP(S)反向代理:隐蔽真实后端做事,支持 Rest API、Webservice。
多租户管理:根据不同的访问终端或用户来判断。
访问策略:支持不同策略访问不同的API、配置不同的鉴权(匿名、Apikey、Basic)等。
灵巧的转发规则:支持模糊匹配要求路径,支持改写转发路径等,可为不同访问策略或集群设置不同的负载。
IP黑白名单。
自定义插件:许可插件挂载在常见阶段,例如before match,access和proxy。
CLI: 利用命令行来启动、关闭和重启Goku。
Serverless: 在转发过程的每一个阶段,都可以添加并调用自定义的插件。
要求日志(access log):仅记录转发的基本内容,自定义记录字段与排序顺序,定期自动清理日志。
运行日志(system log):供应掌握台和节点的运行日志,默认仅记录ERROR等级的信息,可将等级按实际情形调成INFO、WARN或DEBUG。
可扩展:大略易用的插件机制方便扩展功能。
高性能:性能在浩瀚网关之中表现精良。
Open API:供应 API 对网关进行操作,便于集成。
版本掌握:支持操作的发布和多次回滚。
监控和指标:支持Prometheus、Graphite。

详细比拟:https://help.eolinker.com/#/tutorial/?groupID=c-269&productID=19

从比拟可以看到,开源版本对付关键的做事限流熔断,做事降级,数据缓存,格式转换,要求大小校验等能力是没有的,这些能力只在企业版本中供应。

由于该网关基于Go措辞编写,因此比类似Zuul网关有更好的性能,实际性能测试结果数据来看,和Kong网关的性能比较靠近,比Kong网关性能略好。

关键内容解释

全体支配架构图和常见的ESB总线或API网关产品类似,数据库可以采取Oracle或Mysql数据库,缓存采取Redis库进行缓存。
前端通过F5或Ngnix进行负载均衡,本身网枢纽关头点是无状态的,支持集群化架构支配。

通过定期检讨后端做事器的可用情形,智能识别可用后端、屏蔽不可用后端,减少做事器开销。
这个实际类似对后真个业务做事进行心跳监测,涌现问题后进行屏蔽或预警,后端做事不可用时候实际通过API网关封装暴露的新代理做事本身也处于不可用状态。

对付后真个业务做事本身可以再通过类似Ngnix集群或K8s集群暴露集群IP地址接入,当然网关本身也支持直接将多个后端业务多节点接入到网关中,由网关对后端业务做事器阶段进行负载均衡,在采取了类似容器化和K8s或集群架构的后端来说,该功能每每并不会用到。

API康健检讨,文档编写完成之后,API 定期检讨节点运行状态,若节点涌现非常则通过邮件或者API发送告警信息,并自动考试测验重启修复节点。
实际我们看到对付API的监控检讨包括了两个方面,一个是通过网关封装后的API节点的监控检讨,一个是后端业务API做事的监控检讨。

API断线重连:要求转发失落败后,网关会进行一定次数的断线重连,防止因网络闪断等缘故原由导致API访问质量低落。
这个类似我们说的做事重试机制,传统ESB总线的标准能力。
该功能还是有用,紧张是为了防止网络闪断引起的做事访问非常。

在网关里可以给不同的调用方或客户端设置访问策略,不同的访问策略可以设置不同的 API 访问权限、鉴权办法以及插件功能等。
网关支持 开放策略 与 普通策略:

开放策略:系统自带访问策略,利用开放策略时不须要通报策略 ID 参数;普通策略:自定义访问策略,须要通报策略 ID 参数。

网关的插件分为 策略插件 与 API插件。

策略插件包括:流量掌握、鉴权、IP黑白名单等。
API插件包括:参数映射、额外参数、熔断、做事降级等。

鉴权的工具为 策略 (Strategy) ,策略可表示为一个公司、一个业务部门或一个用户。
开源版网关支持以下鉴权办法:Public、Basic、Apikey。
暂时没有看到基于消费访问IP地址的做事访问鉴权,不清楚是否企业版由对应的IP认证鉴权支持。

日志管理能力

网关系统的日志分为两大部分:要求日志(access.log)和系统运行时日志;运行时日志又分为:掌握台的运行日志(console.log)、各节点的运行日志(node.log)。
对付要求日志可以详细的配置日志存放路径,记录周期,详细记录的内容等。

整体相对来说,当前网关供应的日志管理能够偏弱,特殊这天记信息的查看,基于做事日志运行进行的API接口做事的运行剖析统计等方面的能力。

参数映射:功能具备,但是利用起来会比较麻烦,暂时没看到图形化或者表格办法的参数映射界面。
对付参数映射不一定完备的图形化,但是供应类似阿里云API网关的表格化映射是一种可行的办法。

小豹API网关

http://www.xbgateway.com/architecture.html

这个是最近在网上查找API网关干系资料的时候搜索到的一个商用的API网关,从产品先容材料来看,我们前面谈过的网关的核心功能基本上全部包括,而且相称来说也比较完善。
同时供应了一个较方便的API网关的管理管控平台,可以方便的对API注册接入和运行全生命周期, 方便对安全,流控,日志各方面进行灵巧管控。

下面我们看下网站对API网关架构特点的一些解释:

基于Netty NIO的相应式架构;分布式缓存基于Redis;数据库基于Mysql,分布式配置基于ZooKeeper

API配置缓存,运行时不依赖DB,配置更新后自动关照各网枢纽关头点;

支持自定义组件,动态加载,在不中断网关做事的情形下重新加载配置和运行组件;

API做事连续非常后自动熔断和自我规复,访问非常、超时处理;

网关核心运行过程不写磁盘IO,避免磁盘IO性能影响网关吞吐量;

Docker容器化支持,拆分网关、管理做事、第三方中间件依赖等镜像,便于灵巧扩容。

RestCloud API企业微做事API开拓

http://www.restcloud.cn/restcloud/mycms/apigateway.html

RestCloud API网关是完备自主研发的面向企业级的API网关,一且以大略、易用、轻量级为目标进行研发,同时兼顾作为企业级的做事总线可以更换企业原有的ESB产品,RestCloud是集ESB和API网关于一体的企业级网关产品。
这个不仅仅供应了API网关, 也供应了微做事快速开拓平台,API做事管理平台,DaaS等干系组件。

其余RestCloud本身还供应了Http Rest API接口的快速开拓平台,可以将数据库表,表工具,1多多工具关系的快速的发布为Http Rest API接口做事,同时支持多数据库接口适配。

标签:

相关文章

QQ伪装黑客代码大全技术与风险警示

网络安全问题日益凸显。QQ作为一种流行的社交工具,成为了黑客攻击的主要目标之一。本文将针对QQ伪装黑客代码大全进行深入剖析,揭示其...

Web前端 2025-03-02 阅读1 评论0