API Gateway网关应用分析,使用Zuul搭建网关实战

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 本文介绍了微服务项目中的RPC远程调用中使用的RESTful风格的API接口,分析的API Gateway网关的作用,包括拦截请求,负载均衡,权限控制,接口监控相关功能。同时使用一个API Gateway网关示例Zuul的完整的搭建过程,通过对网关搭建,实现网关的过滤,路由转发和网关机群相关功能,更加深入的了解了网关的功能和使用。

接口API技术

  • 接口是在面向服务架构(SOA)和微服务的背景下RPC远程调用产生的,目的是为了解耦
  • 接口分类:

    • 开放接口

      • 在外网进行访问
      • 通过appid+appsecret, 生成accessToken进行通讯
      • 目的是为了授权接口权限,OAuth2.0协议
    • 内部接口

      • 一般只能在局域网中进行访问
      • 服务与服务之间的调用关系都在同一个微服务系统中
      • 目的是为了保证安全

如何设计一套API接口

  • 接口权限: 开放接口,内部接口
  • 接口幂等性
  • 接口安全性
  • 为了防止篡改数据,要验证签名
  • 使用网关拦截接口,实现黑名单和白名单
  • 接口使用RESTful风格:http协议+json格式,目的是为了跨平台
  • 考虑到高并发的情况,对接口服务实现保护功能:服务降级,服务熔断,服务保护
  • 最后使用统一的API管理平台:api swagger

网关(API Gateway)

  • 客户端请求先统一请求到网关服务器上,再由网关服务器进行转发到实际的服务地址
  • 网关作用:

    • 拦截请求
    • 权限控制
    • 负载均衡
    • 日志管理
    • 监控接口
  • 网关与过滤器的区别:

    • 网关是拦截整个微服务的请求
    • 过滤器是对单个Tomcat服务器进行拦截请求
  • 网关分为内网网关外网网关
  • Zuul和Nginx的异同:

    • 相同点:

      • Zuul和Nginx都可以实现负载均衡,反向代理,过滤请求,实现网关效果
    • 不同点:

      • 开发语言不同: Zuul采用Java语言写的,Nginx采用C语言写的
      • 负载均衡实现不同: Zuul中采用Ribbon+Eureka实现客户端负载均衡,Nginx实现的服务器端负载均衡
    • Nginx比Zuul功能更强大,因为Nginx整合了脚本语言(Nginx+Lua),更适合服务器端负载均衡
    • Zuul更适合Java语言微服务中的网关的实现
    • 可以使用Nginx+Zuul作为网关实现:Nginx用于实现反向代理(隐藏服务真实IP地址),Zuul对微服务的实现网关拦截请求

搭建Zuul网关

