SpringCloud总结(一)

SpringCloud学习总结(一)

一、简介

SpringCloud是Spring旗下的一个项目,是一系列框架的有序集合;Spring最擅长的就是集成,把世界上最好的框架集成到自己的项目中,SpringCloud也是一样,他将现在非常流行的一些技术整合到了一起,实现了诸如:配置管理、服务发现、负载均衡、熔断器等功能;协调分布式环境中各个系统,为各类服务提供模板性配置。

其主要涉及的组件包括:

  • Eureka 注册中心
  • Gateway 网关
  • Ribbon 负载均衡
  • Feign 服务调用
  • Hystrix 熔断器
  • Config 配置中心

架构图:
在这里插入图片描述
SpringCloud的版本以伦敦地铁站的名字来命名。

二、Eureka注册中心

Eureka服务注册中心,负责管理记录服务提供者的信息,提供服务注册和发现功能

原理图:
在这里插入图片描述

  • EurekaServer 服务注册中心,对外暴露自己的地址
  • 服务提供者 启动后向服务注册中心注册自己的信息(地址,提供的服务)
  • 服务消费者 向服务注册中心订阅服务,Eureka会将对应服务的所有提供者的地址列表发送给消费者,并且定期更新
  • 心跳(续约) 提供者定期通过http方式向Eureka刷新自己的状态

搭建EurekaServer工程
添加依赖

<dependencies>
 	<dependency>
  		<groupId>org.springframework.cloud</groupId>
  		 <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>

编写启动类

//声明当前应用时Eureka服务
@EnableEurekaServer
@SpringBootApplication
@EnableDiscoveryClient //开启Eureka客户端发现功能
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

编写配置文件

server:
  port: ${port:10086}
spring:
  application:
    name: eureka-server
eureka:
  client:
    service-url:
      # eureka 服务地址,如果是集群的话;需要指定其它集群eureka地址
      defaultZone: http://127.0.0.1:10086/eureka
    # 不注册自己
    register-with-eureka: false
    # 不拉取服务
    fetch-registry: false
  server:
    # 服务失效剔除时间间隔,默认60秒
    eviction-interval-timer-in-ms: 60000
    # 关闭自我保护模式(默认是打开的)
    enable-self-preservation: false

服务注册:
就是在服务工程里添加Eureka的客户端依赖,客户端代码会自动把服务注册到Eureka中

添加依赖:

<dependencies>
 	<dependency>
  		<groupId>org.springframework.cloud</groupId>
  		 <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>

修改启动类,在启动类上加@EnableDiscoveryClient注解,开启客户端发现功能

修改配置文件

eureka:
	client:
		service-url: 
			defaultZone: http://localhost:10086/eureka

服务发现
添加依赖:

<dependencies>
 	<dependency>
  		<groupId>org.springframework.cloud</groupId>
  		 <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>

修改启动类
添加@EnableDiscoveryClient注解

编写配置文件

spring:
  application:
    name: consumer-demo
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka

配置高可用的Eureka
Eureka可以是一个集群,形成高可用的注册中心
多个EurekaServer服务之间互相注册,当服务提供者注册服务到某一个节点时,该节点会把信息同步到每一个节点,从而实现数据同步,因此,无论客户端访问到的是集群中任意一个节点,都可以获取到完整的服务列表信息。
在这里插入图片描述

三、负载均衡Ribbon

Ribbon是netflix发布的负载均衡器,根据服务名到Eureka服务中获取服务地址列表,再根据或利用Ribbon负载均衡算法从地址列表中获取一个服务地址并访问

负载均衡算法:
  • 轮询(默认)
  • 随机
开启负载均衡

因为eureka中已经集成了Ribbon,所以无需导入新的依赖

在实例化RestTemplate的方法加@LoadBalanced注解
在这里插入图片描述

四、熔断器Hystrix
简介

Hystrix在英语中是豪猪的意思,它在微服务系统中是一款提供保护机制的组件,由netflix公司开发。
是一个开源的延迟和容错库,用于隔离访问远程服务、第三方库,防止出现级联失败

雪崩问题

由于某一个服务出现问题,导致线程阻塞,从而影响到其他正常的服务

Hystrix解决雪崩问题的方式

  • 线程隔离
  • 服务熔断
解读
  • Hystrix会为每个依赖服务分配一个小的线程池,如果线程池已满调用将会立即拒绝,默认不采用排队,加速失败判断时间
  • 用户的请求不再直接访问服务,而是通过线程池中空闲的线程来访问,如果线程池已满或请求超时,会进行服务降级
  • 服务降级:优先保证核心服务,而非核心服务不可用或弱可用
  • 服务降级虽然会导致请求失败,但是不会导致阻塞,而且最多会影响当前依赖服务对应的线程池的资源,对其他服务没有影响
引入依赖
<dependencies>
 	<dependency>
  		<groupId>org.springframework.cloud</groupId>
  		 <artifactId>spring-cloud-starter-netflix-eureka-hystrix</artifactId>
    </dependency>
</dependencies>

开启熔断

启动类上添加@EnableCircuitBeaker注解

可以使用组合注解@SpringCloudApplication代替
@SpringBootApplication、@EnableDiscoveryClient和@EnableCircuitBeaker

服务熔断原理

熔断状态机模型
在这里插入图片描述
三个状态:

  • 关闭 此时所有请求都可以正常访问
  • 半开 会释放部分请求正常访问,如果成功,则关闭熔断器,否则打开熔断器
  • 开启 此时所有请求都会被降级,默认5秒后会进入半开状态
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值