SpringCloud笔记

# 一、SpringCloud入门

## 1.微服务

微服务架构风格[[1\]](http://blog.cuicc.com/blog/2015/07/22/microservices/#fn1)是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术。

## 2.SpringCloud

场景:快速(简化)构建分布式系统

协调任何事情:简化分布式系统

构建分布式系统不需要复杂和容易出错。SpringCloud为最常见的分布式系统模式提供了一个简单、可访问的编程模型,帮助开发人员构建弹性、可靠和协调的应用程序。SpringCloud构建在SpringBoot的基础上,使开发人员能够很容易地开始工作,并快速提高生产效率。

![](assets/springcloud.JPG)

SpringCloud并不是一门单纯的技术,而是整合了其他很多门技术

参考网站:
http://spring.io/projects/spring-cloud

https://springcloud.cc/

## 3.入门程序

课堂代码:https://github.com/ITFB/microservice

![](assets/project.png)

RestTemplate:

基于客户端的用于执行HTTP请求的简单的模板方法API

执行GET、POST请求

## 4.Eureka注册中心

云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。

Eureka是一种基于REST(代表性状态传输)的服务,主要用于在AWS云中定位服务,以实现中间层服务器的负载平衡和故障转移。

基于C/S结构的

![](assets/eureka_architecture.png)

![](assets/eureka_simple.png)

角色:

注册中心:提供服务注册与发现功能(服务端)

生产者:向注册中心注册自身信息,用于消费者进行调用(客户端)

消费者:从注册中心注册表中获取生产者信息,并进行调用(客户端)

### 4.1 搭建Eureka Server

> 添加依赖

```xml
<!--添加eureka server依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
```

> 在主程序类上添加注解

```java
@EnableEurekaServer
```

> 配置文件

```pro

eureka:
  client:
    registerWithEureka: false  #是否注册到EurekaServer中,因为本身就是EurekaServer 所以不需要注册
    fetchRegistry: false # 是否从EurekaServer中获取信息,因为当前是单点Eureka 所以不需要
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
    # 指定与Eureka Client交互的地址
```

总结:

基本springcloud中添加组件都是三步走:

1.添加依赖 2.添加注解 3.配置文件

### 4.2 搭建服务生产者(EurekaClient)

> 添加依赖

```xml
<!--添加Eureka Client依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
```

> 添加注解(新版本可以省略)

```java
//@EnableEurekaClient 该注解新版本可以省略
```

> 修改配置文件(将自身注册到Eureka Server中)

```pro
spring: 
# 该配置很重要!重要!重要! 注册时的应用名称
  application:
    name: item-provider-8001

eureka:
  client:
    serviceUrl:
        # 指定(Eureka Server)注册地址
      defaultZone: http://localhost:6001/eureka/
```

## 5.Eureka集群

## 6.服务发现(了解)

## 7.Provider实现集群以及负载均衡

Ribbion  客户端负载均衡

提供云端负载均衡,有多种负载均衡策略可供选择,可配合服务发现和断路器使用

## 1.Feign HTTP客户端工具

* Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。

* 在Spring Cloud中,使用Feign非常简单——创建一个接口,并在**接口**上添加一些**注解**,代码就完成了。Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。

* Spring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。

* Spring Cloud Feign是基于Netflix feign实现,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供这两者的强大功能外,还提供了一种声明式的Web服务客户端定义的方式。

* Spring Cloud Feign帮助我们定义和实现依赖服务接口的定义。在Spring Cloud feign的实现下,只需要创建一个接口并用注解方式配置它,即可完成服务提供方的接口绑定,简化了在使用Spring Cloud Ribbon时自行封装服务调用客户端的开发量。

* Spring Cloud Feign具备可插拔的注解支持,支持Feign注解、JAX-RS注解和Spring MVC的注解。

## 2. Hystrix断路器、熔断器

在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC、HTTP) 。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。

如下图所示:A作为服务提供者,B为A的服务消费者,C和D是B的服务消费者。A不可用引起了B的不可用,并将不可用像滚雪球一样放大到C和D时,雪崩效应就形成了。

![](assets/2018051918293532.png)

