目录
企业级API网关,金蝶是如何架构的?
许多开发者可能已经编写了许多 API 接口,但未必了解或接触过API网关的功能与作用。
在大多数情况下,我们的 API 都是“裸奔”在外,在高流量,高并发等场景下,可能会轻易导致服务异常。在这种情况下,网关就应运而生,为我们的系统提供保护!
什么是API网关?
API 网关是一种服务器,作为应用程序编程接口 (API) 的入口点,用于接收和处理来自外部应用程序的请求,并提供适当的响应。可以将其视为一个管理 API 访问的中间件,在请求和响应之间进行转换、路由、安全检查和其他处理。
如果将 API 网关比喻为地铁的进站口,那么它可以更好地理解其重要作用。就像地铁的进站口一样,API 网关是所有流量进入系统的入口点,需要进行安全检查和身份验证,以确保只有授权的用户和应用程序可以访问 API。
当系统中的流量超过 API 的承受能力时,API 网关可以执行限流操作,以确保系统的稳定性和可靠性。这可以通过减少同时连接的数量或限制请求的速率来实现。API 网关还可以执行其他任务,如日志记录、监控和分析,以便更好地了解应用程序的使用情况和性能。
因此,API 网关对于保障应用程序的平稳运行和安全稳定性至关重要。它充当着整个系统的流量大门,管理着所有 API 访问,确保只有经过授权的请求才能进入系统,并提供适当的响应。
金蝶API网关KCGW介绍
网关作为一个如此重要作用的产品,基本上各大互联网公司都会有网关这个中间件,金蝶也不例外。
在苍穹云基础平台部中,有一个名为KCGW(Kingdee-Cloud-API-Gateway)的网关组件,它是一款全动态、高性能的自研企业级 API 网关,提供了基础的反向代理、负载均衡、动态路由、服务限流、服务熔断、身份认证、可观测性等功能。
KCGW功能
KCGW 是基于 Golang+etcd 实现的云原生网关,采用数据面与控制面分离的架构,控制面下发规则,数据面处理规则。
在 KCGW 中,一切都是动态的。
配置、路由规则、插件等都是以毫秒级热更新热加载至内存的,无需重启服务就可以持续更新配置和插件。
KCGW 还引入了 RadixTree 压缩前缀树来作为高性能路由的保障,大家看看路由性能压测数据就知道它有多强悍了。
场景 | QPS | 时延(微秒) |
---|---|---|
路径全部匹配 | 31177 | 681.73 |
前缀匹配 | 30149 | 691.99 |
动态参数匹配 | 30544 | 713.86 |
路由性能压测数据1
KCGW网关的功能
下面我们将简要说明如何使用 KCGW,作为服务的流量保护伞。
假设我们作为 API 发布者,场景是API发布者如何将API发布到网关。
新建服务分组
API 分组可以理解为同一业务 API 的集合,API 开发者以 API 分组为单位,管理分组内的所有 API。
新建API并发布
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,应用将自身的服务能力封装成 API,并通过 API 网关开放给用户调用。
创建完对应的 API 分组后,我们需要定义 API 的请求、后端信息,并设置对应的认证、流量控制等策略。
创建API的方式有两种:
1)可以通过在界面上定义并创建API;
2)也支持通过swagger来批量导入。
本次我们通过前一种方式来创建API。
新建应用
一个应用(APP)可以定义 API 的调用者身份。一个 API 可以被多个应用授权,同样,多个 API 也可以被同一个应用授权。
我们可以把“应用”理解为API的消费者,创建完成后,就可以进行 API 的授权调用测试了!
其他功能
作为一款企业级网关,KCGW 不仅支持上述功能,还提供
-
环境管理
-
多租户
-
多区域
-
API 分组管理
-
API 的授权订阅
-
Swagger 接口的导入导出
-
配额管理
-
限流熔断
-
可观测性
-
调用链等
API的申请和使用流程
最后,我们再提供一下API的申请和使用流程
-
租户内调用
-
跨租户调用
租户内调用流程如下:
跨租户调用流程如下: