Spring Cloud(一)初识

一、Spring Cloud 介绍

Spring Cloud是一个基于Spring Boot来实现的一系列工具框架的集合体。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

什么是微服务:

  • 微服务是一种软件架构
  • 微服务是由多个服务组成的集合体
  • 微服务里面的每个服务都是独立存在的
  • 微服务是一种去中心化的思想

微服务的特点(优点):

  1. 开发相对简单
  2. 技术栈灵活
  3. 服务独立解耦
  4. 可用性高 

微服务的缺点:

  1. 维护和部署复杂度增加
  2. 服务间通信成本增加(单应用我们可以直接调用,而多应用需要通过HTTP协议做通讯)
  3. 数据一致性(传统单服务直接用事物来控制;而多应用中服务间是解耦的,就不能用传统的事物来控制而是用分布式事物,这个也是增加成本) 
  4. 系统集成测试(服务与服务间测试成本增加)

spring boot 和 spring cloud 的关系:

  1. Spring boot 是 Spring 的一套快速配置脚手架,可以基于spring boot 快速开发单个微服务,Spring Boot,看名字就知道是Spring的引导,就是用于启动Spring的,使得Spring的学习和使用变得快速无痛。不仅适合替换原有的工程结构,更适合微服务开发。
  2. Spring Cloud基于Spring Boot,为微服务体系开发中的架构问题,提供了一整套的解决方案——服务注册与发现,服务消费,服务保护与熔断,网关,分布式调用追踪,分布式配置管理等。
  3. Spring Cloud是一个基于Spring Boot实现的云应用开发工具;Spring boot专注于快速、方便集成的单个个体,Spring Cloud是关注全局的服务治理框架;spring boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,Spring Cloud很大的一部分是基于Spring boot来实现。
  4. Spring boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring boot,属于依赖的关系。
  5. 你可以把spring boot的官方的包分为两类,一种是为了搭建一个服务用的,比如hibernate jpa,比如 message。另外一种含有cloud关键字的,是为了各个spring boot之前管理和使用的包。

重点:

  • 基于 Spring Boot
  • 云服务、分布式框架集合(众多)

核心功能:

  • 分布式/版本化配置
  • 服务注册和发现
  • 路由
  • 服务和服务之间的调用
  • 负载均衡
  • 断路器
  • 分布式消息传递

Spring Cloud 完整技术

( 该图片来源于网络 )

我的学习线路

Netflix 组件之 Eureka(服务注册与发现)

OpenFeign (服务调用组件,熔断降级,负载均衡)

Netflix 组件之 Zuul(服务网关:路由、过滤)

问:请说说eureka和 zookeeper,两个的区別?

首先 说CAP 是什么  所谓的CAP  C强一致性  A可用性  P 分区容错性

著名的CAP理论指出,

一个分布式系统不可能同时满足C(一致性)A(可用性)P(分区容错性)。由于分区容错性 P 在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。

zookeeper 遵守 CP 

当向注册中心查询服务列表时,    我们可以容忍注册中心返回的是几分钟以前的注册信息, 但不能接受服务直接down掉不可用。

也就是说,服务注册功能对一致性的要求要高于可用性。

但是zookeeper 会出现这样一种情况,   当 master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行 leader选举。

问题在于,选举 leader的时间太长,30~120s,目选举期间整个zookeeper 集群都是不可用的,这就导致在选举期间注册服务瘫痪。

在云部署的环境下,因网络问题使得zookeeper 集群失去 master节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的。 

或许  这个回答太过于抽象  用一种其他说法来说 就是 :

   当有一个zookeeper  挂了  那其他的zookeeper 会进行 一次选举 (强一致性 : 我一定要保持数据一致性)  而在此选举期间  zookeeper  是不可用的   而当前 有用户正在使用 用户就不爽了 。

Eureka遵守 AP  

Eureka:看明白了这一点,因此在设计时就优先保证可用性。

Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。

而 Eureka的客户端在向某个 Eureka注册或时如果发现连接失败,则会自动切换至其它节点 

只要有一台 Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的不保证强一致性)。

除此之外, Eureka还有一种自我保护机制,如果在15分钟内超过85%的节点都没有正常的心跳,那么 Eurekas就认为客户端与注册中心出现了网络故障,此时会出现以下几种情况:

  1. Eureka不再从注册列表中移除因为长时间没收到心跳而应该过期的服务
  2. Eureka仍然能够接受新服务的注册和査询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)
  3. 当网络稳定时,当前实例新的注册信息会被同步到其它节点中

因此, Eureka可以很好的应对因网络故障导致部分节点失去联系的情況,而不会像 zookeeper那样使整个注册服务瘫痪。

二、Spring Cloud 核心子项目及组件

( 该图片来源于网络 )

Spring Cloud Netflix(重要)

是对Netflix开发的一套分布式服务框架的封装,包括服务的发现和注册,负载均衡、断路器、REST客户端、请求路由等。

  • Eureka:服务治理组件,包含服务注册发现
  • Hystrix:容错管理组件,实现了熔断器(熔断降级)
  • Ribbon:客户端负载均衡的服务调用组件
  • Feign:基于Ribbon和Hystrix的声明式服务调用组件
  • Zuul:服务网关组件,提供智能路由、访问过滤等功能
  • Archaius:外部化配置组件

Spring Cloud Config

配置管理工具,分布式配置,实现应用配置的外部化存储,支持客户端配置信息刷新、加密/解密配置内容等;将配置信息中央化保存, 配置Spring Cloud Bus可以实现动态修改配置文件

Spring Cloud Bus

事件、消息总线,用于传播集群中的状态变化或事件,以及触发后续的处理;分布式消息队列,是对Kafka, MQ的封装

Spring Cloud Security

基于spring security的安全工具包,为我们的应用程序添加安全控制;对Spring Security的封装,并能配合Netflix使用

Spring Cloud Consul

 封装了Consul操作,Consul是一个服务发现与配置工具(与Eureka作用类似),与Docker容器可以无缝集成

Spring Cloud Zookeeper

对Zookeeper的封装,使之能配置其它Spring Cloud的子项目使用

Spring Cloud Eureka

Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件中的一部分,它基于Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能。

三、Spring Cloud Netflix组件

Spring Cloud Netflix通过自动配置和绑定到Spring Environment和其他Spring编程模型成语,为Spring Boot应用程序提供了Netflix OSS集成。 通过一些简单的注解,您可以快速启用和配置应用程序内的通用模式,并使用经过测试的Netflix组件构建大型分布式系统。 提供的模块包括服务注册与发现(Eureka)断路器(Hystrix)智能路由(Zuul)和 客户端负载平衡(Ribbon)

  • Eureka:服务治理组件,包含服务注册发现
  • Hystrix:容错管理组件,实现了熔断器(熔断降级)
  • Ribbon:客户端负载均衡的服务调用组件
  • Feign:基于Ribbon和Hystrix的声明式服务调用组件
  • Zuul:服务网关组件,提供智能路由、访问过滤等功能
  • Archaius:外部化配置组件
发布了69 篇原创文章 · 获赞 43 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/fox_bert/article/details/98724730