From 2edd6e68daf8080b4cc83dac5d14dd29aa80be7a Mon Sep 17 00:00:00 2001 From: binghe001 <“1028386804@qq.com”> Date: Mon, 15 Jul 2024 00:15:45 +0800 Subject: [PATCH] =?UTF-8?q?feature:=20=E3=80=8A=E5=88=86=E5=B8=83=E5=BC=8F?= =?UTF-8?q?=E9=AB=98=E6=80=A7=E8=83=BD=E7=BD=91=E5=85=B3=E3=80=8B-?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E5=88=86=E6=9E=90-=E7=AC=AC03=E8=8A=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + docs/.vuepress/config.js | 1 + .../images/project/gateway/2024-07-14-001.png | Bin 0 -> 86391 bytes docs/md/all/all.md | 1 + docs/md/other/guide-to-reading.md | 1 + .../gateway/demand/2024-07-14-chapter04.md | 56 ++++++++++++++++++ 6 files changed, 60 insertions(+) create mode 100644 docs/.vuepress/public/images/project/gateway/2024-07-14-001.png create mode 100644 docs/md/project/gateway/demand/2024-07-14-chapter04.md diff --git a/README.md b/README.md index 7ef7d058..5bff20ca 100644 --- a/README.md +++ b/README.md @@ -294,6 +294,7 @@ * [《高性能Polaris网关》需求设计-第01节:为何要学习高性能Polaris网关](https://t.zsxq.com/Hrnec) * [《高性能Polaris网关》需求设计-第02节:高性能Polaris网关的目标与挑战](https://t.zsxq.com/5kNlg) * [《高性能Polaris网关》需求设计-第03节:高性能Polaris网关需求与流程梳理](https://t.zsxq.com/W7xj6) +* [《高性能Polaris网关》需求设计-第04节:高性能Polaris网关技术流程梳理](https://articles.zsxq.com/id_ftp3p72whut2.html) ### 💥 分布式IM即时通讯系统 diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index faa8a51b..56ed9ea6 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -1573,6 +1573,7 @@ function getBarGateway(){ "demand/2024-06-02-chapter01.md", "demand/2024-06-23-chapter02.md", "demand/2024-06-30-chapter03.md", + "demand/2024-07-14-chapter04.md", ] } ] diff --git a/docs/.vuepress/public/images/project/gateway/2024-07-14-001.png b/docs/.vuepress/public/images/project/gateway/2024-07-14-001.png new file mode 100644 index 0000000000000000000000000000000000000000..08710f4d1d38019d4fd32ec275f8c93acf409061 GIT binary patch literal 86391 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

J0hsoA-@;Vcl*j}Nk7Jh#2 z(Xemi>jGw(25wA0FA9W_t9jPO92WBMf)UqnU?4K3D%&Ee-1trZGq>Hq%7kz8nH4G& zegQ&WQ>O{5+B&R*Zm!b@zok)1Bo0w%zphY(hS4SQFO=AxA03OR&*jUAN9I*|k7FJl zsM|I17Not+cp&WSY3|_+*Pg2Wc7E}-Vt~`0INk={%>@_Ke(~o_Y^k+`FIAe#=&C`_ zb$L0bdD5Vu3b-y~U+bX!8$IjCpwqpQ?k$dELy4JiFqB z^Zl8#m&=;;-<6ZN^{Psrj2~S!7OTuQjT(9Ra5(2;X{Vkxi?iERn)khw1RwQH}%AAeJxJ1r@QuZNz3$=ZdyQg`tgT*SMi9q zS3g?eN)(W%S}EOOx3p7D;8ROW=kqR|#fmK9>}lr=7>5ikBRH|DlRfq(9P(<$TrCITDD<$eT1T%pVyWslKdMP6??> z^IT>w@YoTwKdH1`E}hvD`!4HrD>i}SjaI10{R8_FoW|rXryps5@_1~A7RQqXZ?h*o z(TmkuAl>4C;zAXXJR>7#6c9_^sPfdg)u{L7IUCEentTjEGd+9=$6!XpjN*-((--gd zWZQvjqxf@VxL2hxmojr|D_40LqfV

