天天看点

分布式系统开发技术-学习总结01分布式系统开发技术-学习总结01

分布式系统开发技术-学习总结01

1. 什么是 Spring Cloud?

Spring cloud流应用程序启动器是基于Spring Boot的Spring集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud是一个全家桶式的技术栈,包含了很多组件。 最核心的是Eureka、Ribbon、Feign、Hystrix、Zuul这几个组件。简单来说 ——

  • Spring Cloud是一个微服务框架,相比Dubbo等RPC框架, Spring Cloud提供的全套的分布式系统解决方案。
  • Spring Cloud对微服务基础框架Netflix的多个开源组件进行了封装,同时又实现了和云端平台以及和Spring - Boot开发框架的集成。
  • Spring Cloud为微服务架构开发涉及的配置管理,服务治理,熔断机制,智能路由,微代理,控制总线,一次性token,全局一致性锁,leader选举,分布式session,集群状态管理等操作提供了一种简单的开发方式。
  • Spring Cloud 为开发者提供了快速构建分布式系统的工具,开发者可以快速的启动服务或构建应用、同时能够快速和云平台资源进行对接。
    Spring Cloud有以下特点:
  • 约定优于配置
  • 适用于各种环境。开发、部署在PC Server 或各种云环境均可
  • 隐藏了组件的复杂性,并提供声明式,无xml的配置方式
  • 开箱即用
  • 轻量级的组件.。Spring Cloud整合的组件大多比较轻量。例如Eureka,Zuul,等等
  • 组件丰富,功能齐全。Spring Cloud 为微服务架构提供了非常完整的支持.例如,配置管理,服务发现,断路器,微服务网关等;
  • 选型中立、丰富。 例如,Spring Cloud 支持使用Eureka,Zookeeper或Consul实现服务发现.
  • 灵活。Spring Cloud的组成部分是解耦的,开发人员可按需灵活挑选技术选型。

现在从整体上看一下 Spring Cloud 各个组件是如何来配套使用的:

分布式系统开发技术-学习总结01分布式系统开发技术-学习总结01

2. 使用 Spring Cloud 有什么优势?

  • 与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题。
  • 服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录,在该目录中注册服务,然后能够查找并连接到该目录中的服务。
  • 冗余-分布式系统中的冗余问题。
  • 负载平衡 --负载平衡改善跨多个计算资源的工作负荷,诸如计算机,计算机集群,网络链路,中央处理单元,或磁盘驱动器的分布。
  • 性能-问题 由于各种运营开销导致的性能问题。
  • 部署复杂性 - Devops技能的要求。

3. 服务注册和发现是什么意思?Spring Cloud 如何实现?

  • 当我们开始一个项目时,我们通常在属性文件中进行所有的配置。随着越来越多的服务开发和部署,添加和修改这些属性变得更加复杂。有些服务可能会下降,而某些位置可能会发生变化。手动更改属性可能会产生问题。
  • Eureka 是 Netflix 开源的一款提供服务注册和发现的产品,它提供了完整的 Service Registry 和 Service Discovery 实现。它也是 Spring Cloud 体系中最重要最核心的组件之一。Eureka 就是一个服务中心,将所有的可以提供的服务都注册到它这里来管理,其他各调用者需要的时候去注册中心获取,然后再进行调用,避免了服务之间的直接调用,方便后续的水平扩展、故障转移等。
    分布式系统开发技术-学习总结01分布式系统开发技术-学习总结01

4. 什么是 Hystrix?它如何实现容错?

在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。

Hystrix是一个延迟和容错库,旨在隔离远程系统,服务和第三方库的访问点,当出现故障是不可避免的故障时,停止级联故障并在复杂的分布式系统中实现弹性。通常对于使用微服务架构开发的系统,涉及到许多微服务的协作。比如下图

分布式系统开发技术-学习总结01分布式系统开发技术-学习总结01

假设如果上图中的微服务9失败了,那么使用传统方法我们将传播一个异常。但这仍然会导致整个系统崩溃。

