API Gateway网关应用分析,使用Zuul搭建网关实战
2023-02-26 12:28:13 时间
接口API技术
- 接口是在面向服务架构(SOA)和微服务的背景下RPC远程调用产生的,目的是为了解耦
-
接口分类:
-
开放接口
(福利推荐:阿里云、腾讯云、华为云服务器最新限时优惠活动,云服务器1核2G仅88元/年、2核4G仅698元/3年,点击这里立即抢购>>>)
- 在外网进行访问
- 通过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定义转发规则 [email protected]
搭建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 [email protected]注解使actuator刷新生效
搭建Nginx+Zuul网关集群
- 如何实现集群: 保证每台服务数据一致,使用Nginx实现反向代理和负载均衡
-
Zuul搭建网关:
- 使用Nginx+Zuul
- 遵循一主一备或者轮询的原则
- 网关是多个
- 网关集群原理: 客户端发送请求,所有请求统一到Nginx上,在Nginx中实现反向代理和负载均衡,再使用轮询机制转发到网关上
1.在host中配置域名 2.在Nginx配置文件中配置上游服务器(upstream),默认实现负载均衡 3.在过滤器中调用网关接口
-
Nginx和Zuul区别:
- 微服务网关是针对整个微服务实现统一请求拦截,因此网关都采用相关语言(Java)开发
你还在原价购买阿里云、腾讯云、华为云、天翼云产品?那就亏大啦!现在申请成为四大品牌云厂商VIP用户,可以3折优惠价购买云服务器等云产品,并且可享四大云服务商产品终身VIP优惠价,还等什么?赶紧点击下面对应链接免费申请VIP客户吧:
相关文章
- iphone没有sim卡能用吗-升级ios15无sim卡怎么办
- MacDroid for mac(安卓设备文件传输助手) v1.6.1中文版
- 使用JQuery和bootstrap-select实现世界城市的三级联动(中英互译)
- AnyMP4 iOS Cleaner for mac(IOS文件清理工具)v1.0.16激活版
- 药物互助小程序的120个小时
- Android平台GB28181设备接入端如何实时更新经纬度实现国标平台侧电子地图位置标注
- Android 子线程 UI 操作真的不可以?
- 移动安全-安卓frida hook基础篇
- 微信开放Donut,我们的App也能像微信跑小程序了
- Android Activity Deeplink启动来源获取源码分析
- Android构建工具--AAPT2源码解析(一)
- Android模块化开发实践
- 手把手教你实现Android编译期注解
- 打通“任督二脉”:Android 应用安装优化实战
- Android系统Bitmap内存分配原理与优化
- Android客户端网络预连接优化机制探究
- Android内存泄露检测 LeakCanary2.0(Kotlin版)的实现原理
- 存量用户运营企业微信的“用户端小程序”优化方案
- 一文帮你搞懂 Android 文件描述符
- Android NativeCrash 捕获与解析