接口 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) 开发