SpringCloud
2019-12-17 10:10:37 61 举报
AI智能生成
SpringCloud是一套完整的微服务解决方案,它基于SpringBoot框架,集成了众多的子项目,如配置中心、服务注册与发现、负载均衡、断路器、监控等。SpringCloud提供了一种简单的方式来开发和部署分布式系统,使得开发者可以专注于业务逻辑的开发,而无需关注底层的技术细节。通过使用SpringCloud,我们可以快速构建出高可用、可扩展的微服务应用,提高系统的响应速度和稳定性。同时,SpringCloud还具有良好的兼容性和灵活性,可以与各种流行的技术栈无缝集成,满足不同场景的需求。总之,SpringCloud是微服务开发的最佳选择,它将引领未来软件开发的新潮流。
作者其他创作
大纲/内容
概念及核心介绍
微服务的演变和传统架构的区别
Spring Cloud核心特性
分布式/版本化配置
服务注册和发现
(consul、eureka)
(consul、eureka)
路由
服务和服务之间的调用(Feign)
负载均衡
(Ribbon)
(Ribbon)
断路器
(Hystrix)
(Hystrix)
分布式消息传递
基础知识
Spring Boot
微服务网关:Spring Cloud Gateway
概念
Spring Cloud Gateway 作为 Spring Cloud 生态系中的网关,其目标是替代 Netflix Zuul,它不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全、监控/埋点和限流等。Spring Cloud Gateway 依赖 Spring Boot 和 Spring WebFlux,基于 Netty 运行。它不能在传统的 servlet 容器中工作,也不能构建成 war 包。
核心
Route
Route 是网关的基础元素,由 ID、目标 URI、断言、过滤器组成。当请求到达网关时,由 Gateway Handler Mapping 通过断言进行路由匹配(Mapping),当断言为真时,匹配到路由。
Predicate
Predicate 是 Java 8 中提供的一个函数。输入类型是 Spring Framework ServerWebExchange。它允许开发人员匹配来自 HTTP 的请求,例如请求头或者请求参数。简单来说它就是匹配条件。
Filter
filter 是 Gateway 中的过滤器,可以在请求发出前后进行一些业务上的处理。
Conslu 核心
主要功能有服务发现、健康检查、KV存储、安全服务沟通和多数据中心
service模式
Server 节点保存数据;Server 节点有一个 Leader 节点和多个 Follower 节点,Leader 节点会将数据同步到 Follower 节点,在 Leader 节点挂掉的时候会启动选举机制产生一个新的 Leader
SERVER表示consul的server模式,表明这个consul是个server,这种模式下,功能和CLIENT都一样,唯一不同的是,它会把所有的信息持久化的本地,这样遇到故障,信息是可以被保留的。
client模式
Client 节点负责健康检查及转发数据请求到 Server;Client 节点很轻量且无状态,它以 RPC (RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议)的方式向 Server 节点做读写请求的转发,此外也可以直接向 Server 节点发送读写请求
CLIENT表示consul的client模式,就是客户端模式。是consul节点的一种模式,这种模式下,所有注册到当前节点的服务会被转发到SERVER,本身是不持久化这些信息
Watch模式
S-A启动时通过服务注册和服务发现工具获取到所有的健康实例S-B,并且将这些信息放入自己的内存中,S-A 可以通过监听(Watch)注册工具来更新存入内存中的 S-B 的服务信息。比如 S-B-1 挂了,健康检查机制就会将其标为不可用,这样的信息变动就被 S-A 监听到了,S-A 就更新自己内存中 S-B-1 的服务信息
作用
网关的作用:在使用微服务的过程中,随着服务数量的增加,会发现大量的ip和端口难以管理,此时网关结合注册中心就很好的解决了这个问题,对外只暴露网关的ip地址和端口,大大的提高了服务的安全性,当业务向某个应用发送请求时,只需请求网关,网关通过你携带的服务名进行请求转发,在转发前可以对请求的安全性进行校验,满足系统安全要求的请求才会被转发,否则拦截。当然不仅仅是安全性,还有其他一些操作,可以根据需求添加
工作原理
客户端负载均衡:Spring Cloud Ribbon
简介
Spring cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它是基于Netflix的Riboon实现的。Ribbon是客户端负载均衡器,这有别语例如Nginx服务端负载均衡器。Ribbon本身提供了不同负载均衡策略使用不同的应用场景。
客户端负载均衡和服务端负载均衡的区别
客户端负载均衡和服务端负载均衡最大的不同在于服务清单所在的位置。客户端负载均衡中,客户端中都维护着自己要访问的服务段清单,而这些清单都来源于服务注册中心,但是服务端负载均衡的服务清单是无法自己来维护的
BaseLoadBalancer
BaseLoadBalancer类是Ribbon服务均衡器的基础实现类,在该类中定义了很多关于负载均衡器光宇的基础内容。
服务容错保护:Spring Cloud Hystrix
Hystrix特性
请求熔断
当Hystrix Command请求后端服务失败数量超过一定比例(默认50%), 断路器会切换到开路状态(Open). 这时所有请求会直接失败而不会发送到后端服务. 断路器保持在开路状态一段时间后(默认5秒), 自动切换到半开路状态(HALF-OPEN). 这时会判断下一次请求的返回情况, 如果请求成功, 断路器切回闭路状态(CLOSED), 否则重新切换到开路状态(OPEN). Hystrix的断路器就像我们家庭电路中的保险丝, 一旦后端服务不可用, 断路器会直接切断请求链, 避免发送大量无效请求影响系统吞吐量, 并且断路器有自我检测并恢复的能力.
服务降级
Fallback相当于是降级操作. 对于查询操作, 我们可以实现一个fallback方法, 当请求后端服务出现异常的时候, 可以使用fallback方法返回的值. fallback方法的返回值一般是设置的默认值或者来自缓存.告知后面的请求服务不可用了,不要再来了。
依赖隔离
在Hystrix中, 主要通过线程池来实现资源隔离. 通常在使用的时候我们会根据调用的远程服务划分出多个线程池.比如说,一个服务调用另外两个服务,你如果调用两个服务都用一个线程池,那么如果一个服务卡在哪里,资源没被释放,后面的请求又来了,导致后面的请求都卡在哪里等待,导致你依赖的A服务把你卡在那里,耗尽了资源,也导致了你另外一个B服务也不可用了。这时如果依赖隔离,某一个服务调用A B两个服务,如果这时我有100个线程可用,我给A服务分配50个,给B服务分配50个,这样就算A服务挂了,我的B服务依然可以用。
请求缓存
比如一个请求过来请求我userId=1的数据,你后面的请求也过来请求同样的数据,这时我不会继续走原来的那条请求链路了,而是把第一次请求缓存过了,把第一次的请求结果返回给后面的请求。
请求合并
我依赖于某一个服务,我要调用N次,比如说查数据库的时候,我发了N条请求发了N条SQL然后拿到一堆结果,这时候我们可以把多个请求合并成一个请求,发送一个查询多条数据的SQL的请求,这样我们只需查询一次数据库,提升了效率。
Hystrixl流程图
微服务构建:Spring Boot
Spring Cloud是基于Spring Boot搭建的
Spring Cloud官方手册,了解更多的特性
注册中心:Consul
使用注册中心前,要明白其作用和概念
服务发现组件
Eureka
Consule
ZooKeeper
Etcd
使用docker搭建Consul
拉取镜像:docker pull consul
启动镜像:docker run --restart=always -d -p 8500:8500/tcp -p 8500:8500/udp -p 8600 --name=consul -e CONSUL_BIND_INTERFACE=eth0 consul
访问:http://ip:8500
统一配置中心:zookeeper/spring cloud config
ZKUI
zkui为用户提供可视化界面,方便导入导出配置;使用docker安装zkui比较方便(1)docker pull maauso/zkui(2)docker run -t -i -e ZKLIST='10.2.11.202:2181' -p 9090:9090 maauso/zkui
zookeeper应用场景
配置
现在我们大多数应用都是采用的是分布式开发的应用,搭建到不同的服务器上,我们的配置文件,同一个应用程序的配置文件一样,还有就是多个程序存在相同的配置。当我们配置文件中有个配置属性需要改变,我们需要改变每个程序的配置属性,这样会很麻烦的去修改配置。而现在可以使用SpringCloud提供的配置中心(spring cloud config),或者使用zookeeper来实现配置中心。此处使用的是zookeeper配置功能而没有使用spring cloud config
队列
分布式锁
选主
大容量存储
................
说明
spring cloud config的用法和zookeeper类似,因为本人项目中用的是zookeeoer,所以此处不再赘述config,理解其作用和概念即可
服务间调用:Spring Cloud Feign
概念
在使用微服务时,避免不了的就是各个微服务间的调用,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端。我们可以使用JDK原生的URLConnection、Apache的Http Client、Netty的异步HTTP Client,Spring的RestTemplate。但是,用起来最方便的还是要属Feign了。
简介
Feign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用Feign, 我们可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。
关键类参数介绍
使用@FeignClient用于通知Feign组件对该接口进行代理(不需要编写接口实现),使用者可直接通过@Autowired注入
Spring Cloud应用在启动时,Feign会扫描标有@FeignClient注解的接口,生成代理,并注册到Spring容器中。生成代理时Feign会为每个接口方法创建一个RequetTemplate对象,该对象封装了HTTP请求需要的全部信息,请求参数名、请求方法等信息都是在这个过程中确定的,Feign的模板化就体现在这里。
0 条评论
下一页