企业级API网关,金蝶是如何架构的?

说在前面

在40岁老架构师 尼恩的读者交流群(50+)中,很多小伙伴拿到一线互联网企业如阿里、网易、有赞、希音、百度、滴滴的面试资格。

最近,尼恩指导一个小伙伴简历,写了一个《高并发网关项目》,此项目帮这个小伙拿到 字节/阿里/微博/汽车之家 面邀, 所以说,这是一个牛逼的项目。

为了帮助大家拿到更多面试机会,拿到更多大厂offer。

尼恩决定:给大家出一章视频介绍这个项目的架构和实操,《33章:10Wqps 高并发 Netty网关架构与实操》,预计月底发布。然后,提供一对一的简历指导,让你简历金光闪闪、脱胎换骨。

《33章:10Wqps 高并发 Netty网关架构与实操》 海报如下:

配合《33章:10Wqps 高并发 Netty网关架构与实操》, 尼恩会梳理几个工业级、生产级网关案例,作为架构素材、设计的素材。

前面梳理了

  • 《日均数十亿访问,个推API网关如何架构?》
  • 《工业级Netty网关,京东是如何架构的?》
  • 《2亿用户,B站API网关如何架构?》
  • 《100万级连接,石墨文档WebSocket网关如何架构?》
  • 《单体120万连接,小爱网关如何架构?》
  • 《亿级长连接,淘宝接入层网关的架构设计》
  • 《100万级连接,爱奇艺WebSocket网关如何架构》
  • 《日200亿次调用,喜马拉雅网关的架构设计》
  • 《千万级连接,知乎如何架构长连接网关?》
  • 《日流量200亿,携程网关的架构设计》

除了以上的10个案例,这里,尼恩又找到一个漂亮的生产级案例:《企业级API网关,金蝶是如何架构的?》。

这些案例,并不是尼恩的原创。这些案例,仅仅是尼恩在《33章:10Wqps 高并发 Netty网关架构与实操》备课的过程中,在互联网查找资料的时候,收集起来的,供大家学习和交流使用。

最新《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》的PDF,请到公号【技术自由圈】获取

文章目录

    • 说在前面
    • 企业级API网关,金蝶是如何架构的?
    • 什么是API网关?
    • 金蝶API网关KCGW介绍
    • KCGW功能
    • KCGW网关的功能
      • 新建服务分组
      • 新建API并发布
      • 新建应用
      • 其他功能
    • API的申请和使用流程
    • 说在最后:有问题可以找老架构取经
    • 尼恩技术圣经系列PDF

企业级API网关,金蝶是如何架构的?

作者:金蝶云社区shawyen

许多开发者可能已经编写了许多 API 接口,但未必了解或接触过API网关的功能与作用。

在大多数情况下,我们的 API 都是“裸奔”在外,在高流量,高并发等场景下,可能会轻易导致服务异常。在这种情况下,网关就应运而生,为我们的系统提供保护!

企业级API网关,金蝶是如何架构的?_第1张图片

注意:请点击图像以查看清晰的视图!

什么是API网关?

API 网关是一种服务器,作为应用程序编程接口 (API) 的入口点,用于接收和处理来自外部应用程序的请求,并提供适当的响应。可以将其视为一个管理 API 访问的中间件,在请求和响应之间进行转换、路由、安全检查和其他处理。

如果将 API 网关比喻为地铁的进站口,那么它可以更好地理解其重要作用。就像地铁的进站口一样,API 网关是所有流量进入系统的入口点,需要进行安全检查和身份验证,以确保只有授权的用户和应用程序可以访问 API。

当系统中的流量超过 API 的承受能力时,API 网关可以执行限流操作,以确保系统的稳定性和可靠性。这可以通过减少同时连接的数量或限制请求的速率来实现。API 网关还可以执行其他任务,如日志记录、监控和分析,以便更好地了解应用程序的使用情况和性能。

因此,API 网关对于保障应用程序的平稳运行和安全稳定性至关重要。它充当着整个系统的流量大门,管理着所有 API 访问,确保只有经过授权的请求才能进入系统,并提供适当的响应。

金蝶API网关KCGW介绍

网关作为一个如此重要作用的产品,基本上各大互联网公司都会有网关这个中间件,金蝶也不例外。

在苍穹云基础平台部中,有一个名为**KCGW(Kingdee-Cloud-API-Gateway)**的网关组件,它是一款全动态、高性能的自研企业级 API 网关,提供了基础的反向代理、负载均衡、动态路由、服务限流、服务熔断、身份认证、可观测性等功能。

企业级API网关,金蝶是如何架构的?_第2张图片

注意:请点击图像以查看清晰的视图!

KCGW功能

