今天给大家分享一个 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 网关这些东西,也是要了解一下的,别啥都不知道。