# springcloud学习 **Repository Path**: Mikeyuyu/spring-cloud-learning ## Basic Information - **Project Name**: springcloud学习 - **Description**: 学习springcloud的简单案例 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-08-29 - **Last Updated**: 2022-09-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # springcloud学习 #### 介绍 学习springcloud的简单案例 ``` springboot和springcloud版本冲突比较严重,我用的这俩 org.springframework.cloud spring-cloud-dependencies Hoxton.SR9 pom import org.springframework.boot artifactId>spring-boot-dependencies 2.3.2.RELEASE pom import ``` ### 1.什么是微服务 微服务是分布式架构的一种,分布式架构其实就是要把服务做一个拆分,而springcloud只是解决了拆分过程中的服务治理问题。微服务在拆分的时候,会根据业务功能模块把一个单体的应用拆分成许多个独立的项目,每个项目完成一部分的业务功能,然后独立开发和部署。这些独立的项目就成为一个微服务。进而构成一个服务集群。 ### 2.服务调用 微服务的特点是服务数量特别多,服务和服务之间也需要有交互,这就涉及到服务间的调用,即服务与服务之间如何通信。提到服务与服务之间的通信,最通用的莫过于HttpClient,在其它的通信架构中基本都使用HttpClient来作为底层的通讯模型。在SpringCloud中依然可以使用HttpClient进行服务与服务调用,只不过如果采用HttpClient调用的话,会有一些弊端,例如: 如果同一个服务有多个负载的话,采用HttpClient调用时,没有办法处理负载均衡的问题。还有另一个问题就是HttpClient只是提供了核心调用的方法并没有对调用进行封装,所以在使用上不太方便,需要自己对HttpClient进行简单的封装。 在SpringCloud提供了两种方式来解决服务与服务通信的问题,RestTemplate和Feign。虽然从名字上看这两种调用的方式不同,但在底层还是和HttpClient一样,采用Http的方式进行调用的。只不过是对HttpClient进行的封装。 ### 3.注册中心Eureka Spring-Cloud Euraka是Spring Cloud集合中一个组件,它是对Euraka的集成,用于服务注册和发现。Eureka是Netflix中的一个开源框架。它和 zookeeper、Consul一样,都是用于服务注册管理的。 ![image-20220830100745714](C:\Users\86185\AppData\Roaming\Typora\typora-user-images\image-20220830100745714.png) #### 3.1 自我保护机制 ![image-20220830153412256](C:\Users\86185\AppData\Roaming\Typora\typora-user-images\image-20220830153412256.png) #### 3.2 Eureka和zookeeper的区别 CAP即: - Consistency(一致性) - Availability(可用性) - Partition tolerance(分区容忍性) 这三个性质对应了分布式系统的三个指标: 而CAP理论说的就是:一个分布式系统,不可能同时做到这三点。 ①**一致性:**对于客户端的每次读操作,要么读到的是最新的数据,要么读取失败。换句话说,一致性是站在分布式系统的角度,对访问本系统的客户端的一种承诺:要么我给您返回一个错误,要么我给你返回绝对一致的最新数据,不难看出,其强调的是数据正确。 ②**可用性:**任何客户端的请求都能得到响应数据,不会出现响应错误。换句话说,可用性是站在分布式系统的角度,对访问本系统的客户的另一种承诺:我一定会给您返回数据,不会给你返回错误,但不保证数据最新,强调的是不出错。 ③**分区容忍性:**由于分布式系统通过网络进行通信,网络是不可靠的。当任意数量的消息丢失或延迟到达时,系统仍会继续提供服务,不会挂掉。换句话说,分区容忍性是站在分布式系统的角度,对访问本系统的客户端的再一种承诺:我会一直运行,不管我的内部出现何种数据同步问题,强调的是不挂掉。 ### 4.Ribbon ribbon是一个负载均衡工具 ### 5.Feign Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。 Feign集成了Ribbon、RestTemplate实现了负载均衡的执行Http调用,只不过对原有的方式(Ribbon+RestTemplate)进行了封装,开发者不必手动使用RestTemplate调服务,而是定义一个接口,在这个接口中标注一个注解即可完成服务调用,这样更加符合面向接口编程的宗旨,简化了开发。 ### 6.Hystrix 服务降级 服务熔断 ### 7.Zuul 配置统一路由过滤 ### 8.springcloud config springcloud config为微服务架构中的微服务提供集中化的外部支持,配置服务器为各个不同的微服务应用的所有环节提供了一个中心化的外部配置。 分为服务端和客户端两部分。