Spring Cloud的官方网站:
中文网站: Spring Cloud中文网-官方文档中文版
翻译:
Spring Cloud为开发人员提供了用于快速构建分布式系统中某些常见模式的工具(例如,配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调产生了样板模式,并且使用Spring云开发人员可以快速支持实现这些模式的服务和应用程序。它们可以在任何分布式环境中正常工作,包括开发人员自己的笔记本电脑,裸机数据中心和受管理的平台,例如Cloud Foundry。
-
SpringCloud 是一个服务治理平台,提供了一些服务框架,包含了:服务注册与发现,配置中心,消息中心,负载均衡,数据监控等等
-
SpringCloud 是一个微服务框架,相比Dubbo等RPC框架,SPringCloud提供了全套的分布式系统解决方案
-
SpringCloud对微服务基础框架Netflix的多个开源组件进行了封装,同时又实现了和云端平台以及Springboot框架的集成
-
SpringCloud是一个基于Springboot实现的云应用开发工具,它以开发中的配置管理,服务发现,断路器,智能路由,微代理,控制总线,全局锁,决策竞选,分布式会话和集群状态管理等操作提供了一种简单的开发方式
-
SpringCloud为开发者提供了快速构建分布式系统的工具,开发者可以快速的启动服务或构建应用,同时能够快速和云平台资源进行对接.微服务是可以独立部署,水平扩展,独立访问(或者有独立的数据库)的服务单元,SpringCloud就是这些微服务的大管家,采用了微服务这种架构之后,项目的数量会非常多,SPringCloud作为大管理需要管理好这些微服务,自然而然需要很多小弟来帮忙.常见的组件如下图:
2.1 SpringCloud的技术栈
配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion。
事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。
云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。
熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。
配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。
封装了Consul操作,consul是一个服务发现与配置工具,与Docker容器可以无缝集成。
Spring Cloud for Cloud Foundry Pivotal
通过Oauth2协议绑定服务到CloudFoundry,CloudFoundry是VMware推出的开源PaaS云平台。
日志收集工具包,封装了Dapper和log-based追踪以及Zipkin和HTrace操作,为SpringCloud应用实现了一种分布式追踪解决方案。
Spring Cloud Data Flow Pivotal
大数据操作工具,作为Spring XD的替代产品,它是一个混合计算模型,结合了流数据与批量数据的处理方式。
基于spring security的安全工具包,为你的应用程序添加安全控制。
操作Zookeeper的工具包,用于使用zookeeper方式的服务发现和配置管理。
数据流操作开发包,封装了与Redis,Rabbit、Kafka等发送接收消息。
基于 Spring Boot CLI,可以让你以命令行方式快速建立云组件。
提供云端负载均衡,有多种负载均衡策略可供选择,可配合服务发现和断路器使用。
Turbine是聚合服务器发送事件流数据的一个工具,用来监控集群下hystrix的metrics情况。
Feign是一种声明式、模板化的HTTP客户端。
提供云端计划任务管理、任务调度。
Spring Cloud Connectors Spring
便于云端应用程序在各种PaaS平台连接到后端,如:数据库和消息代理服务。
提供Leadership选举,如:Zookeeper, Redis, Hazelcast, Consul等常见状态模式的抽象和实现。
Spring Boot式的启动项目,为Spring Cloud提供开箱即用的依赖管理。
2.2 SpringCloud两个版本
2.2.1 SpringCloud Netflix 第一代
Netflix(Nasdaq NFLX) 美国奈飞公司,简称网飞。是一家[会员]订阅制的[流媒体]播放平台 [1] ,总部位于[美国加利福尼亚州]洛斯盖图。成立于1997年,曾经是一家在线[DVD]及蓝光[租赁]提供商,用户可以通过免费[快递]信封租赁及归还Netflix库存的大量影片实体光盘。类似国内的爱奇艺
针对多种Netflix组件提供的开发工具包,包括Eureka,Hystrix,Ribbon,Zuul,Archaius等.
-
Netflix Eureka: 一个基于Rest服务的服务治理组件,包括服务注册中心,服务注册与服务发现机制的实现,实现了云端负载均衡和中间层服务端的故障转移
-
Netflix Hystrix: 容错管理工具,实现断路器模式,通过控制服务的节点,从而对延迟和故障提供更强大的容错能力
-
Netflix Ribbon: 客户端的负载均衡的服务调用组件
-
Netflix Feign: 基于Ribbon和Hystrix的声明式服务调用组件
-
Netflix Zuul: 微服务网关,提供动态路由,访问过滤等服务
-
Netflix Archaius: 配置管理API,包含一系列配置管理API,提供动态类型化属性,线程安全配置操作,轮询框架,回调机制等功能.
2.2.2 Spring Cloud Alibaba第二代
Spring Cloud Alibaba是Spring Cloud下的一个子项目,Spring Cloud Alibaba为分布式应用程序开发提供了一站式解决方案,它包含开发分布式应用程序所需的所有组件,使您可以轻松地使用Spring Cloud开发应用程序,使用Spring Cloud Alibaba,您只需要添加一些注解和少量配置即可将Spring Cloud应用程序连接到Alibaba的分布式解决方案,并使用Alibaba中间件构建分布式应用程序系统。Spring Cloud Alibaba 是阿里巴巴开源中间件跟 Spring Cloud 体系的融合:
Nacos: 阿里巴巴开源产品,一个更易于构建云原生应用的动态服务发现,配置管理和服务管理平台
Sentinel: 面向分布式服务架构的轻量级流量控制产品,把流量作为切入点,从流量控制,熔断降级,系统负载保护等多个维度保护服务的稳定性.
RocketMQ: 一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的,高可靠的消息发布与订阅服务.
Dubbo: Apache Dubbo是一款高性能java RPC框架
Seata: 阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品
Alibaba Cloud OSS: 阿里云对象存储服务(Object Storeage Service,简称 OSS),是阿里云提供的海量,安全,低成本,高可靠的云存储服务。你可以在任何应用,任何时间,任何地点存储和访问任意类型的数据
Alibaba Cloud SchedulerX : 阿里巴巴中间件团队开发的一款分布式任务调度产品,提供秒级,精准,高可靠,高可用的定时(基于Cron表达式)任务调度服务。
Alibaba Cloud SMS: 覆盖全球的短信服务,友好,高效,智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。
2.2.3 SpringCloud第一代与SpringCloud第二代的比较:
2.3 SpringCloud的版本名
在2020年之前,官网中会看到如下的版本名:Dalston、Edgware、Finchley、Greenwich、Hoxton. 开发代号看似没有什么规律,但实际上Spring Cloud主框架版本号是使用英国伦敦地铁站名称来进行标记的,并根据地铁站名称的首字母的英文自然升序排列来识别版本的递增。如:Angle、Brixton、Camden、Dalston、Edgware、Finchley、Greenwich 、Hoxton等。后续版本提升会继续根据首字母升序排列,比如:Dalston版本,我们可以简称 D 版本,对应的 Edgware 版本我们可以简称 E 版本。而版本号后面的 .SR 指的是:service releases,简称 SRX(X 是一个递增数字).
常用的阶段版本包括:BUILD-XXX[SNAPSHOT]、GA、PRE(M1、M2等)、RC、SR。
BUILD-XXX[SNAPSHOT] - 开发版本、一般是开发团队内部使用。
GA - 稳定版,内部开发到一定阶段了,各个模块集成后,经过全面测试发现没有问题,可对外发行了。这个时候叫GA(General Availability)。基本上可以使用了。没有严重的BUG问题,但是有未测出的BUG隐患。不推荐商业使用。
PRE - 里程碑版,由于GA还不属于公开发行版,里面还有些功能不完善或者bug,于是就有了milestone(里程碑版)。milestone版主要修复了一些bug。一个GA后,一般会有多个里程本版。例如 M1 M2 M3…。不推荐商业使用。
RC - 候选发布版,从BUILD后到GA在到M基本上系统就算定型了,这个时候系统就进入Release Candidate(候选发布版)。该阶段的软件类似于最终发行前的一个观察期,该期间只对一些发现的等级高的bug进行修复。发布RC1 RC2等版本。可以考虑RC版本。
SR - 正式发布版,公开正式发布。正式发布版一般也有多个发布,例如 SR1 SR2 SR3等等,一般是用来修复大bug或者优化。最好使用SR版本。
但是在2020年4月17日官方就发布了 Spring Cloud 2020.0.0-M1,从发布信息可以看出,从 Spring Cloud 2020.0.0-M1 开始,Spring Cloud将不再使用英国伦敦地铁站的命名方式,而使用了全新的 “日历化”(Calendar Versioning或简称CalVer) 版本命名方式。 Spring Cloud版本号将使用了 YYYY.MINOR.MICRO 的命名规则,其中:
-
YYYY:代表4 位年份;
-
MINOR:表示一个每年以 0 开始递增的数字;
-
MICRO:表示版本号的后缀, .0 类似于 .RELEASE 一样,.2 类似于 .SR2。
预发布版本的后缀分隔符也由 . 变为 -,如:2020.0.0-M1 和 2020.0.0-RC2 命名所示。 同时,Spring Cloud 将停止给快照版本添加 BUILD- 前缀,如:2020.0.0-SNAPSHOT 命名所示。
Spring Cloud与Spring Boot版本匹配关系:
我们可以通过下列url查询SpringCloud与Springboot的版本:
spring-cloud-dependencies 版本列表可查看:
https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies
spring-boot-starter-parent 版本列表可查看:
https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent
springcloud版本是需要和springboot版本对应的,要不然会出现一大堆的问题
我们也可以从SpringCloud的官网查看SpringCloud与SPringboot的版本搭配:
https://spring.io/projects/spring-cloud#overview
查询SpringCloud与Springboot的版本匹配
https://start.spring.io/actuator/info
2.4 微服务架构的常见问题
一旦采用微服务系统架构,就势必会遇到下列问题:
这么多微服务,如果管理它们?
这么多微服务,它们之间如何通信?
这么多微服务,客户端怎么访问它们?
这么多微服务,一旦出现问题了,应该如何自处理?
这么多微服务,一旦出现问题,如何排错?
对于上面的问题,是任何一个微服务架构师都不能绕过去的,因此大部分的微服务产品都针对每一个问题提供了相应的组件来解决它们.
2.5 微服务常见概念
2.5.1 服务治理
服务治理就是进行服务的自动化管理,其核心就是服务的自动注册与发现.
服务发现:服务实例通过注册中心,获取到注册到其中的服务实例的信息,通过这些信息去请求提供的服务
服务剔除:服务注册中心将有问题的服务自动剔除出可用列表,使其不会被调用到
2.5.2 服务调用
在微服务架构中,通常存在多个服务之间的远程调用的需求,目前主流的远程调用技术有基于HTTP的RESTful接口以及基于TCP的RPC协议.
REST(Representational State Transfer)
这是一种HTTP调用的格式,更标准,更通用,无论那种语言都支持http协议
RPC(Remote Promote Call)
一种进程间的通信方式.允许像调用本地服务一样调用远程服务。RPC框架的主要目标是让远程服务调用更简单,透明。RPC框架负责屏蔽底层的传输方式,序列化方式和通信细节。开发人员在使用的时候,只需要了解谁在什么位置提供了什么样的远程服务接口即可,并不需要关心底层通信细节和调用过程。
2.5.3 服务网关
随着微服务的不断增多,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务接口才能完成一个业务需求,如果让客户端直接与各个微服务通信可能出现:
客户端需要调用不同的url地址,增加调用难度
在一定的场景下,存在跨域请求的问题
每个微服务都需要进行单独的身份认证
针对这些问题,API网关应时而生.
API网关直面意思就是将所有API调用统一接入到API网关层,由网关层统一接入和输出。一个网关的基本功能有:统一接入,安全防护,协议适配,流量管控,长短链接支持,容错能力.有了网关之后,各个API服务提供团队可以专注于自己的业务逻辑处理,而API网关更专注于安全,流量,路由等问题.
2.5.4 服务容错
在微服务当中,一个请求经常会涉及到调用几个服务,如果其中某个服务不可用,没有做服务容错的话,很有可能会造成一连串的服务不可用,从而形成服务雪崩效应。
我们没法预防服务雪崩效应的发生,只能尽可能去做好容错。服务容错的三个核心思想是:
不被外界环境影响
不被上游请求压垮
不被下游响应拖垮
2.5.5 链路追踪
随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块上,这些软件模块,有可能是由不同的团队开发,可能使用不同的编程语言来实现,有可能部署在上千台服务器上,横跨多个不同的数据中心。因此,就需要对一次请求涉及的多个服务链路进行日志记录,性能监控即所谓的链路追踪。