专栏首页Linyb极客之路微服务网关基础组件 - zuul入门

微服务网关基础组件 - zuul入门

一、zuul简介

1、作用

zuul使用一系列的filter实现以下功能

  • 认证和安全 - 对每一个resource进行身份认证
  • 追踪和监控 - 实时观察后端微服务的TPS、响应时间,失败数量等准确的信息
  • 日志 - 记录所有请求的访问日志数据,可以为日志分析和查询提供统一支持
  • 动态路由 - 动态的将request路由到后端的服务上去
  • 压力测试 - 逐渐的增加访问集群的压力,来测试集群的性能
  • 限流 - allocating capacity for each type of request and dropping requests that go over the limit
  • 静态响应 - 直接在网关返回一些响应,而不是通过内部的服务返回响应

2、组件:

  • zuul-core:library which contains the core functionality of compiling and executing Filters
  • zuul-netflix:library which adds other NetflixOSS components to Zuul - using Ribbon for routing requests, for example.

3、例子:

  • zuul-simple-webapp:webapp which shows a simple example of how to build an application with zuul-core
  • zuul-netflix-webapp:webapp which packages zuul-core and zuul-netflix together into an easy to use package

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

二、zuul filter

1、关键元素

  • Type:most often defines the stage during the routing flow when the Filter will be applied (although it can be any custom string)
    • 值可以是:pre、route、post、error、custom
  • Execution Order: filter执行的顺序(applied within the Type, defines the order of execution across multiple Filters)
  • Criteria:filter执行的条件(the conditions required in order for the Filter to be executed)
  • Action: filter执行的动作(the action to be executed if the Criteria is met)

注意点:

  • filters之间不会直接进行通讯交流,他们通过一个RequestContext共享一个state
    • 该RequestContext对于每一个request都是唯一的
  • filter当前使用groovy来写的,也可以使用java
  • The source code for each Filter is written to a specified set of directories on the Zuul server that are periodically polled for changes
  • zuul可以动态的read, compile, and run these Filters
    • 被更新后的filter会被从disk读取到内存,并动态编译到正在运行的server中,之后可以用于其后的每一个请求(Updated filters are read from disk, dynamically compiled into the running server, and are invoked by Zuul for each subsequent request)

2、filter type(与一个典型的request的生命周期相关的filter type)

  • PRE Filters
    • request authentication
    • choosing origin servers(选机器)
    • logging debug info.
    • 限流
    • 执行时机: before routing to the origin.
    • 这类filter可能做的事
  • ROUTING Filters
    • 这类filter可能做的事:真正的向service的一台server(这台server是pre filter选出来的)发请求,handle routing the request to an origin,This is where the origin HTTP request is built and sent using Apache HttpClient or Netflix Ribbon.
  • POST Filters
    • adding standard HTTP headers to the response
    • gathering statistics and metrics
    • streaming the response from the origin to the client
    • 执行时机:after the request has been routed to the origin
    • 这类filter可能做的事
  • ERROR Filters
    • 执行时机:其他三个阶段任一阶段发生错误时执行(when an error occurs during one of the other phases)
  • CUSTOM Filters
    • 沿着默认的filter流,zuul允许我们创建一些自定义的Filter type,并且准确的执行他们。
    • 例如:我们自定义一个STATIC type的filter,用于从zuul直接产生响应,而不是从后边的services(we have a custom STATIC type that generates a response within Zuul instead of forwarding the request to an origin)

三、zuul request lifecycle(filter流)

说明:对应(二)的filter type来看

四、zuul核心架构

本文分享自微信公众号 - Linyb极客之路(gh_c420b2cf6b47)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-06-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Rocketmq之No route info of this topic解决思路

    用过rocketmq的人,采用客户端调用的时候,可能会相对高频的出现的 No route info of this topic这个异常问题,然后你可能会拿着这个...

    lyb-geek
  • @Scheduled注解各参数详解

    该参数接收一个cron表达式,cron表达式是一个字符串,字符串以5或6个空格隔开,分开共6或7个域,每一个域代表一个含义。

    lyb-geek
  • 如何优雅地玩转分库分表

    在谈论数据库架构和数据库优化的时候,我们经常会听到“分库分表”、“分片”、“Sharding”…这样的关键词。让人感到高兴的是,这些朋友所服务的公司业务量正在(...

    lyb-geek
  • 聊聊flink的logback配置

    flink-release-1.7.1/flink-dist/src/main/flink-bin/bin/flink-daemon.sh

    codecraft
  • 聊聊flink的logback配置

    flink-release-1.7.1/flink-dist/src/main/flink-bin/bin/flink-daemon.sh

    codecraft
  • Prometheus 500 Internal Privoxy Error 异常解决

    笨兔儿
  • C++核心准则R.3: 原始指针(T*)不应拥有所有权

    There is nothing (in the C++ standard or in most code) to say otherwise and most...

    面向对象思考
  • HDU 4745 Two Rabbits(区间DP,最长非连续回文子串)

    Two Rabbits Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535...

    ShenduCC
  • 论数据分析、数据挖掘、数据统计、OLAP 之间的差异是什么?谁的观点你最赞同?

    Han Hsiao 观点: 简单说:数据挖掘就是从海量数据中找到隐藏的规则,数据分析一般要分析的目标比较明确,数据统计则是单纯的使用样本来推断总体。 主要区...

    小莹莹
  • SAP CRM 产品主数据搜索的Max hit参数设置和硬编码

    The product search max hit value in WebClient UI could be configured in SPRO:

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券