Zuul网关生产部署实践

Zuul Production Deployment in Practice

Posted by     "杨波" on Thursday, July 12, 2018

TOC

介绍

Zuul是Netflix开源的微服务网关,在Netflix经过大规模生产验证,在业界很多公司有落地案例。

本文介绍Zuul网关的一些生产部署实践。

Zuul参考部署架构

zuul reference deployment architecture

上图是一个可供参考的Zuul部署架构,总体可以简化为一个三层架构:

第一层、负载均衡LB

Zuul网关本身无状态,以集群方式部署,它的前端需要负载均衡LB支持。在AWS云中,经常使用ELB作为负载均衡器,这个也是Netflix的做法。一般企业如果自建数据中心,则经常采用Nginx作为反向代理对Zuul网关进行负载均衡,Nginx是7层负载均衡器,本身也需集群部署,一般前端还需要4层负载均衡,例如使用软件LVS或者硬件F5等。

第二层、Zuul网关层

网关无状态以集群方式部署,一个集群规模小的有几台Zuul实例,大的可以有几十甚至上百个Zuul实例。

Zuul网关一般根据业务场景以分集群方式部署,例如上图中:

  1. 无线网关集群,接入无线应用的API调用流量,例如对应域名api.mobile.xxx.com,Nginx会把对该域名的访问转发到无线网关集群。
  2. H5网关集群,接入H5应用的API调用流量,例如对应域名api.h5.xxx.com,Nginx会把对该域名的访问转发到H5网关集群。
  3. 开放平台网关集群,接入第三方应用的API调用流量,例如对应域名api.open.xxx.com,Nginx会把对该域名的访问转发到开放平台网关集群。

另外,企业还可根据需要增加联盟商网关集群,要求严格安全的PCI兼容网关集群等,分别针对不同的业务接入需求。

第三层、内部微服务

这个是企业内部微服务的统称,既可以是前端聚合服务,也可以是后台基础服务。关于网关如何发现和路由到内部微服务,请参考我上一篇文章《微服务架构~Zuul网关路由管理实践》。

另外,Zuul网关支持动态过滤器脚本(Groovy)上传机制,可以灵活更改网关逻辑。过滤器脚本建议集中管理,需要开发一套过滤器集中管理站点,统一管理针对不同网关集群的过滤器。

filter management

上图是一个可以参考的过滤器管理界面,支持过滤器的上传/灰度/上下线等动作,管理员通过该界面可以集中管理针对无线网关/H5网关/第三方网关的过滤器。

各网关集群会定期到过滤器管理中心拉取对应的最新的过滤器。

Zuul生产级部署实践

zuul in production

如上节所述,Zuul网关本身的部署并不复杂,但是要生产级地(production ready)使用Zuul网关,周边仍需众多的配套服务进行支持,其中很多服务是和运维Ops治理监控相关,如上图所示,这些支持服务主要包括:

  1. 授权认证中心:对某些安全敏感的API进行Token校验,校验通过才能放行。
  2. 配置中心:例如使用Apollo,能够动态修改网关上的配置(连接数、超时熔断阀值等),并且一键修改实时生效。
  3. Hystrix Dashboard和Turbine:Zuul网关一般集成Hystrix熔断组件,Hystrix能够实时吐出性能Metrics,Turbine能够对Hystrix Metrics Stream按集群进行聚合,并展示在Hystrix Dashboard上。Turbine如何发现网关集群的实例?一种方案是在Turbine上静态配置ip,这种方案简单但是不太灵活。另外一种方案是使用Eureka自注册自发现,网关启动时自动注册到Eureka上,Turbine再从Eureka自动发现网关实例地址,这种方案比较灵活,网关扩缩容Turbine能自动感知。
  4. BotBlocker防爬虫系统:所有API调用流量经过网关门口,可以采集所有访问日志,通过后台BotBlocker防爬虫防攻击系统分析爬虫和攻击等恶意行为,计算出恶意用户或者ip,再反馈给网关系统block对应的恶意用户或ip。
  5. 调用链监控系统:例如集成CAT,让网关成为调用链发起的入口,并且和后台的服务调用链(后台服务、缓存,数据库等)打通,这样可以比较直观的查看端到端的微服务调用性能状况。
  6. ELK日志系统:采集访问日志和错误日志,供后续进一步分析。
  7. Metrics监控系统,例如采用KairosDB等时间序列数据库,可以在调用链的基础上做更细粒度的Metrics监控,例如Zuul网关本身也提供丰富的Metrics。
  8. 告警系统:例如集成ZMon,通过主动check的方式,时刻检查网关的健康状况,如有异常立刻报警。

hystrix dashboard

网关是API流量入口,是对微服务系统健康状况的集中和最佳观测点。上图是一个通过Hystrix Dashboard对网关集群进行实时监控的案例,展示每个通过网关的API的实时流量(10秒窗口)情况,可看成功/失败/超时,性能和集群等的流量情况。如果发生熔断,则Hystrix Dashboard上对应的API会直接飙红,提示报警干预。

结论

  1. Zuul网关一般针对不同的应用场景(无线/H5/开放平台等)分集群部署,前端依赖LB做负载均衡。建议部署集中式的过滤器管理站点,对不同网关集群的过滤器进行集中管理,这样可灵活调整网关的运行时逻辑。
  2. 对于生产级(production ready)的网关部署,周边需要很多配套的支持服务,这些服务大多和运维Ops相关,例如配置,监控和告警等。
  3. 网关是API流量入口,是对微服务系统健康状况的集中和最佳观测点。
  4. 波波在极客时间的课程《微服务架构和实践160讲》,马上上线第三模块《微服务网关Zuul架构和实践》,会对Zuul网关的架构、源码和生产实践等内容进行深度剖析,欢迎关注。

comments powered by Disqus