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. h5 和native 交互那些事儿
  2. C# 将DataTable数据源转换成实体类
  3. ssms没有弹出服务器验证_Nginx服务器负载均衡及生成ssl密钥对、Nginx配置ssl操作示例...
  4. 数据库事务及锁机制介绍
  5. for vue 一行2列_JAVA基础练习试题(2)蓝桥杯 附源代码
  6. 你要「老婆」不要?谷歌程序员20行代码把二次元「老婆」带到现实世界
  7. Spark 部署及示例代码讲解
  8. java中的ackerman_java8的函数式接口
  9. 网页页面禁止用户复制源代码
  10. mysql端口隐藏_修改MySQL端口以及出现的问题
  11. 打开浏览器标签页并修改内容_解决因Bing导致Chrome打开标签页光标失焦的问题...
  12. k3c官改刷openwrt_斐讯K3刷OpenWrt(Lede)
  13. 人工智能助力复工复产,模版OCR轻松搞定健康码识别
  14. 电容器指南(一)-基本性能介绍
  15. 济南职工医保统筹的一些了解
  16. 电子病历系统源码 winform 医院电子病历系统源码
  17. 在Unity中实现GPS定位
  18. java用代码实现星期菜谱_基于JAVA的菜谱大全接口调用代码实例
  19. 里加一列为1_米饭里加把藜麦米,低脂饱腹不长胖,不用节食,照样甩赘肉
  20. 追逐梦想的65条励志语句

热门文章

  1. HDU 6034 - Balala Power! | 2017 Multi-University Training Contest 1
  2. mf模型 svd++_【MF】SVD
  3. 勒索病毒WannaCry(永恒之蓝)
  4. poj 2409 Let it Bead Polya计数
  5. 蓝牙天线的一点小资料
  6. PropertyGrid仿VS的属性事件窗口
  7. 判断是否为数组的 JavaScript 方法总结
  8. 电大计算机dm编写程序,渭南电大计算机应用基础网考答题过程介绍
  9. Apache Qpid:一个AMQP的开源实现
  10. TensorFlow Serving安装笔记(仅限64位x86)