天天只会用Java写CRUD,出去面试让你设计API网关你会吗?

开发 前端
那今天来讲讲,API 网关是啥,到底能对我们起到什么作用呢?这个一般面试的时候也很可能会问到这个知识点的。

今天给大家分享一个 API 网关的知识,很多兄弟可能平时经常搞的都是一些 CRUD 的业务系统开发,从来没接触过 API 网关。

那今天来讲讲,API 网关是啥,到底能对我们起到什么作用呢?这个一般面试的时候也很可能会问到这个知识点的。

先来看看业务系统技术栈

平时咱们可能写系统的时候,往往就是基于 SpringBoot+Spring MVC+Spring+Mybatis 这套技术栈来开发业务代码,然后连接一个 MySQL 就行了。

你调用别的系统往往就是基于 Dubbo,注册中心可能是 Zookeeper 也可能是 Nacos。

就类似下面的这个图,对不对?

网关路由请求转发功能

好,那么现在给大家讲第一个痛点,那就是你们公司可能存在 n 多个业务系统,那琳琅满目的,可能有几十个系统。

此时对于前端/APP 端他们还能知道哪个请求发送给哪个系统吗,这真的是太麻烦了,对不对?所以说,此时一般会引入一个 API 网关。

你每个业务系统吧,在 API 网关里配置一下,自己要处理什么样的请求 url,然后 API 网关收到请求以后,根据请求 url 路径判断一下,就知道应该把请求转发给哪个业务系统了,完美,对不对?

看看下图吧:

网关统一授权和鉴权功能

下一个问题来了,你这个系统能允许别人谁来都随便调用你吗?你不得搞一个授权和鉴权的过程?你不得甄别甄别发送请求来的这个人是好人坏人?

你不得想想发送过来的这个请求到底应该不应该处理吗?所以这个时候这个鉴权的事情你自己搞吗?那太麻烦了吧,你也鉴权,别的系统自己也鉴权,那真的是麻烦大了。

所以这个时候,我们就直接在 API 网关里加入鉴权功能不就完了,一个请求过来是好人还是坏人,API 网关就帮你鉴权了,通过鉴权的请求才能往后端发送。

如下图:

API 网关层流控功能

再下一个痛点来了,那就是假设咱们系统一共就部署了几台机器,总共每秒几千请求了不得了,结果有一天运营搞了一个特别棒的活动,每秒来了几万流量和请求,一下子给你击垮了,你说你怎么办,你扛不住啊?

所以这个时候啊,还得在 API 网关层加入流控的功能,每个业务系统可以配置自己能抗的 QPS,他根据这个来限制每秒转发给你的请求不就完了。

如下图:

API 网关层灰度发布功能

然后呢,还有一个经常遇到的痛点,那就是咱们每次系统上线部署,如果一下子把新的版本部署到所有机器里去,就怕新版本上线就掉俩字,直接就崩溃,这可怎么办。

所以一般来说,可以引入一个灰度发布,这个灰度发布意思就是说,假设你系统部署了 3 台机器,每次上线先部署 1 台机器,然后线上的流量里划分 5% 给这个新部署的灰度版本机器,先观察一下咋样,要是没问题,再把后续两台机器给部署了,这就是灰度发布。

灰度发布也可以叫做金丝雀发布,这个金丝雀发布是啥意思呢,就是以前古代有盗版的人下墓的时候先把金丝雀扔进去看看,如果他不叫了,说明墓里有毒气,现在这个灰度发布也是一个意思,先把新版本部署到一台机器里去,观察一下,要是他崩了,就说明代码有问题。

所以此时就可以基于 API 网关来实现灰度发布了,每次部署了灰度版本以后,让 API 网关就划分 5% 的流量给这个灰度版本,一切正常了再全量部署。

如下图:

好了,到这里为止,就给大家把这个 API 网关的作用讲清楚了,大家平时不要老是埋头写 crud 代码啊,对 API 网关这些东西,也是要了解一下的,别啥都不知道。

责任编辑:姜华 来源: 今日头条
相关推荐

2022-04-13 07:51:49

API网关系统

2022-04-28 21:53:52

TypeScriptany类型

2020-05-14 08:59:28

API网关性能

2019-06-03 10:14:07

API网关微服务

2020-03-06 10:25:10

注解Java代码

2024-07-30 08:22:47

API前端网关

2011-09-30 13:37:35

51CTO博客一周热门薪酬

2024-07-10 11:40:15

2012-06-20 15:01:25

iOS开发

2023-02-27 10:45:16

2019-07-25 12:46:32

Java高并发编程语言

2020-06-04 14:15:55

Java中BigDecimal函数

2018-09-29 15:34:34

JavaList接口

2021-11-30 10:38:09

splitStringTokenJava

2022-02-17 08:57:18

内存设计进程

2021-09-15 16:05:41

map.putJavaMap

2021-03-17 11:16:58

while(1)for(;;)语言

2021-01-28 09:55:50

while(1)for(;;)Linux

2021-09-06 10:42:18

Linux命令服务器

2022-12-25 18:55:33

分布式系统MQ
点赞
收藏

51CTO技术栈公众号