【Java进阶营】微服务架构之「 API网关 」
一、为什么需要「 API网关 」?
为什么做微服务的需要「 API网关 」呢?「 API网关 」到底有些啥功能呢?我们以前项目结构比较简单的时候有用到过「 API网关 」概念的模块吗? 其实在我们的项目曾经还是单体应用的时候,虽然没有「 API网关 」的概念,但是一般在项目中都会用到filter/过滤器之类的东西,filter的作用就是把项目中的一些非业务逻辑的功能抽离出来独立处理,避免与业务逻辑混在一起增加代码复杂度。比如 鉴权认证功能、Session处理、安全检查、日志处理等等。 现在我们采用微服务架构了,在一个项目中微服务节点很多,如果让每一个节点都去处理上面这些 “鉴权认证功能、Session处理、安全检查、日志处理等” 会多出很多冗余的代码,也会给增加业务代码的复杂度,因此我们就需要有一个「 API网关 」把这些公共的功能独立出来成为一个服务来统一的处理这些事情。 我们看一下下面这个微服务架构示意图:
「 API网关 」就像是微服务的大门守卫一样,是连通外部客户端与内部微服务之间的一个桥梁。 其主要功能有:
负载均衡
安全认证
日志记录
既然所有的请求都需要走「API网关」,那么我们就可以在「API网关」上统一集中的记录下这些行为日志。这些日志既可以作为我们后续事件查询使用,也可以作为系统的性能监控使用。
数据转换
二、「 API网关 」原理与应用?
上面聊完了「为什么需要API网关」,我们再来看一下在实际项目中应该如何去应用。虽然我们可以自己去开发一套「API网关」,但是如果没有特殊需求,还是不建议重复造轮子了,市面上有很多成熟的方案可以直接使用,下面简单介绍一下 Zuul、Tyk、Kong三个比较热门的开源组件。 Zuul
Zuul 是由 Netflix 所开源的组件,基于JAVA技术栈开发的。 Zuul网关的使用热度非常高,并且也集成到了 Spring Cloud 全家桶中了,使用起来非常方便。
Tyk是一个基于GO编写的,轻量级、快速可伸缩的开源的API网关。 可以通过下图简单了解一下Tyk的流程原理。
Kong
技术栈的开源网关服务,因此其也是基于Nginx实现的。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多 Kong可以做到高性能、插件自定义、集群以及易于使用的Restful API管理。