URZeyij)@|B&9z957p7rVWRk@Hunfuk@J` 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星球:[http://m6z.cn/6aeFbs](http://m6z.cn/6aeFbs) +
博客:[https://binghe.gitcode.host](https://binghe.gitcode.host) +
文章汇总:[https://binghe.gitcode.host/md/all/all.html](https://binghe.gitcode.host/md/all/all.html) +
源码获取地址:[https://t.zsxq.com/0dhvFs5oR](https://t.zsxq.com/0dhvFs5oR) + +> 沉淀,成长,突破,帮助他人,成就自我。 + +* 本章难度:★★☆☆☆ +* 本章重点:从技术角度梳理高性能Polaris网关的流程,网关接收请求、限流、熔断、流控、鉴权、协议转换、转发请求等功能的技术梳理,对有无网关请求的流程进行简单的对比,使研发人员能够从技术角度理解高性能Polaris网关的整个技术流程与技术交互过程。 + +**大家好,我是冰河~~** + +在前面的文章中,我们对建设高性能Polaris网关过程中要实现的目标与存在的挑战有了大致的了解。并且大致梳理了分布式IM即时通讯系统的功能需求和业务流程,相信小伙伴们心中大概明确了要开发哪些功能。除此之外,作为技术人员,我们还要从技术的角度梳理下高性能Polaris网关的整体交互流程。 + +## 一、前言 + +运营或产品经理从实际场景和业务角度提出对应的业务需求后,作为架构师或者研发人员,不仅需要理解业务场景和业务需求,还需要将这些场景和业务需求转化成技术实现方案。从技术的角度出发,来梳理需要实现的逻辑与交互流程。如果你是一名基础框架或中间件的架构师或者研发人员,除了要深刻的理解领域场景外,还需要具备将这些领域场景进行高度抽象的能力,并且要关注你所做的基础框架或中间件的各种性能指标。 + +## 二、本节诉求 + +在正式设计和编码实现高性能Polaris网关之前,除了要理解网关的需求和交互流程外,作为技术人员,还有一项非常重要的事情,那就是从技术角度好好梳理下高性能Polaris网关的请求链路,交互逻辑和技术流程,以便更好的设计和高性能Polaris网关。 + +本章,就从技术的角度出发,对有无网关请求的流程进行简单的对比,并且梳理下高性能Polaris网关的请求交互链路、交互逻辑和技术流程。 + +## 三、有无网关流程对比 + +通过前面章节的学习,我们已经了解到API网关是一种用于管理、控制和保护API(应用程序编程接口)的中间层服务。它位于客户端和后端服务之间,充当了一个统一的入口点,处理所有进出系统的请求,实现对外部请求的协议转换、参数校验、鉴权、切量、熔断、限流、监控、风控等各种共性的通用服务。 + +另外,各大厂做网关,其实做的就是一套统一方案。将分布式微服务下的RPC到HTTP通信的同类共性的需求,凝练成通用的组件服务,减少在业务需求场景开发下,非业务需求的同类技术诉求的开发成本。 + +### 3.1 未引入API网关 + +如果在项目开发过程中,不引入API网关的话,最基本的做法就是在各个服务之上再开发一个对应的Web服务,这些Web服务可以是SprongMVC工程,也可以是SpringBoot工程,最终会通过SpringMVC或者SpringBoot工程对外提供HTTP接口供客户端调用,如图4-1所示。 + +

+ +
+
+ +可以看到,在未引入API网关之前,一般会在服务之上开发一套Web应用,由这个Web应用最终向客户端提供HTTP接口。并且会在这个Web应用内部实现限流、熔断、参数校验、鉴权、风控、切量、监控、路由转发等功能。 + +### 3.2 引入API网关 + +引入API网关后,流量的管理和转发就变得比较简单了,也不再需要对各个服务再开发一套Web应用进行维护。引入API网关的流程如图4-2所示。 + +## 查看完整文章 + +加入[冰河技术](https://public.zsxq.com/groups/48848484411888.html)知识星球,解锁完整技术文章、小册、视频与完整代码 \ No newline at end of file