1.引入Zuul依赖spring-cloud-starter-netflix-zuul
2.配置文件:
eureka.client.serviceUrl.defaultZoo=http://localhost:8100/eureka    #服务注册url地址
server.port=80        # 网关端口号
spring.application.name=service-zuul        # 网关名称
zuul.routes.api-a.path=/api-ticket/**        #当客户端发送请求127.0.0.1:80/api-ticket/开头的,都会被发送到app-ticket服务中
zuul.routes.api-a.serviceId=app-ticket        # ticket服务别名,zuul整合ribbon默认自动实现负载均衡效果
zuul.routes.app-b.path=/api-user/**            # 当客户端发送请求127.0.0.1/api-user/开头的,都会被发送到app-user服务中    
zuul.routes.app-b.serviceId=app-user        # app-b定义转发规则
3.在类上标注@EnableZuulProxy注解开启网关代理

搭建ZuulFilter过滤器

1.创建过滤器类继承ZuulFilter
2.获取上下文
3.获取Request对象
4.从请求头中获取token
5.创建过滤器执行逻辑
6.实现ZuulFilter中的方法:
                过滤类型:filterType()  pre-表示在请求之前执行.
                过滤器执行顺序:filterOrder()  当一个请求在同一阶段存在多个过滤器的时候,规定多个过滤器的执行顺序
                判断过滤器是否生效:shouldFilter()

搭建动态Zuul网关路由转发

  • 传统方式将路由规则配置在配置文件中,如果路由地址发生了改变,需要重启服务器
  • 在微服务中应该将路由规则配置在SpringCloud Config分布式配置中心,实现动态路由规则.
  • 配置SpringCloud Config分布式配置中心的实时刷新

    1.引入actuator依赖spring-boot-starter-actuator
    2.在配置文件中开启监控端点
    management.endpoints.web.exposure.include="*"        # 开启所有端点
    3.启动运行configClient
    4.在需要刷新的controller类中的bean当标注@RefreshScope注解使actuator刷新生效

搭建Nginx+Zuul网关集群

  • 如何实现集群: 保证每台服务数据一致,使用Nginx实现反向代理和负载均衡
  • Zuul搭建网关:

    • 使用Nginx+Zuul
    • 遵循一主一备或者轮询的原则
    • 网关是多个
  • 网关集群原理: 客户端发送请求,所有请求统一到Nginx上,在Nginx中实现反向代理和负载均衡,再使用轮询机制转发到网关上
1.在host中配置域名
2.在Nginx配置文件中配置上游服务器(upstream),默认实现负载均衡
3.在过滤器中调用网关接口
  • Nginx和Zuul区别:

    • 微服务网关是针对整个微服务实现统一请求拦截,因此网关都采用相关语言(Java)开发
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
2月前
|
人工智能 监控 负载均衡
一文详述:AI 网关与 API 网关到底有什么区别?
近年来,AI发展迅猛,大模型成为推动业务创新的关键力量。企业面临如何安全管理和部署AI应用的挑战,需设计既能满足当前需求又可适应未来发展的基础架构。AI网关应运而生,在集成、管理和优化AI应用中扮演重要角色。本文探讨AI网关与API网关的区别,分析AI系统为何需要专门网关,并提供选择合适AI网关的建议。AI网关不仅支持多种模型,还具备高级安全性和性能优化功能,有助于企业在复杂环境中灵活应用AI技术。
92 1
|
20天前
|
JSON BI API
商城上货API接口的实战案例
在商城上货过程中,API接口扮演着至关重要的角色。以下是对商城上货API接口的实战分析,涵盖其主要功能、类型、安全性以及实战案例等方面。
|
17天前
|
XML 数据可视化 API
商品详情数据实战案例,API接口系列
淘宝商品详情数据在电商领域具有广泛的应用价值,而淘宝商品详情API接口则为开发者提供了获取这些数据的重要途径。通过合理利用这些接口和数据,可以提升业务效率、优化用户体验,为电商行业的发展注入新的活力。
|
21天前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
37 1
|
27天前
|
存储 JSON API
淘宝API接口实战:高效获取商品标题、分类及店铺名称
在淘宝API接口实战中,通过以下步骤高效获取商品标题、分类及店铺名称:1. 准备工作:了解淘宝开放平台文档,注册开发者账号,选择开发语言和工具。2. 获取API访问权限:申请相应权限,提供应用场景说明。3. 调用API接口:构建HTTP请求,提供必要参数。4. 解析响应数据:提取JSON数据中的所需信息。5. 数据处理和存储:进一步处理并存储数据。6. 注意事项:遵守使用规范,注意调用频率和数据安全。示例代码使用Python调用淘宝API。
|
2月前
|
前端开发 API
Context API 实战应用
【10月更文挑战第8天】在 React 应用开发中,状态管理至关重要。本文介绍了 `Context API` 的基础概念、基本用法,以及常见问题和易错点的解决方法。通过代码示例,详细讲解了如何在组件间高效共享状态,优化性能,处理嵌套 Context 和副作用。
22 1
|
2月前
|
关系型数据库 MySQL 应用服务中间件
502 Bad Gateway错误分析与解决方案
502 Bad Gateway错误通常发生在客户端与服务器通信时,表示网关或代理未能从上游服务器获取有效响应。本文分析了该错误的可能原因,包括LNMP安装包问题、加速器配置错误、PHP-CGI进程不足等,并提供了详细的解决方案,如手动安装PHP、调整配置参数、清理磁盘空间等。针对Nginx,还介绍了关键参数调整方法和实施步骤。通过这些方法,可有效解决502错误,提高服务器稳定性。注意备份数据并谨慎操作。
|
3月前
|
Rust API Go
API 网关 OpenID Connect 实战:单点登录(SSO)如此简单
单点登录(SSO)可解决用户在多系统间频繁登录的问题,OIDC 因其标准化、简单易用及安全性等优势成为实现 SSO 的优选方案,本文通过具体步骤示例对 Higress 中开源的 OIDC Wasm 插件进行了介绍,帮助用户零代码实现 SSO 单点登录。
|
3月前
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
119 5
|
2月前
|
移动开发 前端开发 JavaScript
前端开发实战:利用Web Speech API之speechSynthesis实现文字转语音功能
前端开发实战:利用Web Speech API之speechSynthesis实现文字转语音功能
187 0