Hystrix语义为“豪猪",具有自我保护的能力。Hystrix的出现即为解决雪崩效应。

### 2.1 Hystrix的设计原则是什么?

* 资源隔离(线程池隔离和信号量隔离)机制:限制调用分布式服务的资源使用,某一个调用的服务出现问题不会影响其它服务调用。
* 限流机制:限流机制主要是提前对各个类型的请求设置最高的QPS阈值,若高于设置的阈值则对该请求直接返回,不再调用后续资源。
* 熔断机制:当失败率达到阀值自动触发降级(如因网络故障、超时造成的失败率真高),熔断器触发的快速失败会进行快速恢复。
* 降级机制:超时降级、资源不足时(线程或信号量)降级 、运行异常降级等,降级后可以配合降级接口返回托底数据。
* 缓存支持:提供了请求缓存、请求合并实现
* 通过近实时的统计/监控/报警功能,来提高故障发现的速度
* 通过近实时的属性和配置热修改功能,来提高故障处理和恢复的速度

### 2.2 Hystrix是如何实现它的目标的?

(1)通过HystrixCommand或者HystrixObservableCommand来封装对外部依赖的访问请求,这个访问请求一般会运行在独立的线程中,资源隔离
(2)对于超出我们设定阈值的服务调用,直接进行超时,不允许其耗费过长时间阻塞住。这个超时时间默认是99.5%的访问时间,但是一般我们可以自己设置一下
(3)为每一个依赖服务维护一个独立的线程池,或者是semaphore,当线程池已满时,直接拒绝对这个服务的调用
(4)对依赖服务的调用的成功次数,失败次数,拒绝次数,超时次数,进行统计
(5)如果对一个依赖服务的调用失败次数超过了一定的阈值,自动进行熔断,在一定时间内对该服务的调用直接降级,一段时间后再自动尝试恢复
(6)当一个服务调用出现失败,被拒绝,超时,短路等异常情况时,自动调用fallback降级机制

(7)对属性和配置的修改提供近实时的支持

## 3. Zuul路由、网关

Zuul能够实现路由以及过滤的功能

> 创建路由模块

> 添加依赖

* web启动器
* zuul依赖
* eureka client依赖?路由要起作用,必须注册到eureka server中

> 创建主程序类,添加 @EnableZuulProxy 注解 开启网关服务

不用路由:

http://localhost:8001/item/list

路由:

http://www.zuul5001.com:5001/microservice-item-provider/item/list

 

很高兴能够为你提供关于Spring Cloud的笔记。Spring Cloud是一套基于Spring Boot的微服务框架,它提供了一系列开箱即用的工具和组件,帮助开发者快速构建和部署分布式系统。下面是一些关键的笔记要点: 1. 服务注册与发现:Spring Cloud提供了Eureka、Consul和Zookeeper等注册中心,用于服务的注册与发现,实现了服务之间的自动发现和负载均衡。 2. 服务调用:通过Spring Cloud的RestTemplate或Feign客户端,可以轻松实现服务之间的远程调用。Feign还支持声明式的服务调用,简化了代码的编写。 3. 负载均衡:Spring Cloud提供了Ribbon和LoadBalancer等组件,用于实现负载均衡。通过配置负载均衡策略,可以将请求分发到不同的服务实例上。 4. 服务容错:通过Hystrix或Sentinel等组件,可以实现服务的容错和熔断。当某个服务不可用时,可以快速失败或者返回默认值,保证整个系统的稳定性。 5. 配置中心:Spring Cloud Config提供了集中式的配置管理,可以将配置文件集中存储在Git、SVN等版本控制系统中,并实现配置文件的动态刷新。 6. 链路追踪:通过Spring Cloud Sleuth或Zipkin等工具,可以实现分布式系统的链路追踪和监控。可以了解每个请求经过的各个服务节点,便于排查和解决问题。 7. 消息驱动:Spring Cloud Stream和Spring Cloud Bus等组件,提供了消息驱动的方式来实现服务之间的解耦和异步通信。 这只是对Spring Cloud的一些简单介绍,希望能够帮助到你。如果有具体的问题或者需要进一步的资料,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_无往而不胜_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值