KCGW 是基于 Golang+etcd 实现的云原生网关,采用数据面与控制面分离的架构,控制面下发规则,数据面处理规则。

企业级API网关,金蝶是如何架构的?_第3张图片

注意:请点击图像以查看清晰的视图!

在 KCGW 中,一切都是动态的。

配置、路由规则、插件等都是以毫秒级热更新热加载至内存的,无需重启服务就可以持续更新配置和插件。

KCGW 还引入了 RadixTree 压缩前缀树来作为高性能路由的保障,大家看看路由性能压测数据就知道它有多强悍了。

场景 QPS 时延(微秒)
路径全部匹配 31177 681.73
前缀匹配 30149 691.99
动态参数匹配 30544 713.86

路由性能压测数据1

企业级API网关,金蝶是如何架构的?_第4张图片

路由性能压测数据2

KCGW网关的功能

下面我们将简要说明如何使用 KCGW,作为服务的流量保护伞。

假设我们作为 API 发布者,场景是API发布者如何将API发布到网关

新建服务分组

API 分组可以理解为同一业务 API 的集合,API 开发者以 API 分组为单位,管理分组内的所有 API。

企业级API网关,金蝶是如何架构的?_第5张图片

新建服务分组

新建API并发布

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,应用将自身的服务能力封装成 API,并通过 API 网关开放给用户调用。

创建完对应的 API 分组后,我们需要定义 API 的请求、后端信息,并设置对应的认证、流量控制等策略。

创建API的方式有两种

1)可以通过在界面上定义并创建API;

2)也支持通过swagger来批量导入。

本次我们通过前一种方式来创建API。

企业级API网关,金蝶是如何架构的?_第6张图片

企业级API网关,金蝶是如何架构的?_第7张图片

企业级API网关,金蝶是如何架构的?_第8张图片

企业级API网关,金蝶是如何架构的?_第9张图片

新建应用

一个应用(APP)可以定义 API 的调用者身份。一个 API 可以被多个应用授权,同样,多个 API 也可以被同一个应用授权。

我们可以把**“应用”理解为API的消费者**,创建完成后,就可以进行 API 的授权调用测试了!

企业级API网关,金蝶是如何架构的?_第10张图片

企业级API网关,金蝶是如何架构的?_第11张图片

企业级API网关,金蝶是如何架构的?_第12张图片

其他功能

作为一款企业级网关,KCGW 不仅支持上述功能,还提供

  • 环境管理
  • 多租户
  • 多区域
  • API 分组管理
  • API 的授权订阅
  • Swagger 接口的导入导出
  • 配额管理
  • 限流熔断
  • 可观测性
  • 调用链等

API的申请和使用流程

最后,我们再提供一下API的申请和使用流程

  • 租户内调用

  • 跨租户调用

租户内调用流程如下:

企业级API网关,金蝶是如何架构的?_第13张图片

注意:请点击图像以查看清晰的视图!

跨租户调用流程如下:

企业级API网关,金蝶是如何架构的?_第14张图片

注意:请点击图像以查看清晰的视图!

说在最后:有问题可以找老架构取经

架构之路,充满了坎坷。

架构和高级开发不一样,架构问题是open/开放式的,架构问题是没有标准答案的。

正由于这样,很多小伙伴,尽管耗费很多精力,耗费很多金钱,但是,遗憾的是,一生都没有完成架构升级

所以,在架构升级/转型过程中,确实找不到有效的方案,可以来找40岁老架构尼恩求助

前段时间一个小伙伴,他是跨专业来做Java,现在面临转架构的难题,但是经过尼恩几轮指导,顺利拿到了Java架构师+大数据架构师offer 。所以,如果遇到职业不顺,找老架构师帮忙一下,就顺利多了。

尼恩技术圣经系列PDF

  • 《NIO圣经:一次穿透NIO、Selector、Epoll底层原理》
  • 《Docker圣经:大白话说Docker底层原理,6W字实现Docker自由》
  • 《K8S学习圣经:大白话说K8S底层原理,14W字实现K8S自由》
  • 《SpringCloud Alibaba 学习圣经,10万字实现SpringCloud 自由》
  • 《大数据HBase学习圣经:一本书实现HBase学习自由》
  • 《大数据Flink学习圣经:一本书实现大数据Flink自由》
  • 《响应式圣经:10W字,实现Spring响应式编程自由》
  • 《Go学习圣经:Go语言实现高并发CRUD业务开发》

……完整版尼恩技术圣经PDF集群,请找尼恩领取

《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》PDF,请到下面公号【技术自由圈】取↓↓↓

你可能感兴趣的:(面试,架构,java,面试,网络,gateway,https,websocket)