API网关的作用

我们知道,在一个微服务系统中,整个系统被划分为许多小模块,客户端想要调用服务,可能需要维护很多ip+port信息,管理十分复杂。API网关作为整个系统的统一入口,所有请求由网关接收并路由转发给内部的微服务。对于客户端而言,系统相当于一个黑箱,客户端不需要关心其内部结构。

随着业务的发展,服务端可能需要对微服务进行重新划分等操作,由于网关将客户端和具体服务隔离,因此可以在尽量不改动客户端的情况下进行。网关可以完成权限验证、限流、安全、监控、缓存、服务路由、协议转换、服务编排、灰度发布等功能剥离出来,讲这些非业务功能统一解决、统一机制处理。

Zuul原理简介

随行付微服务API网关基于Netflix的Zuul实现。Netflix是实践微服务最成功的公司之一,他们创建并开源了一系列微服务相关的框架,Zuul便是用来实现网关功能的框架。Zuul的整体架构图如下:

Zuul基于Servlet开发,ZuulServlet是整个框架的入口。Zuul的核心组件是Filter,Filter分为四类,分别是pre、route、post、error。pre-filter用来实现前置逻辑,route-filter用来实现对目标服务的调用逻辑,post-filter用来实现收尾逻辑,error-filter则在任意位置发生异常时做异常处理(此处应该注意,如果pre或route发生异常,执行error后,仍然会执行post),其示意图如下:

在Filter中可以定义某些条件下是否执行过滤器逻辑,以及同种类Filter的优先级。Filter的各个方法中并不存在入参,其参数传递是通过一个基于ThreadLocal实现的RequestContext,虽然RequestContext中定义了很多参数的读写方法,但初始的可用参数仅有req和res,对应HttpSerlvetRequest和HttpServletResponse。Filter代码范例如下:

Filter通常使用groovy编写,以便于动态加载。当我们编写好一个Filter类后,将其放在指定的磁盘路径下,FilterFileManager会启动一个守护线程去定期读取并加载。通过动态加载,我们可以在不停机的情况下添加、修改功能模块。FilterFileManager源码摘要如下:

SpringCloud-Zuul

Spring Cloud通过集成Zuul来实现API网关模块,我们来简单介绍一下它的整合原理。

SpringCloud-Zuul的核心配置类是ZuulServerAutoConfiguration以及ZuulProxyAutoConfiguration。Spring首先使用ZuulController来封装ZuulServlet,然后定义一个ZuulHandlerMapping,使得除一些特殊请求以外(如/error)的大部分请求被转发到ZuulController进行处理。源码摘要如下:

SpringCloud默认定义了一些Filter来实现网关逻辑,其中最核心的Filter——RibbonRoutingFilter是负责实际转发操作的,在它的过滤逻辑里又集成了hystrix、ribbon等其他重要框架。源码摘要如下:

加载Filter的方式通过ZuulFilterInitializer扩展为可以从ApplicationContext中获取。源码摘要:

Zuul2

随着业务的不断发展,Zuul对于Netflix来说性能已经不太够用,于是Netflix又开发了Zuul2。Zuul2最大的变革是基于Netty实现了框架的异步化,从而提升其性能。根据官方的数据,Zuul2的性能比Zuul1约有20%的提升。Zuul2架构图如下:

由于框架改为了异步的模式,Zuul2在提升性能的同时,也带来了调试、运维的困难。在实际的使用当中,对于绝大多数公司来说,并发量远远没有Netflix那样庞大,选择开发调试更简单、且性能够用的Zuul1是更合适的选择。

