点击上方“方志朋”,选择“置顶公众号”

技术文章第一时间送达!

在微服务架构的系列文章中,前面已经通过文章《架构设计之「服务注册 」》介绍过了服务注册的原理和应用,今天这篇文章我们来聊一聊「 API网关 」。

「 API网关 」是任何微服务架构的重要组成部分。有了它我们可以在一个独立的模块上方便的处理一些非业务逻辑,可以让微服务本身专注在自身特定的功能上,使得每个微服务的开发更容易和更快速。

后面还会有文章继续介绍 配置中心、服务框架、服务监控、服务追踪、服务治理等。还是那句话,只有将这些基础设施弄清楚了,微服务实践的道路才能走的稳、走的远。

一、为什么需要「 API网关 」?

为什么做微服务的需要「 API网关 」呢?「 API网关 」到底有些啥功能呢?我们以前项目结构比较简单的时候有用到过「 API网关 」概念的模块吗?

其实在我们的项目曾经还是单体应用的时候,虽然没有「 API网关 」的概念,但是一般在项目中都会用到filter/过滤器之类的东西,filter的作用就是把项目中的一些非业务逻辑的功能抽离出来独立处理,避免与业务逻辑混在一起增加代码复杂度。比如 鉴权认证功能、Session处理、安全检查、日志处理等等。

现在我们采用微服务架构了,在一个项目中微服务节点很多,如果让每一个节点都去处理上面这些 “鉴权认证功能、Session处理、安全检查、日志处理等” 会多出很多冗余的代码,也会给增加业务代码的复杂度,因此我们就需要有一个「 API网关 」把这些公共的功能独立出来成为一个服务来统一的处理这些事情。

我们看一下下面这个微服务架构示意图:

「 API网关 」就像是微服务的大门守卫一样,是连通外部客户端与内部微服务之间的一个桥梁。

其主要功能有:

  • 路由转发

    之前说了「API网关」是内部微服务的对外唯一入口,所以外面全部的请求都会先发到这个「API网关」上,然后由「API网关」来根据不同的请求去路由到不同的微服务节点上。例如可以 根据路径 来转发、也可以 根据参数 来转发。

    并且由于内部微服务实例也会随着业务调整不停的变更,增加或者删除节点,「API网关」可以与「服务注册」模块进行协同工作,保证将外部请求转发到最合适的微服务实例上面去。

  • 负载均衡

    既然「API网关」是内部微服务的单一入口,所以「API网关」在收到外部请求之后,还可以根据内部微服务每个实例的负荷情况进行动态的负载均衡调节。一旦内部的某个微服务实例负载很高,甚至是不能及时响应,则「API网关」就通过负载均衡策略减少或停止向这个实例转发请求。当所有的内部微服务实例都处理不过来的时候,「API网关」还可以采用限流或熔断的形式阻止外部请求,以保障整个系统的可用性。

  • 安全认证

    「API网关」就像是微服务的大门守卫,每一个请求进来之后,都必须先在「API网关」上进行身份验证,身份验证通过后才转发给后面的服务,转发的时候一般也会带上身份信息。

    同时「API网关」也需要对每一个请求进行安全性检查,例如参数的安全性、传输的安全性等等。

  • 日志记录

    既然所有的请求都需要走「API网关」,那么我们就可以在「API网关」上统一集中的记录下这些行为日志。这些日志既可以作为我们后续事件查询使用,也可以作为系统的性能监控使用。

  • 数据转换

    因为「API网关」对外是面向多种不同的客户端,不同的客户端所传输的数据类型可能是不一样的。因此「API网关」还需要具备数据转换的功能,将不同客户端传输进来的数据转换成同一种类型再转发给内部微服务上,这样,兼容了这些请求的多样性,保证了微服务的灵活性。

二、「 API网关 」原理与应用?

上面聊完了「为什么需要API网关」,我们再来看一下在实际项目中应该如何去应用。虽然我们可以自己去开发一套「API网关」,但是如果没有特殊需求,还是不建议重复造轮子了,市面上有很多成熟的方案可以直接使用,下面简单介绍一下 Zuul、Tyk、Kong三个比较热门的开源组件。

  • Zuul

    Zuul 是由 Netflix 所开源的组件,基于JAVA技术栈开发的。

    Zuul网关的使用热度非常高,并且也集成到了 Spring Cloud 全家桶中了,使用起来非常方便。

    上图可以看到Zuul的一个简化结构,过滤器filter是整个Zuul的核心,分为前置过滤器(pre filter)、路由过滤器(routing filter)、后置过滤器(post filter)以及 错误过滤器(error filter)。

    一个请求过来,会先执行所有的 pre filter,然后再通过 routing filter 将请求转发给后端服务,后端服务进行结果响应之后,再执行 post filter,最后再响应给客户端。在不同的filter里面可以执行不同的逻辑,比如安全检查、日志记录等等。

  • Tyk

    Tyk是一个基于GO编写的,轻量级、快速可伸缩的开源的API网关。

    可以通过下图简单了解一下Tyk的流程原理。

  • Kong

    Kong是基于OpenResty技术栈的开源网关服务,因此其也是基于Nginx实现的。

    Kong可以做到高性能、插件自定义、集群以及易于使用的Restful API管理。

