天天写CRUD的你,到了该给系统接入API网关的时候了!

12,989

目录

  • 先来看看业务系统技术栈
  • 网关路由请求转发功能
  • 网关统一授权和鉴权功能
  • API网关层流控功能
  • API网关层灰度发布功能

今天给大家分享一个API网关的知识,很多兄弟可能平时经常搞的都是一些CRUD的业务系统开发,从来没接触过API网关,那今天来讲讲,API网关是啥,到底能对我们起到什么作用呢?这个一般面试的时候也很可能会问到这个知识点的。

先来看看业务系统技术栈

平时咱们可能写系统的时候,往往就是基于spring boot+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网关这些东西,也是要了解一下的,别啥都不知道。