zuul 网关的用途_微服务之基于Zuul自研服务网关相关推荐

  1. 网关转发其他微服务后头信息拿不到_微服务之基于Zuul自研服务网关

    API网关的作用 我们知道,在一个微服务系统中,整个系统被划分为许多小模块,客户端想要调用服务,可能需要维护很多ip+port信息,管理十分复杂.API网关作为整个系统的统一入口,所有请求由网关接收并 ...

  2. 用samba服务构建基于企业级的文件共享服务

    用samba服务可轻松构建基于企业级的文件共享服务,配置起来比windows的NTFS+共享权限更简单,更容易,而且samba可以直接通过内核和用户交互数据,访问效率更高. ------------- ...

  3. netty 工控网关_开源软件分享-基于.NET的工控网关和组态软件

    最近逛github发现一款不错的组态软件,其包括了工控网关和组态界面.其中他的工控网关已支持(Modbus TCP/RTU. OPC DA. Siemens S300/200/1200/1500. P ...

  4. 微众银行的金融级消息服务平台建设实践和思考

    来自:阿里巴巴中间件 导读: 近年来,随着微服务架构的流行,分布式消息引擎在物联网.分布式事务.实时计算和大规模缓存同步等场景中的应用日益增多.本文将分享微众银行基于RocketMQ构建消息服务平台的 ...

  5. 基于阿里云容器服务的微服务实践 - Part 1. 微服务与Docker

    基于阿里云容器服务的微服务实践 基于阿里云容器服务的微服务实践 - Part 1. 微服务与Docker 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blo ...

  6. 基于 Apache APISIX 的服务网格方案

    服务网格(Service Mesh)是处理服务间通信的基础设施层.它负责构成现代云原生应用程序的复杂服务拓扑来可靠地交付请求.通常会为每个服务实例提供一个"边车"(sidecar) ...

  7. [享学Eureka] 一、源生Eureka介绍 --- 基于注册中心的服务发现

    凡事皆有代价,一切皆是取舍. 本专栏所有文章均计划逐步重写搬迁至本人公号:Java方向盘,且免费开放!故不再建议下单购买,可关注我公号前往免费学习.交流 –> 返回Netflix OSS套件专栏 ...

  8. 自研服务治理框架----文章汇总

    2019独角兽企业重金招聘Python工程师标准>>> 自研服务治理框架----获取本机IP地址 自研服务治理框架----服务注册 自研服务治理框架----服务地址发现 自研服务治理 ...

  9. 微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关

    微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关 1. 微服务简介 1.1 服务架构演变 1.2 SpringCloud ...

最新文章

  1. UVA1601万圣节的早上
  2. 医院信息化建设历程(5)互联互通的数字化医院阶段
  3. 【机器学习】LR的分布式(并行化)实现
  4. 子列表只是原列表的一个视图
  5. linux中MySQL密码的恢复方法
  6. SQL Server外键中的DELETE CASCADE和UPDATE CASCADE
  7. 5G 时代,AIoT 该如何布局?
  8. 木其工作室(专业程序代写服务)[转]学写块设备驱动(三)----踢开IO调度器,自己处理bio(下)...
  9. 重载类型转换操作符(overload conversion operator)
  10. 框架的配置文件的映射机制
  11. rem 前端字体_移动端前端开发不可不知的——rem
  12. 建文高考成绩查询2021,2021届新高考语文强化模拟卷(三).pdf
  13. Bigben vlc sdl 播放视频可随窗口改变大小
  14. Android Zebra斑马打印机 打印面单不清楚 解决方法
  15. mysql 电商实战_SQL电商数据分析实战
  16. 织梦教程:自定义模型会员无法投稿的解决方法
  17. Arthas开源一周年,Github Star 160K,我们一直在坚持什么?
  18. 液晶面板里面有些什么配件_液晶面板的组成部分有哪些?
  19. 小米手环深圳通服务器维护,小米手环3 NFC版上手:手机刷公交卡的日子一去不复返了...
  20. Using Hierarchy Viewer

热门文章

  1. F7-Nginx虚拟主机Server
  2. 云存储是否能拯救数据泛滥
  3. linux源代码剖析之三fs
  4. 顺势而为,戴尔加速流动文件系统进化
  5. ios block常见的错误(二)——循环引用
  6. 13凯越门锁继电器在哪里_汽车中控保险丝在哪里_汽车一年保险费_保险频道
  7. linux 脚本 列表,shell -脚本 给出多个数据列表 执行任务
  8. Android分贝开发
  9. Spring知识点总结-3
  10. 多台云服务器中Redis的主从复制