以上,就是对微服务架构中「 服务网关」的一些思考。

码字不易啊,喜欢的话不妨转发朋友,或点击文章右下角的“在看”吧。????

-更多文章-

漫画:什么是 HTTPS 协议?

《复联 4》上映,来看看 GitHub 上这几个漫威项目!

彻底理解cookie,session,token

IDEA中用好Lombok,撸码效率至少提升5倍

Java 必须掌握的 20+ 种 Spring 常用注解

为什么一定要前后端分离?

-关注我-

感谢搓一下“在看

微服务架构之「 API网关 」相关推荐

  1. yii2 请求外部api_微服务架构之「 API网关 」

    作者:奎哥来自公众号:不止思考 在微服务架构的系列文章中,前面已经通过文章<架构设计之「服务注册 」>介绍过了服务注册的原理和应用,今天这篇文章我们来聊一聊「 API网关 」. 「 API ...

  2. 微服务架构之「 配置中心 」

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 在微服务架构的系列文章中,前面已经通过文章<微服务架构之「服务网关 」>介绍过了在微 ...

  3. spring.profiles.active配置了没生效_微服务架构之「 配置中心 」

    在微服务架构的系列文章中,前面已经通过文章<微服务架构之「服务网关 」>介绍过了在微服务中服务网关的原理和应用,今天这篇文章我们继续来聊一聊微服务中另外一个重要模块:「 配置中心 」.后面 ...

  4. 微服务架构之「 访问安全 」

    戳蓝字"CSDN云计算"关注我们哦! 作者 | 奎哥 来源 | 不止思考 应用程序的访问安全又是我们每一个研发团队都必须关注的重点问题.尤其是在我们采用了微服务架构之后,项目的复杂 ...

  5. 微服务架构之「 容器技术 」

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 现在一聊到容器技术,大家就默认是指 Docker 了.但事实上,在 Docker 出现之前,P ...

  6. 微服务架构之「 容错隔离 」

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 我们知道,在单体应用的架构下一旦程序发生了故障,那么整个应用可能就没法使用了,所以我们要把单体应 ...

  7. 微服务:简述微服务架构中的API网关

    微服务:简述微服务架构中的API网关 API网关是任何微服务架构的重要组成部分.有了它我们可以在一个独立的模块上方便的处理一些非业务逻辑,可以让微服务本身专注在自身特定的功能上,使得每个微服务的开发更 ...

  8. 微服务架构之「 下一代微服务 Service Mesh 」

    点击上方"朱小厮的博客",选择"设为星标" 做积极的人,而不是积极废人 Service Mesh 被大家称为下一代的微服务,是微服务领域的一颗新星,被大家讨论的 ...

  9. 微服务架构之「 服务注册 」

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 微服务架构是一个庞大复杂的工程,为什么说它庞大复杂呢?因为想要做好微服务,就必须先要建设好微服务所 ...

最新文章

  1. Java项目:网上水果蔬菜项目系统设计和实现(java+springboot+mysql+ssm)
  2. docker nginx 简单的代理设置
  3. 《用Python进行自然语言处理》第6章 学习分类文本
  4. php项目自动布署mysql_如何自动化一键部署PHP项目
  5. 如何暂停一个正在运行的线程?
  6. 2020中国硬科技创新白皮书
  7. linux yum被占用
  8. 关于物流项目面试可能会被问到的20题总结
  9. 如何快速将 Linux 系统制作成 ISO 镜像文件?
  10. Shell脚本之正则表达式详解
  11. 记忆宫殿--清华一日游
  12. warp-transducer,warprnnt_tensorflow
  13. 【java实现控制台打印表格】
  14. Google账户二次验证取消
  15. 自定义 Drawable实现灵动红鲤鱼特效
  16. java mediator_Java 实现中介者(Mediator)模式
  17. Prodigal-原核生物基因预测
  18. LaTeX 公式常用符号与常见问题解决
  19. Windows下的Socket编程——基本步骤
  20. 小公司的大企业病,一定要根治

热门文章

  1. LevelDb系列之简介
  2. 例4-1和例4-2和例4-3
  3. javascript——Array类型
  4. 【青少年编程】马雷越:商品价格竞猜
  5. 微软苹果服务器宕机,苹果服务器宕机,iPhone用户别做这两项操作,微软特斯拉也中招...
  6. linux run文件夹,Linux下运行run文件
  7. 装上后这 14 个插件后,PyCharm 真的是无敌的存在
  8. 百度飞桨全新升级:重磅推出PaddleHelix平台、开源框架V2.0RC,硬件生态路线图全公开...
  9. 未来2年,程序员如何吊打高学历工程师?服气!
  10. CSDN湘苗培优,遇见更好的自己