随着微服务数量的增加,这个问题变得更加复杂。微服务的数量可以高达1000。这是hystrix出现的地方我们将使用Hystrix在这种情况下的Fallback方法功能。我们有两个服务employee-consumer使用由employee-consumer公开的服务。简化图如下所示

分布式系统开发技术-学习总结01分布式系统开发技术-学习总结01

现在假设由于某种原因,employee-producer公开的服务会抛出异常。我们在这种情况下使用Hystrix定义了一个回退方法。这种后备方法应该具有与公开服务相同的返回类型。如果暴露服务中出现异常,则回退方法将返回一些值。

Hystrix 会在某个服务连续调用N次不响应的情况下,立即通知调用端调用失败,避免调用端持续等待而影响了整体服务。Hystrix 间隔时间会再次检查此服务,如果服务恢复将继续提供服务。

分布式系统开发技术-学习总结01分布式系统开发技术-学习总结01

6. 什么是 Hystrix 断路器?它可以做什么?

由于某些原因,employee-consumer公开服务会引发异常。在这种情况下使用Hystrix我们定义了一个回退方法。如果在公开服务中发生异常,则回退方法返回一些默认值。

分布式系统开发技术-学习总结01分布式系统开发技术-学习总结01

如果firstPage method() 中的异常继续发生,则Hystrix电路将中断,并且员工使用者将一起跳过firtsPage方法,并直接调用回退方法。 断路器的目的是给第一页方法或第一页方法可能调用的其他方法留出时间,并导致异常恢复。可能发生的情况是,在负载较小的情况下,导致异常的问题有更好的恢复机会 。

分布式系统开发技术-学习总结01分布式系统开发技术-学习总结01

7. 什么是 Spring Cloud Bus?我们需要它吗?

Spring Cloud Bus 通过轻量消息代理连接各个分布的节点。这会用在广播状态的变化(例如配置变化)或者其它的消息指令中。Spring Cloud Bus 的一个核心思想是通过分布式的启动器对 Spring Boot 应用进行扩展,也可以用来建立一个或多个应用之间的通信频道。目前唯一实现的方式是用 AMQP 消息代理作为通道。Spring Cloud Bus 是轻量级的通讯组件,也可以用在其它类似的场景中。有了 Spring Cloud Bus 之后,当我们改变配置文件提交到版本库中时,会自动的触发对应实例的Refresh,具体的工作流程如下:

分布式系统开发技术-学习总结01分布式系统开发技术-学习总结01

8. 什么是 Netflix Feign?它的优点是什么?

Feign(接口调用):微服务之间通过Rest接口通讯,spring Cloud提供Feign框架来支持Rest的调用,Feign使得不同进程的Rest接口调用得以用优雅的方式进行,这种优雅表现得就像同一个进程调用一样。Feign是受到Retrofit,JAXRS-2.0和WebSocket启发的java客户端联编程序。Feign的第一个目标是将约束分母的复杂性统一到http apis,而不考虑其稳定性。在employee-consumer的例子中,我们使用了employee-producer使用REST模板公开的REST服务。

分布式系统开发技术-学习总结01分布式系统开发技术-学习总结01

下面是Spring Cloud的注册中心、分布式配置中心、Feign、Zuul、服务链路追踪等组件的简单总结。

分布式系统开发技术-学习总结01分布式系统开发技术-学习总结01
分布式系统开发技术-学习总结01分布式系统开发技术-学习总结01
分布式系统开发技术-学习总结01分布式系统开发技术-学习总结01
分布式系统开发技术-学习总结01分布式系统开发技术-学习总结01
分布式系统开发技术-学习总结01分布式系统开发技术-学习总结01
分布式系统开发技术-学习总结01分布式系统开发技术-学习总结01

这是一个Spring Cloud 的架构示例:

分布式系统开发技术-学习总结01分布式系统开发技术-学习总结01

继续阅读