33

开源API网关Goku(1.8)

 4 years ago
source link: http://blog.sina.com.cn/s/blog_493a84550102z6ia.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

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。

产品后续迭代计划

Open Tracing: 支持Zipkin

动态路由: 不同参数值不同转发

gRPC 协议转换: 支持协议的转换,客户端可以通过 HTTP/JSON 来访问 gRPC API

GoKu API Gateway本身有开源版本,也有企业版本。

具体对比: https://help.eolinker.com/#/tutorial/?groupID=c-269&productID=19

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

u222ErZ.jpg!web

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

具体帮助文档: https://help.eolinker.com/#/tutorial/?productID=19

关键特性介绍: https://www.eolinker.com/product/api_gateway/

下面我们结合官方网站介绍和帮助文档来对里面的一些关键内容做下说明

整个部署架构图和常见的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插件包括: 参数映射、额外参数、熔断、服务降级等。

如果不使用任何插件,AGW的使用流程大致是四个步骤:

1. 新建API;( API分组,API名称,请求方式,路径,超时配置,重试配置等)

2. 新建访问策略和访问策略绑定; (新建访问策略,让后将访问策略绑定到API)

3. 用户通过网关访问API。

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

服务编排能力: 服务编排在转法时可调用多个API,采用 添加Step 的方式,每个Step里可以配置以下内容:

转发地址:实际转发的后端地址;如需使用负载均衡,请填写 负载后端名称;需要填写HTTP或HTTPS等协议头

映射路径:实际转发的路径

转发方式:支持POST、GET、PUT、DELETE、HEAD、OPTIONS、PATCH

返回数据:JSON

超时限制:Step自己的超时,单位ms

重试次数:转发失败时重新发起请求的次数

入参:可以手动填写,也可以接收客户端的传参

返回值的处理:对字段进行过滤和整合的操作(黑名单、白名单、删除、移动、重命名、拆包、封包)

可以看到服务编排虽然不是可视化的方式,但是能够满足大部分的服务使用场景。

日志管理能力

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

整体相对来说,当前网关提供的日志管理能够偏弱,特别是日志信息的查看,基于服务日志运行进行的API接口服务的运行分析统计等方面的能力。

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK