首页 文章详情

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

WxJava | 93 2022-05-18 01:20 0 0 0
UniSMS (合一短信)

目录

  • 先来看看业务系统技术栈

  • 网关路由请求转发功能

  • 网关统一授权和鉴权功能

  • API 网关层流控功能

  • API 网关层灰度发布功能


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


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


先来看看业务系统技术栈


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


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


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

90fd4dc835f60cf945de60a004a49685.webp

网关路由请求转发功能


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


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


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


看看下图吧:

999a73fb7fdee501cbaa51a6c8d78978.webp

网关统一授权和鉴权功能


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


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


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


如下图:

2b80c6f1bb2e75be324fb38f41b6904f.webp

API 网关层流控功能


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


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


如下图:

c2a3decb738d2e3a44288d6e3b036960.webp

API 网关层灰度发布功能


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


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


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


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


如下图:

9fcf367da82fc8283fe4947d42e2bb66.webp

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


2f2d5bb6a88e53b13057138a14bdeace.webp

点个在看你最好看

50854d8267e4311dcbe4fce007451429.webp
good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter