zoukankan      html  css  js  c++  java
  • 微服务网关实践

    一. 为什么需要 网关

      微服务下网关(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 框架紧密集成。

  • 相关阅读:
    【Python】Visual Studio Code 安装&&使用 hello python~~~~
    linux系统644、755、777权限详解
    python对象销毁(垃圾回收)
    linux .bashrc文件修改和生效
    Python学习笔记(20)-文件和文件夹的移动、复制、删除、重命名
    HDU 4635 Strongly connected(强连通)经典
    推荐一款免费的SQLsever的备份软件sqlBackupAndFtp
    Objective-C基础笔记(6)Block
    iOS开发UI篇—懒载入
    关于Adapter对数据库的查询、删除操作
  • 原文地址:https://www.cnblogs.com/songgj/p/14241972.html
Copyright © 2011-2022 走看看