Spring Cloud
2020-08-25 10:38:27 5 举报
AI智能生成
Spring Cloud
作者其他创作
大纲/内容
什么是Spring Cloud?
Spring Cloud 是一个治理服务平台,提供了大量的服务框架,如: 服务的注册和发现, 负载均衡,配置中心,监控数据,服务熔断,消息中心等
Spring Cloud 是一款框微服务框架, 相比较于Dubbo等rpc框架,spring Cloud 提供全套的分布式系统解决方案
Spring Cloud 是一个基于 Spring Boot 实现的云应用开发工具,它为开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。
互联网架构的演变
单体应用架构
垂直应用架构
SOA服务架构
微服务架构
Spring Cloud发展版本
第一代
Spring Cloud Netflix
第二代
Spring Cloud Alibaba
Eureka注册中心
什么是Eureka?
Eureka是一个基于Rest服务的服务治理组件,包括注册中心,服务的发现与服务注册
Eureka
服务提供者
Application Service(Service Provider)服务提供方,把自身的服务实例注册到 Eureka Server 中。
消费者
Application Client(Service Consumer)服务调用方,通过 Eureka Server 获取服务列表,消费服务
注册中心
Eureka Server通过Get,Renew等接口提供服务的注册和发现
自我保护模式
一般情况下,在Eureka注册过的服务,会每30秒发送一次心跳,Eureka会根据该心跳来判断是否健康,如果超过90秒未发送,会定期删除
好处
开启自我保护模式会大大提高服务之间的安全性,即使Eureka集群宕机失效,Provider和consumer都可以正常通信
微服务的负载均衡策略会自动剔除死亡的微服务节点
优雅停服
配置
# 度量指标监控与健康检查
management:
endpoints:
web:
exposure:
include: shutdown # 开启 shutdown 端点访问
endpoint:
shutdown:
enabled: true # 开启 shutdown 实现优雅停服
添加 security权限认证
# 安全认证
security:
user:
name: root
password: 123456
Ribbon负载均衡
什么是Ribbon?
Ribbon是一个基于HTTP/TCP的客户端负载均衡工具,也是基于Netflix Ribbon 实现的,它不像springcloud的配置中心,注册中心等独立部署,而是存在与springcloud的各个微服务中,且feign声明式服务调用也是基于ribbon实现的,ribbon还支持多种和负载均衡的策略算法,如轮询,随机,权重轮询,最小并发数等
负载均衡解决方案
集中式负载均衡
即在 consumer 和 provider 之间使用独立的负载均衡设施(可
以是硬件,如 F5,也可以是软件,如 nginx),由该设施负责把访问请求通过某种策略转发至
provider;
进程式负载均衡
将负载均衡逻辑集成到 consumer,consumer 从服务注册中
心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的 provider。Ribbon 属于后者,
它只是一个类库,集成于 consumer 进程,consumer 通过它来获取 provider 的地址。
Ribbon入门
Ribbon的负载均衡策略
轮询策略(默认)
随机策略
权重轮询策略
Ribbon点对点直连
跳过注册中心,直接访问服务者提供的服务,多用于测试
# 关闭 Eureka 实现 Ribbon 点对点直连
ribbon:
eureka:
enabled: false # false:关闭,true:开启
Consul注册中心
什么是Consul?
Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式
服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实
现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等),使
用起来也较为简单
Consul角色
client :客户端,无状态,将HTTP和DNS接口请求转发给局域网的服务端集群
server:服务端,保存配置信息,高可用集群,推荐3个或者5个
Consul工作流程
consumer先向Consul发送http请求获取到temptale(注册服务)根据temtable发送请求从produce获取到服务
当服务 Producer 启动时,会将自己的 Ip/host 等信息通过发送请求告知 Consul,Consul 接收到
Producer 的注册信息后,每隔 10s(默认)会向 Producer 发送一个健康检查的请求,检验 Producer 是
否健康。
使用
Feign声明式服务调用
什么是Feign?
Feign是Spring cloud Netflix组件中的一个轻量级Restful的客户端,实现了负载均衡和Rest调用,封装了RestTemplate和Ribbon,实现了WebService的面向接口编程,降低项目的耦合度
Feign解决了什么问题
简化了Ribbon和RestTemplate的开发,使编写Java HTTP客户端更加容易,也实现了Ribbon,使编写代码减少,使用Feign解决负载均衡是首选方案
Feign VS openFeign
openFeign是spring公司研发的,在 Feign 的基础上支持了 Spring MVC 的注解,如 @RequesMapping 、
@Pathvariable 等等。
OpenFeign 的 @FeignClient 可以解析 SpringMVC 的 @RequestMapping 注解下的接口,并通
过动态代理的方式产生实现类,实现类中做负载均衡并调用服务
Feign性能优化
Gzip压缩
gzip 是一种数据格式,采用 deflate 算法压缩数据;gzip 是一种流行的文件压缩算法,
应用十分广泛,尤其是在 Linux 平台。
可以将css,js等文件压缩,减少原先文件存储的百分之70大小,可节省大量资源
配置
局部
全局
Http连接池
为什么需要http连接池?
HTTP 连接需要的 3 次握手 4 次挥手开销很大,采用 HTTP 连接池,可以节约大量的 3 次握手 4 次挥手,这样能大大提升吞吐量。
请求超时
在平时访问中难免会出现请求时间过长,而Feign的负载均衡是由Ribbon实现,默认的超时时间是1秒,如果获取数据响应时间大于1秒后返回,这时服务器已经将超时错误响应出去,极不友好,这可设置超时时间
设置方式
全局
局部
Hystrix服务容错
什么是Hystrix?
Hystrix是解决服务雪崩的组件,在开发分布式难免会出现雪崩效应,Hystrix可通过添加等待时间容限和容错逻辑来帮助您控制这些分布式服务之间的交互,Hystrix可以隔离服务之间的访问点,停止服务之间的级联故障并提供后备选项来实现此目的,所有这些都可以提高系统的整体稳定性。
雪崩效应
当我们在开发分布式与微服务时,不可避免会出现多个服务依赖于一些服务,且依赖的服务出现失效或其他原因不可访问,使其他服务需要等待该服务,就会大量阻塞也不可用,使容器的线程资源会被消耗完毕,导致大量服务瘫痪,这就是雪崩效应
解决方案
请求缓存
通过使用redis将请求结果做缓存
请求合并
将相同的请求进行合并然后调用批处理接口
服务隔离
限制调用分布式服务的资源,某一个调用的服务出现问题不会影响其他服务调用
线程隔离
每个请求都有一个独立的线程,该线程出现问题其不影响其他线程的运行,访问超时可直接返回,资源开销较大
信号隔离
通过计数信号器来限制,当请求数大于计数信号器的限制时,开启限制,信号隔离只支持同步,因为每次调用的都是阻塞调用放的线程,直接返回结果,这就导致了无法访问时超时,资源开销小
服务熔断
类似电闸,当某个服务出现问题而影响到其他服务时,将有问题的服务停止,牺牲个别服务,保证其他服务的运行
服务降级
当服务器整体资源消耗净的时候,就会对不重要的服务进行服务降级(关闭服务),等待渡过难关,后在开启回来
Fegin雪崩处理
熔断降级
捕获服务异常
Hystrix监控中心
Actuator
监控中心
聚合监控中心
Sentinel服务哨兵
什么时Sentinel?
随着微服务的流行,服务与服务之间的稳定性变得越来越重要,Sentinel以流量为切入点,从流量控制,熔断降级,系统负载保护等多个维度保护服务的稳定性
Sentinel核心
核心库
不依赖任何框架/库,能够运行于 Java 7 及以上的版本的运行时环境,同
时对 Dubbo / Spring Cloud 等框架也有较好的支持(见 主流框架适配)
控制台
控制台主要负责管理推送规则、监控、集群限流分配管理、机器发现等。
Sentinel控制台
下载
https://github.com/alibaba/Sentinel/releases
启动命令
java -Dserver.port=8080-Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.7.1.jarpause
端口可自定义,不冲突就好
访问地址
http://localhost:8080/
客户端接入控制台
添加依赖
配置
访问
定义资源
定义规则
RestTemplate 支持
OpenFeign 支持
Zuul服务网关
什么是Zuul?
Zuul 是从设备和网站到应用程序后端的所有请求的前门。作为边缘服务应用程序,Zuul 旨在实现动
态路由,监视,弹性和安全性。Zuul 包含了对请求的路由和过滤两个最主要的功能
什么是服务网关?
企业应用防火墙,主要起到 隔离外部访问与内部系统的作用
网关解决什么问题?
网关具有身份认证与安全、审查与监控、动态路由、负载均衡、缓存、请求分片与管理、静态响应
处理等功能。当然最主要的职责还是与“外界联系”。
常用网关解决方案
Ngnix+Lua
Kong
SpringCloud Netfix Zuul
SpringCloud Gatewagy
Nginx实现API网关
配置路由规则
访问
Zuul实现API网关
搭建网关服务
配置路由规则
路由排除
网关过滤器
pre
请求被路由到其他服务之前执行的过滤器
routing
处理将请求发送到源服务器的过滤器
post
响应从源服务器返回执行的过滤器
error
上述阶段出现错误时执行该过滤器
Zuul生命周期
Zuul与Hystrix结合
网关服务监控
网关服务降级
网关服务限流
全局限流配置
局部限流配置
自定义限流配置
网关性能调优
Zuul与Sentinel整合
网关服务限流和降级
自定义限流处理
Gateway服务网关
什么是Gateway?
Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Netflix Zuul,其不仅提供
统一的路由方式,并且还基于 Filter 链的方式提供了网关基本的功能。目前最新版 Spring Cloud 中引用
的还是 Zuul 1.x 版本,而这个版本是基于过滤器的,是阻塞 IO,不支持长连接。
常用网关解决方案
Ngnix+Lua
Kong
SpringCloud Netfix Zuul
SpringCloud Gatewagy
入门案例
搭建网关服务
路由规则
动态路由
过滤器
网关过滤器
Path路径过滤器
RewritePathGatewayFilterFactory
PrefixPathGatewayFilterFactory
StripPrefixGatewayFilterFactory
SetPathGatewayFilterFactory
Parameter 参数过滤器
Status 状态过滤器
全局过滤器GlobalFiter
自定义过滤器
自定义网关过滤器
自定义全局过滤器
统一鉴权
网关限流
为什么需要限流?
在Web服务中,如果用户的访问量突然增大,达到服务的极限就容易将服务器冲垮,所以在关键的时候进行限流,有利用保证服务器的稳定性
限流算法
计数器算法
漏桶算法
令牌桶算法
Gateway限流
限流规则
URI限流
参数限流
IP限流
Sentinel限流
高可用网关(Nginx与网关集群实现高可用)
0 条评论
下一页