《微服务架构实战》读书笔记5-1 —Spring Cloud

一、Spring Cloud简介

SpringCloud是一系列框架的集合,其利用Spring Boot的开发便利性巧妙的化简了分布式系统基础设施的开发,如服务发现、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以基于Spring Boot 的开发风格做到一键启动和部署。

Spring Cloud的各个项目基于Spring Boot ,将各开源框架(Netflix)进行封装,基于配置的方式将各个框架绑定到Spring环境中,从而简化各个框架的使用。

(图片来源网络http://img.ccblog.cn/img/20170118/181.jpg)
image

Spring Cloud 各组件的运行流程

  • 所有请求都统一通过API网关(Zuul)来访问内部服务
  • 网关接收到请求后,从注册中心(Eureka)获取可用服务
  • 由Ribbon进行均衡负载后发送到具体的实例
  • 微服务之间通过Feign进行通信处理业务
  • Hystrix负责处理服务超时熔断
  • Turbine监控服务间的调用和熔断相关指标。

Spring Cloud公积成了19个子项目,里边都包含一个或多个第三方开源框架。

Spring Cloud 工具框架如下
(描述部分参考:https://www.cnblogs.com/xiaojunbo/p/7090742.html)

  • Spring Cloud Config:配置管理开发工具包,可以让你把配置放到远程服务器,目前支持本地存储、Git以及Subversion。
  • Spring Cloud Netflix:针对多种Netflix组件提供的开发工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。
  • Spring Cloud Bus:事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。
  • Spring Cloud for Cloud Foundry:通过Oauth2协议绑定服务到CloudFoundry,CloudFoundry是VMware推出的开源PaaS云平台。
  • Spring Cloud Foundry Service Broker:为建立管理云托管服务的服务***提供一个起点。
  • Spring Cloud Cluster: 基于Zookeeper、redis、Hazelcast、Consul实现的领导***和平民状态模式的抽象和实现。
  • Spring Cloud Consul:封装了Consul操作,consul是一个服务发现与配置工具,与Docker容器可以无缝集成。
  • Spring Cloud Security:安全工具包,为你的应用程序添加安全控制,主要是指OAuth2。
  • Netflix Eureka:云端负载均衡,一个基于 REST 的服务,用于定位服务,以实现云端的负载均衡和中间层服务器的故障转移。
  • Netflix Hystrix:容错管理工具,旨在通过控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
  • Netflix Zuul:边缘服务工具,是提供动态路由,监控,弹性,安全等的边缘服务。
  • Netflix Archaius:配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。
  • Spring Cloud Sleuth:日志收集工具包,封装了Dapper,Zipkin和HTrace操作。
  • Spring Cloud Data Flow:大数据操作工具,通过命令行方式操作数据流。
  • Spring Cloud Stream:数据流操作开发包,封装了与Redis,Rabbit、Kafka等发送接收消息。
  • Spring Cloud Stream App Starters:基于Spring Boot为外部系统提供Spring的集成。
  • Spring Cloud Task:任务调度框架。
  • Spring Cloud Connectors:便于PaaS应用在各种平台上连接到后端数据库和消息经纪服务。
  • Spring Cloud Zookeeper:操作Zookeeper的工具包,用于使用zookeeper方式的服务注册和发现。
  • Spring Cloud CLI:基于 Spring Boot CLI,可以让你以命令行方式快速建立云组件

二、注册中心简介

1. 注册中心概念

注册中心类似于书的目录,分布式系统中的服务之间调用时,相当于先到注册中心中找到对应的目录,然后调用相应的实现完成功能。(个人理解:分布式系统中,应对高并发请求情况下,一个服务往往对应一个服务器集群作为服务提供者,当有新的服务节点加入、或服务节点不可用时,要实现服务的自动发现与卸载)

2. 常用的注册中心

常用注册中心包括Zookeeper、Eureka、etcd 和Consul

分布式系统CAP理论:C(一致性)、A(可用性)、P(分区容错性),其中分区容错性是分布式系统必须要保证的,因此rd需要在A和C之间权衡)

1)Zookeeper:

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

ZooKeeper提供的常见服务如下 :

  • 命名服务 - 按名称标识集群中的节点。它类似于DNS,但仅对于节点。
  • 配置管理 - 加入节点的最近的和最新的系统配置信息。
  • 集群管理 - 实时地在集群和节点状态中加入/离开节点。
  • ***算法 - ***一个节点作为协调目的的leader。
  • 锁定和同步服务 - 在修改数据的同时锁定数据。此机制可帮助你在连接其他分布式应用程序(如Apache HBase)时进行自动故障恢复。
  • 高度可靠的数据注册表 - 即使在一个或几个节点关闭时也可以获得数据。

Zookeeper保证的是C、P原则,保证数据的一致性和分区容错性,但不能保证每次服务请求的可用性。

2)Eureka:

Eureka通过心跳检测、健康检查和客户端缓存等机制,提高了系统的灵活性、可伸缩性和可用性,其遵循AP原则

3)etcd:

etcd 是一个高可用的键值存储系统,主要用于共享和服务发现。etcd像是专门为集群环境的服务发现和注册而设计,它提供了数据TTL失效、数据改变监视、多值、目录监听、分布式锁原子操作等功能,可以方便的跟踪并管理集群节点的状态。

3)Consul:

Consul 用于实现分布式系统的服务发现和配置共享。Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,Consul的方案更"一站式",内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。使用起来也较 为简单。Consul用Golang实现,因此具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件,方便部署,与Docker等轻量级容器可无缝配合。

注册中心选择

如果团队原有框架基于Dubbo,则Zookeeper会更合适一些;如果团队使用Spring Cloud,则Eureka优势大一些;如果要求容器化,则etcd和Consul可作为不错的选择。

服务发现
  • 客户端服务发现:客户端需要请求服务时,先到注册中心获取可用的服务列表地址,饭后根据负载均衡算法去获取可用实例的地址响应请求
  • 服务端服务发现:客户端通过负载均衡器向某个服务提出请求,负载均衡器向注册中心发出请求,将每个请求转发至可用的服务实例。

两者的本质区别在于客户端是否保存服务列表信息。

对比:使用服务端服务发现,可以使客户端不必关心发现的细节,减少编程语言需要完成的服务发现逻辑。缺点是除非部署环境能够提供负载均衡,否则需要配置一个高可用的负载均很好过器系统。

当前较为流行的是使用Nginx进行服务器端的负载均衡。

#笔记##读书笔记#
全部评论

相关推荐

点赞 6 评论
分享
牛客网
牛客企业服务