微服务API网关那些事

前言

微服务火了也有一段时间了,但是之前一直没有在项目中用过微服务。公司的项目从dubbo过渡到spring Cloud。结合这段时间的实际使用,打算系统地学习下spring Cloud微服务。微服务中涉及到的东西还是比较多的,系统的学习需要一步一步来,毕竟一口吃不成胖子嘛。这里先和大家一起学习一下微服务API网关。之前在上家公司有大佬培训(介绍)过这块,但是一直没有实际应用,后来渐渐都还回去了。。。

什么是API网关

API网关是一个服务,系统的唯一入口。它封装了系统内部架构的复杂性,为每个客户端提供一个定制的API。在微服务架构中,API 网关作为整体架构的重要组件,它抽象了微服务中都需要的公共功能,同时提供了客户端负载均衡,服务自动熔断,灰度发布,统一认证,限流流控,日志统计等丰富的功能,帮助我们解决很多API管理难题。API网关的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能

为什么需要API网关

在传统的单点系统中,系统的业务逻辑,登录权限,日志等功能都集成在一个点。单点系统中的服务耦合度很强,随着项目的业务拓展和需求迭代的增加,单点服务每一次小的功能迭代,都需要对整个系统进行一次升级部署。这样很明显就是牵一发而动全身。正是为了解决这个问题,微服务架构被提出了,我们按照不同的颗粒度对服务功能进行拆分,拆分之后的服务,可以作为单独的系统来对外提供服务。这些拆分之后的系统可以有自己的数据库,可以是不同的协议,甚至是不同的语言平台。这些服务通过restful风格的API接口来对外提供服务。前面也说到了,拆分之后的服务可以看着是一个完整的系统,一个完整的系统必然需要用户校验,权限控制,以及日志记录等通用功能。这样我们需要把这些功能在每个拆分之后的系统重复实现。后面对于这些通用功能的升级,每个系统都需要升级,这样显然是不合理的。对于这种问题的解决,想必大家都比较熟悉,对于通用功能的提取,我们完全可以采取类似切面编程的思路。将这些重复通用的功能提取到一个单独的地方,这个地方就是API网关。

下图就是微服务中,API接入的大致示意图

通过图中可以看到,API网关做为系统统一入口,实现了对各个微服务间的整合,同时又做到了对客户端友好,屏蔽系统的复杂性和差异性。客户端不需要去记得每个服务对应的地址。

API网关具有几个比较重要的优点:

  • 采用API网关可以与微服务注册中心连接,实现微服务无感知动态扩容。
  • API网关对于无法访问的服务,可以做到自动熔断,无需人工参与。
  • API网关可以方便的实现灰度部署。
  • API网关做为系统统一入口,我们可以将各个微服务公共功能放在API网关中实现,以尽可能减少各服务的职责。
  • 帮助我们实现客户端的负载均衡策略。

客户端侧负载均衡

上面提到了API网关可以实现客户端的负载均衡。客户端侧负载比较的特殊的地方是,后端服务器的地址列表不再由负载均衡服务器存储和维护,而是每个客户端都会存储在本地。后端服务器启动时自动向注册中心注册服务,服务下线时服务注册中心也能获知。客户端建立对服务注册中心的长监听,每当后端服务发生变化,注册中心自动通知客户端更新本地缓存的服务器列表。

目前主流的服务注册中心由Eureka、Zookeeper等。客户端侧负载的好处是方便,后端服务变化对客户端是透明的。但是相比服务端负载,客户端侧负载对后端服务有要求,不是所有的后端服务都能做客户端侧负载。目前流行的API Gateway有Spring Cloud Zuul,Zuul默认使用Ribbon实现客户端侧负载,利用服务注册中心可知道所有后端服务的地址和状态,通过负载均衡算法,尽可能均衡的转发请求到后台微服务。

服务熔断

在实际生产中,一些服务很有可能因为某些原因发生故障而不可用,比如服务内部错误、网络延迟等,如果放任故障服务不管,可能会因为级联故障导致雪崩效应,使得整个系统瘫痪。为此,我们需要对不可用服务的调用快速失败。Spring Cloud提供了Hystrix组件来实现这一点。当某服务在短时间内多次发生调用失败,服务消费方的断路器会被断开。开路的断路器就像电路跳闸一样,阻止消费方向故障服务发送请求,直接返回失败或者执行消费方的降级逻辑。断路器通常在一定时间后关闭,在这期间可以为底层服务提供足够的空间来恢复。

总结

上面简单介绍了API网关,以及为什么要使用API网关。后面介绍了API网关中能实现的客户端负载均衡和服务熔断。对于微服务还有很多东西需要学习,后面再和大家一起来深入学习。

参考文献链接

1.https://blog.csdn.net/crave_shy/article/details/81221738

2.https://www.cnblogs.com/java-zhao/p/6716059.html

3.https://cloud.tencent.com/developer/news/257354

4.http://www.360doc.com/content/17/1215/08/27972427_713220406.shtml

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱琴孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值