微服务架构的API网关有哪些功能
本篇内容主要讲解“微服务架构的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 全家桶中了,使用起来非常方便。
Tyk是一个基于GO编写的,轻量级、快速可伸缩的开源的API网关。
可以通过下图简单了解一下Tyk的流程原理。
Kong是基于OpenResty技术栈的开源网关服务,因此其也是基于Nginx实现的。
Kong可以做到高性能、插件自定义、集群以及易于使用的Restful API管理。
到此,相信大家对“微服务架构的API网关有哪些功能”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
本文名称:微服务架构的API网关有哪些功能
标题路径:http://myzitong.com/article/ieggje.html