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

news2025/1/19 11:11:56

说在前面

在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网关功能

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

什么是API网关?

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

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

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

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

金蝶API网关KCGW介绍

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

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

KCGW功能

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

KCGW功能

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

KCGW架构

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

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

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

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

场景QPS时延(微秒)
路径全部匹配31177681.73
前缀匹配30149691.99
动态参数匹配30544713.86

路由性能压测数据1

路由性能压测数据2

路由性能压测数据2

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。

新建API流程

新建应用

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

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

新建应用

其他功能

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

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

API的申请和使用流程

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

  • 租户内调用

  • 跨租户调用

租户内调用流程如下:

租户内调用

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

跨租户调用流程如下:

跨租户调用

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

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

架构之路,充满了坎坷。

架构和高级开发不一样,架构问题是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,请到下面公号【技术自由圈】取↓↓↓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1107305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文阅读之《Kindling the Darkness: A Practical Low-light Image Enhancer》

目录 摘要 介绍 已有方法回顾 普通方法 基于亮度的方法 基于深度学习的方法 基于图像去噪的方法 提出的方法 2.1 Layer Decomposition Net 2.2 Reflectance Restoration Net 2.3 Illumination Adjustment Net 实验结果 总结 Kindling the Darkness: A Practical L…

安科瑞Acrel-7000工业能耗在线监测系统,企业能源管控平台

安科瑞虞佳豪 能源管理系统采用分层分布式系统体系结构,对建筑的电力、燃气、水等各分类能耗数据进行采集、处理,并分析建筑能耗状况,实现建筑节能应用等。通过能源计划,能源监控,能源统计,能源消费分析&a…

脏数据绕过waf,Yakit爆破base64编码密码,ssh无密码登录受害主机

文章目录 waf、Yakit、ssh 技巧waf 脏数据绕过Yakit 工具对明文密码通过base64编码的格式进行爆破 SSH实操 waf、Yakit、ssh 技巧 waf 脏数据绕过 以pikachu靶场的文件上传功能为例 上传一个木马图片 显示已拦截。 找到form-data;字段加一个分号,中间写一些脏数…

电子器件系列49:CD4050B缓冲器

同相和反向缓冲器 还搞不懂缓冲电路?看这一文,工作原理作用电路设计使用方法 - 知乎 (zhihu.com) 缓冲器_百度百科 (baidu.com) 1、缓冲器的定义 缓冲器是数字元件的其中一种,它对输入值不执行任何运算,其输出值和输入值一样&…

Linux真的很难吗?文末送5本《Linux运维之道(第3版)》

目录 一、百度百科二、VMWare中安装centos1、下载地址2、网络适配器简介 三、克隆和快照1、克隆一般用于项目部署2、快照相当于SVN,是Linux系统的版本管理手段 四、XShell和Xftp1、XShell百度百科2、Xftp百度百科3、xshell7和xftp7下载地址 五、vi和vim1、vim基本编…

无管道后门(Backdoor)编写

1. 代码编写 这是基于异步套接字的后门, 利用windows提供的WSASocket API函数, 这个API和socket的区别是, 其无需等待收发完成就可以继续执行, 也就是异步的。这可实现不用管道进行收发数据。 代码: #include <WinSock2.h> #include <windows.h> #include <tc…

Leetcode 349 两个数组的交集 (哈希表)

Leetcode 349 两个数组的交集 &#xff08;哈希表&#xff09; 解法1 &#x1f60b;解法2 解法1 &#x1f60b; 自己的笨比方法:【哇这居然是标准解法之一&#xff0c;我不是笨比&#x1f60b;&#x1f60b;&#x1f60b;】 创建了两个hash数组&#xff0c;nums1出现一个就对应…

基于鹰栖息优化的BP神经网络(分类应用) - 附代码

基于鹰栖息优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于鹰栖息优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.鹰栖息优化BP神经网络3.1 BP神经网络参数设置3.2 鹰栖息算法应用 4.测试结果&#x…

华为云云耀云服务器L实例性能测评|华为云云耀云服务器L实例评测使用体验

华为云云耀云服务器L实例性能测评 文章目录 华为云云耀云服务器L实例性能测评1. 云耀云服务器L实例简介1.2 云耀云服务器与弹性云服务器区别1.3 云耀负载均衡 2. 云耀云服务器L实例购买2.1 云耀服务器L实例购买2.1.1 云耀服务器L实例初始化配置2.1.2 远程登录云耀服务器L实例 3…

【Java 进阶篇】HTML DOM样式控制详解

