zuul 网关的用途_微服务之基于Zuul自研服务网关
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自研服务网关相关推荐
- 网关转发其他微服务后头信息拿不到_微服务之基于Zuul自研服务网关
API网关的作用 我们知道,在一个微服务系统中,整个系统被划分为许多小模块,客户端想要调用服务,可能需要维护很多ip+port信息,管理十分复杂.API网关作为整个系统的统一入口,所有请求由网关接收并 ...
- 用samba服务构建基于企业级的文件共享服务
用samba服务可轻松构建基于企业级的文件共享服务,配置起来比windows的NTFS+共享权限更简单,更容易,而且samba可以直接通过内核和用户交互数据,访问效率更高. ------------- ...
- netty 工控网关_开源软件分享-基于.NET的工控网关和组态软件
最近逛github发现一款不错的组态软件,其包括了工控网关和组态界面.其中他的工控网关已支持(Modbus TCP/RTU. OPC DA. Siemens S300/200/1200/1500. P ...
- 微众银行的金融级消息服务平台建设实践和思考
来自:阿里巴巴中间件 导读: 近年来,随着微服务架构的流行,分布式消息引擎在物联网.分布式事务.实时计算和大规模缓存同步等场景中的应用日益增多.本文将分享微众银行基于RocketMQ构建消息服务平台的 ...
- 基于阿里云容器服务的微服务实践 - Part 1. 微服务与Docker
基于阿里云容器服务的微服务实践 基于阿里云容器服务的微服务实践 - Part 1. 微服务与Docker 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blo ...
- 基于 Apache APISIX 的服务网格方案
服务网格(Service Mesh)是处理服务间通信的基础设施层.它负责构成现代云原生应用程序的复杂服务拓扑来可靠地交付请求.通常会为每个服务实例提供一个"边车"(sidecar) ...
- [享学Eureka] 一、源生Eureka介绍 --- 基于注册中心的服务发现
凡事皆有代价,一切皆是取舍. 本专栏所有文章均计划逐步重写搬迁至本人公号:Java方向盘,且免费开放!故不再建议下单购买,可关注我公号前往免费学习.交流 –> 返回Netflix OSS套件专栏 ...
- 自研服务治理框架----文章汇总
2019独角兽企业重金招聘Python工程师标准>>> 自研服务治理框架----获取本机IP地址 自研服务治理框架----服务注册 自研服务治理框架----服务地址发现 自研服务治理 ...
- 微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关
微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关 1. 微服务简介 1.1 服务架构演变 1.2 SpringCloud ...
最新文章
- UVA1601万圣节的早上
- 医院信息化建设历程(5)互联互通的数字化医院阶段
- 【机器学习】LR的分布式(并行化)实现
- 子列表只是原列表的一个视图
- linux中MySQL密码的恢复方法
- SQL Server外键中的DELETE CASCADE和UPDATE CASCADE
- 5G 时代,AIoT 该如何布局?
- 木其工作室(专业程序代写服务)[转]学写块设备驱动(三)----踢开IO调度器,自己处理bio(下)...
- 重载类型转换操作符(overload conversion operator)
- 框架的配置文件的映射机制
- rem 前端字体_移动端前端开发不可不知的——rem
- 建文高考成绩查询2021,2021届新高考语文强化模拟卷(三).pdf
- Bigben vlc sdl 播放视频可随窗口改变大小
- Android Zebra斑马打印机 打印面单不清楚 解决方法
- mysql 电商实战_SQL电商数据分析实战
- 织梦教程:自定义模型会员无法投稿的解决方法
- Arthas开源一周年,Github Star 160K,我们一直在坚持什么?
- 液晶面板里面有些什么配件_液晶面板的组成部分有哪些?
- 小米手环深圳通服务器维护,小米手环3 NFC版上手:手机刷公交卡的日子一去不复返了...
- Using Hierarchy Viewer