微服务网关实践

一. 为什么需要 网关

  微服务下网关(API Gateway)是一个服务器,是系统的唯一入口,是统一管理API的一个网络关口、通道,是整个微服务平台所有请求的唯一入口,所有的客户端和消费端都通过统一的网关接入微服务。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。

  API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常,网关也是提供REST/HTTP的访问API。服务端通过API-GW注册和管理服务。


 

 

二. API网关的作用

        微服务网关可以为微服务云平台提供统一的入口是API网关最主要的用途,除此之外,网关还可承担认证授权、监控、访问控制、路由、负载均衡、缓存、日志、多协议支持、限流限额、转换、映射、过滤、熔断、注册、服务编排、API管理、统计分析等等非业务性的功能。

  一个好的API网关,是微服务体系中一个至关重要的基础设施。下面介绍几个API网关的核心功能 。

   1) 负载均衡

    微服务架构一般都有一个注册中心,后端服务启动时候会将自己的服务地址注册到注册中心,并和注册中心保持心跳,网关用过监听注册中心来进行服务的发现,并根据一定的负载均衡算法(随机、轮询、权重、hash等)将客户端的请求尽量均衡地转发到后端的各个服务中。

   2)限流

    限流的主要目的是防止类似DDos的恶意攻击导致服务器短时间内收到大量请求而造成的服务瘫痪。因此需要在接口层面做流量的控制,API网关统计一个时间窗口内针对某服务的请求数量,如果超过一定的阈值,则应拒绝继续转发请求到后端服务。时间窗口是滑动窗口,下一个时间窗口到来时,计数器清零。可以使用Redis的单线程模型和高性能的并发性来保证高并发下计数器计数准确。

  3)身份认证鉴权

    单体应用中,一般用户登录后,服务端会将用户信息存入session中,然后返回给用户(客户端)一个cookie作为登录后调用其他业务接口的凭证。而在微服务架构下,服务被拆分成多个实例,单体应用中的模式就很难试用,于是需要把鉴权的业务从各服务中抽离出来,单独建立一个权限认证服务,利用API网关入口作为切面拦截。网关拦截用户请求,获取请求中附带的用户身份信息,调用认证授权中心的服务,对请求者做身份认证,即确认当前访问者确实是其所声称的身份,检查该用户是否有访问该后台服务的权限。

   4)灰度发布

    灰度发布是服务发布时比较好的一种升级方式,它可以根据客户端的实际情况(版本、IP端等)进行请求分流,将一小部分测试者的请求切到新版本服务上,万一有问题也能及时定位修复,且不影响线上老版本的使用。

  5)路由

       网关的核心功能之一是路由转发,所以网关需要获取并维护一张路由表,这个路由表简单可以理解为一个服务名服务地址的映射表,有了这张路由表,网关就可以根据外界请求路径或者HTTP头中的服务信息,将请求转发到对应的后端目标微服务地址。 

    

 

三. 常见5种微服务开源API网关组件介绍和对比

  1)  Kong

     Kong是一个在 Nginx 中运行的Lua应用程序,并且可以通过lua-nginx-module模块实现的高性能网关API,Kong不是用这个模块编译Nginx,而是与 OpenResty 一起发布,OpenResty已经包含了 lua-nginx-module, OpenResty 不是 Nginx 的分支,而是一组扩展其功能的模块。

       它的核心是实现数据库抽象,路由和插件管理,插件可以存在于单独的代码库中,并且可以在几行代码中注入到请求生命周期的任何位置。

     Kong 官网:https://konghq.com/kong/

       Kong 有三个主要组件:

    1、Kong Server :基于nginx的服务器,用来接收 API 请求。

    2、Apache Cassandra:用来存储操作数据。

    3、Kong dashboard:官方推荐UI管理工具,也可以使用 restfull 方式 管理Admin api。


  2)  Zuul

    Zuul 是一种提供动态路由、监视、弹性、安全性等功能的边缘服务。Zuul 是 Netflix 出品的一个基于 JVM 路由和服务端的负载均衡器。它的特点是可动态发布的过滤器机制, 包含了对请求的路由过滤两个最主要的功能。

    Zuul github地址:https://github.com/Netflix/zuul 

      Netflix架构体系和Zuul

    

 

 

    Zuul网关高级应用场景

    1. 红绿部署 

                 

 

    2.  埋点测试

       

 

    3.  开发者测试分支

    

   4.  金丝雀测试

     

 

   5.  粘性金丝雀

     

 

    6.  降级测试

     

   3)Spring Cloud Gateway

    Spring Cloud Gateway构建于 Spring 5+,基于 Spring Boot 2.x 响应式的、非阻塞式的 API。同时,它支持 websockets,和 Spring 框架紧密集成。

 

posted @ 2021-01-06 16:42  songguojun  阅读(439)  评论(0编辑  收藏  举报