当我们讨论网页设计时&#xff0c;样式是一个至关重要的方面。它使我们能够改变文本、图像和其他页面元素的外观&#xff0c;从而创造出吸引人的网页。在HTML DOM&#xff08;文档对象模型&#xff09;中&#xff0c;我们可以使用JavaScript来操作和控制样式。这篇博客将详细介…

OneDrive打不开了,怎么办?使用管理员身份也无效,分享解决办法如下

文章目录 1、问题描述2、解决办法2.1 修改注册表信息2.2 修改本地组策略 1、问题描述 电脑自带的 OneDrive 突然打不开了&#xff0c;双击也没有任何反应&#xff0c;以管理员身份打开也不行。去看了好多资料才解决这个问题&#xff0c;现分享如下&#xff1b; 2、解决办法 …

计网 七层网络模型

计网 七层网络模型 一.协议&#xff08;protocol&#xff09; 1.什么是协议 数据在网络中传输时按照的规则就是协议&#xff08;protocol&#xff09; 协议&#xff08;protocol&#xff09;规定了数据在网络中传输的顺序&#xff0c;格式&#xff0c;以及携带哪些内容 二…

【解决】运行vue项目,启动报错 in ./node_modules/@intlify/core-base/dist/core-base.cjs

我的处理方式: 一开始查了好多方法&#xff0c;删除node_modules&#xff0c;重新安装&#xff0c;切换node版本等&#xff0c;但是发现并没有用 之后来发现是安装依赖包的时候有些包安装失败导致的&#xff0c;只要有针对性的重新安装依赖就可以了 例如&#xff1a; in ./n…

【vue2.x】如何快速实现每个月倒计时

代码一 //获取这个月最后一天getLastDay(){var year new Date().getFullYear(); //获取年份var month new Date().getMonth() 1; //获取月份var lastDate new Date(year, month , 0).getDate(); //获取当月最后一日month month < 10 ? 0 month : month ; //月份补 0…

6 个可解锁部分 GPT-4 功能的 Chrome 扩展(无需支付 ChatGPT Plus 费用)

在过去的几个月里&#xff0c;我广泛探索了 ChatGPT 的所有可用插件。在此期间&#xff0c;我发现了一些令人惊叹的插件&#xff0c;它们改进了我使用 ChatGPT 的方式&#xff0c;但现在&#xff0c;我将透露一些您需要了解的内容。 借助 Chrome 扩展程序&#xff0c;所有 Chat…

深度学习(生成式模型)——DDPM:denoising diffusion probabilistic models

文章目录 前言DDPM的基本流程前向过程反向过程DDPM训练与测试伪代码 前向过程详解反向过程详解DDPM损失函数推导结语 前言 本文将总结扩散模型DDPM的原理&#xff0c;首先介绍DDPM的基本流程&#xff0c;接着展开介绍流程里的细节&#xff0c;最后针对DDPM的优化函数进行推导&…

网络通信——与WEB服务器交换数据(三十)

1. 与WEB服务器交换数据 1.1 知识点 &#xff08;1&#xff09;可以通过地址重写的方式进行Web Server的访问&#xff1b; &#xff08;2&#xff09;可以采用POST方式进行请求的提交&#xff1b; &#xff08;3&#xff09;可以读取网络上的图片信息&#xff1b; 1.2 具体…

javaEE - 1(9000字详解多线程第一篇)

一&#xff1a;认识线程 1.1 线程的概念 线程是操作系统中执行的最小单位&#xff0c;它是进程中的一个实体。一个进程可以包含多个线程&#xff0c;并且这些线程共享进程的资源&#xff0c;如内存、文件句柄等&#xff0c;但每个线程有自己的独立执行流程和栈空间。 线程在…

SOAR安全事件编排自动化响应-安全运营实战

SOAR是最近几年安全市场上最火热的词汇之一。各个安全产商都先后推出了相应的产品&#xff0c;但大部分都用得不是很理想。SOAR不同与传统的安全设备&#xff0c;买来后实施部署就完事&#xff0c;SOAR是一个安全运营系统&#xff0c;是实现安全运营过程中人、工具、流程的有效…

【GlobalMapper精品教程】063:线转面,面转线、线折点转点、面折点转点、点生成线、点生成面案例教程

本文讲解globalmapper中进行矢量线转面,面转线、线折点转点、面折点转点、点生成线、点创建面的方法。 文章目录 一、 面转线二、线转面三、线折点转点四、面折点转点五、点生成线六、点生成面一、 面转线 加载《GlobalMapper中文实战精品教程》(订阅专栏,获取所有文章阅读…