1. SpringCloud 初认识

一、 微服务初认识

1. 技术架构演变

  1. 单体应用
    model1 模式:jsp + java
    model2 模式:(MVC模式):Model View Controller(web service dao)
  2. 垂直应用
    一个模块作为一个小项目,项目包含多个模块。
  3. RPC分布式应用
    将模块之间公有的信息和功能抽离出来做成一个服务
  4. SOA流动计算架构
    资源调度、负载均衡、动态服务创建… 服务治理
  5. 微服务
    微,单一职责

2. 微服务含义及优缺点

  微服务将一个单体架构的应用按业务划分为一个个的独立运行的程序即服务,它们之间通过轻量级机制:HTTP协议进行通信(也可使用消息队列来通信,如RabbitMQ,Kafaka等),可采用不同的编程语言,使用不同的存储技术,自动化部署(如 Jenkins)减少人为控制。降低出错概率。服务数量越多,管理起来越复杂,因此采用集中化管理,如Eureka,Zookeeper等都是较常见的服务集中化管理框架。

  系统中的各个微服务可被独立部署,各个微服务之间是松耦合的,每个微服务仅关注于完成一件任务并很好的完成该任务。

优点

  1. 简单、灵活独立部署,测试容易
  2. 松耦合、高内聚、易扩展
  3. 语言,工具无关
  4. 协同开发,方便系统迭代

缺点

  1. 运维成本高,部署项目多,监控进程倍增,故障定位难,问题追溯难
  2. 接口兼容版本问题
  3. 分布式系统的复杂性:分布式事务问题,依赖服务不稳定,需要引入异步模式
  4. 部分模块重复构建,安全认证,配置日志

3. SOA vs MicroServices

  面向服务架构(SOA)是一种用于设计软件的伟大原则。在SOA中,所有组件都是独立自主的,并能为其他组件提供服务。大体上,SOA与微服务架构是非常相像的,当然有区别:微服务是细粒度的SOA组件(某单个SOA组件可被拆成多个微服务,而这些微服务通过分工协作,可提供与原SOA组件相同级别的功能)。

微服务是SOA发展出来的产物,是一种比较现代化的细粒度的SOA实现方式

SOA微服务架构
应用程序服务的可重用性的最大化专注于解耦
系统性的改变需要修改整体系统性的改变是创建一个新的服务
DevOps和持续交付正在变得流行强烈关注DevOps和持续交付
专注于业务功能重用更重视“上下文边界”的概念
通信使用企业服务总线ESB(Enterprise Service Bus)对于通信而言,使用较少精细和简单的消息系统
支持多种消息协议使用轻量级协议,例如HTTP,REST或Thrift API
对部署到它的所有服务使用通用平台应用程序服务器不是真的被使用,通常使用云平台
容器(如Docker)的使用不太受欢迎容器在微服务方面效果很好
SOA服务共享数据存储每个微服务可以有一个独立的数据存储
共同的治理和标准轻松的治理,更加关注团队协作和选择自由

4. Dubbo vs Spring Cloud

两者组件区别
对比项Spring CloudDubbo
服务注册中心Spring Cloud Netfix EurekaZookeeper,Nacos
服务调用方式REST APIRPC
服务网关Spring Cloud Netfix ZuulDubbo Proxy
断路由Spring Cloud Netfix HystrixSentinel
分布式配置Spring Cloud ConfigNacos
服务跟踪Spring Cloud Sleuth
消息总线Spring Cloud Bus
数据流Spring Cloud Stream
批量任务Spring Cloud Task

其他区别归纳:

  1. Dubbo 二进制传输,占用宽带更少,SpringCloud 是http协议传输,带宽比较多,而且一般伴随使用JSON报文,消耗会更大
  2. Dubbo 开发难度大,原因在于:Dubbo的jar包依赖问题很多大工程无法解决
  3. SpringCloud的接口协议约定比较自由松散,需要有强有力的行政措施来限制接口无序升级
  4. DUbbo的注册中心可以选择Zookeeper、Nacos等多种,SpringCloud的注册中心只能用 eureka 或者 自研
  5. 从系统结构简易程序:SpringCloud 的系统结构更简单,“注册+SpringMVC = SpringCloud”,而Dubbo各种复杂的url,protocol、register…
  6. 性能:Dubbo网络消耗更小,但网络消耗不是大问题,而且可通过压缩、二进制、高速缓存、分段降级等方法解决。

二、 微服务设计原则

1. AKF 拆分原则

   通过加机器解决容量和可用性问题,通过拆分解决功能和模块数量上增长带来的系统复杂性问题,以及业务变化带来的提供差异化服务问题。

拆分方式:

  1. 单体系统多运行几个实例,成为集群加负载均衡的模式
  2. 数据分区,如可根据地域进行数据分区
  3. 基于不同业务进行拆分

2. 前后端分离原则

  1. 前后端技术分离,由各自专家对各自领域进行优化
  2. 前后端交互界面更清晰,后端接口简洁明了,更易维护
  3. 前端多渠道集成场景更易实现,后端服务无需变更,采用统一的数据和模型,可支持多个前端,如 微信h5、PC、安卓、IOS

3. 无状态服务

  首先说一下什么是状态:若一个数据被多个服务共享,才能完成一笔交易,那么该数据被称为状态,依赖这个“状态”数据的服务被称为有状态服务。

  无状态服务原则并不是说在微服务架构里不允许存在状态,而是要将有状态的业务服务改为无状态的计算类服务。举例说明:遥控器和空调,调高一度,这是有状态服务,因为极有可能发送两者数据不一致的情况。调高到多少度,就是无状态服务了。

4. Restful通信风格

  1. 无状态协议HTTP,具备先天优势,扩展能力强,例需安全加密时,有现成成数方案HTTPS可用。
  2. JSON报文序列化,轻量简单,人与机器均可读,学习成本低,搜索引擎友好
  3. 语言无关,热门语言都有提供成熟的Restful API 框架

三、Spring Cloud

1. 概念定义

  Spring Cloud 是一个服务治理平台,提供了一些服务框架。包含了:服务注册与发现、配置中心、消息中心、负载均衡、数据监控等。

  Spring Cloud 是一个基于SpringBoot实现的云应用开发工具,为开发中的配置管理、服务发现、断路由、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。

2. 子项目(组件)

Spring Cloud Azure
Spring Cloud Alibaba
Spring Cloud for Amazon Web Services
Spring Cloud Bus
Spring Cloud Circuit Breaker
Spring Cloud CLI
Spring Cloud for Cloud Foundry
Spring Cloud - Cloud Foundry Service Broker
Spring Cloud Cluster
Spring Cloud Commons
Spring Cloud Config
Spring Cloud Connectors
Spring Cloud Consul
Spring Cloud Contract
Spring Cloud Function
Spring Cloud Gateway
Spring Cloud GCP
Spring Cloud Kubernetes
Spring Cloud Netflix
Spring Cloud Open Service Broker
Spring Cloud OpenFeign
Spring Cloud Pipelines
Spring Cloud Schema Registry
Spring Cloud Security
Spring Cloud Skipper
Spring Cloud Sleuth
Spring Cloud Stream
Spring Cloud Stream App Starters
Spring Cloud Stream Applications
Spring Cloud Task
Spring Cloud Task App Starters
Spring Cloud Vault
Spring Cloud Zookeeper
Spring Cloud App Broker

3. 第一代(Spring Cloud Netfix)

  • Netflix Eureka:基于Rest服务的服务治理组件,包括服务注册中心、服务注册与服务发现机制的实现,实现了云端负载均衡和中间层服务器的故障转移
  • Netflix Hystrix:容器管理工具,实现断路由器模式,通过控制服务的节点,从而对延迟和故障提供更强大的容错能力
  • Netflix Ribbon:客户端负载均衡的服务调用组件
  • Netflix Feigon:基于Ribbon 和 Hystrix 的声明式服务调用组件
  • Netflix Zuul:微服务网关,提供动态路由,访问过滤等服务
  • Netflix Archaius:配置管理API,包括一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等服务。

4. 第二代 (Spring Cloud Alibaba)

  • Nacos:开源产品,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台
  • Sentinel:面向分布式服务架构的轻量级流量控制产品,把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
  • RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时、高可靠的消息发布与订阅服务
  • Dubbo:高性能Java RPC 框架
  • Seata:开源产品,一个易于使用的高性能微服务分布式事务解决方案
  • Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品
  • Alibaba Cloud OSS:阿里云对象存储服务(Object Storage Service),是阿里云提供的海量、安全、低成本、高可靠的云存储服务,可在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  • Alibaba Cloud Schedulerx:阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于Cron表达式)任务调度服务
  • Alibaba Cloud SMS:覆盖全球的短信服务、友好、高效、智能的互联网通讯能力,帮助企业迅速搭建客户触达通道

5. SpringCloud 相关组件分类

Spring Cloud NetflixSpring Cloud 官方Spring Cloud ZookeeperSpring Cloud ConsulSpring Cloud KubernetesSpring Cloud Alibaba
分布式配置ArchaiusSpring Cloud ConfigZookeeperconsulConfigMapNacos
服务注册/发现Eureka-ZookeeperconsulApi ServerNacos
服务熔断Hystrix----Sentinel
服务调用FeigonOpenFeign RestTemplate---Dubbo RPC
服务路由ZuulSpring Cloud Gateway---Dubbo PROXY
分布式消息-SCS RabbitMQ---SCS RocketMQ
负载均衡Ribbon----Dubbo LB
分布式事务-----Seata

6. 常用组件(后续需学习的)

  • Spring Cloud Netflix Eureka:服务注册中心
  • Spring Cloud Netflix Ribbon:客户端负载均衡
  • Spring Cloud Netflix Hystrix:服务容错保护
  • Spring Cloud Netflix Feign:声明式服务调用
  • Spring Cloud OpenFeign(可替代Feign):OpenFeign 是 SpringCloud在Feign的基础上支持了Spring MVC 的注解。
  • Spring Cloud Netflix Zuul:API网关服务,过滤、安全、监控、限流、路由
  • Spring Cloud Gateway(可替代Zuul):Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0 和 Project Reactor等技术开发的网关,Spring Cloud Gateway 旨在为微服务架构提供一种简单而有效的统一的API路由管理方式,Spring Cloud Gateway 作为Spring Cloud 生态系统中的网关,目标是替代Netflix Zuul,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关的基本功能:安全、监控/埋点、和限流等
  • Spring Cloud Config:分布式配置中心。配置管理工具,支持使用Git存储配置内容,支持应用配置的外部化存储,支持客户端配置信息刷新、加解密配置内容等。
  • Spring Cloud Bus:事件、消息总线、用于在集群(例如:配置变化事件)中传播状态变化,可与SpringCloud Config联合实现热部署
  • Spring Cloud Stream:消息驱动微服务
  • Spring Cloud Sleuth:分布式服务跟踪
  • Spring Cloud Alibaba:阿里巴巴结合自身微服务实践,开源的微服务全家通。在Spring Cloud 项目中孵化,很可能称为Spring Cloud第二代的标准实现。

四、版本说明

1. 为什么Spring Cloud 版本用的是单词?

  这样设计是为了更好的管理每个Spring Cloud 子项目的清单,避免总版本号与子项目的版本号混淆。
在这里插入图片描述
注:但最近使用日期作为版本号了

2. Spring Cloud 版本定义规则及查看

  采用伦敦地铁站的名称作为版本号的命名,根据首字母排序,字母顺序靠后的版本号越大。

版本说明地址:官方地址,2021-05-13,获取信息如下:

{
	"git": {
		"branch": "f7b959c79f47ef21315779206514bf7f370c4148",
		"commit": {
			"id": "f7b959c",
			"time": "2021-05-11T11:54:31Z"
		}
	},
	"build": {
		"version": "0.0.1-SNAPSHOT",
		"artifact": "start-site",
		"versions": {
			"spring-boot": "2.4.5",
			"initializr": "0.11.0-SNAPSHOT"
		},
		"name": "start.spring.io website",
		"time": "2021-05-11T11:56:16.666Z",
		"group": "io.spring.start"
	},
	"bom-ranges": {
		"azure": {
			"2.2.4": "Spring Boot >=2.2.0.RELEASE and <2.3.0.M1",
			"3.2.0": "Spring Boot >=2.3.0.M1 and <2.4.0-M1",
			"3.4.0": "Spring Boot >=2.4.0.M1 and <2.5.0-M1"
		},
		"codecentric-spring-boot-admin": {
			"2.2.4": "Spring Boot >=2.2.0.RELEASE and <2.3.0.M1",
			"2.3.1": "Spring Boot >=2.3.0.M1 and <2.5.0-M1"
		},
		"solace-spring-boot": {
			"1.0.0": "Spring Boot >=2.2.0.RELEASE and <2.3.0.M1",
			"1.1.0": "Spring Boot >=2.3.0.M1 and <2.5.0-M1"
		},
		"solace-spring-cloud": {
			"1.0.0": "Spring Boot >=2.2.0.RELEASE and <2.3.0.M1",
			"1.1.1": "Spring Boot >=2.3.0.M1 and <2.4.0-M1",
			"2.0.0": "Spring Boot >=2.4.0.M1 and <2.5.0-M1"
		},
		"spring-cloud": {
			"Hoxton.SR11": "Spring Boot >=2.2.0.RELEASE and <2.3.11.BUILD-SNAPSHOT",
			"Hoxton.BUILD-SNAPSHOT": "Spring Boot >=2.3.11.BUILD-SNAPSHOT and <2.4.0.M1",
			"2020.0.0-M3": "Spring Boot >=2.4.0.M1 and <=2.4.0.M1",
			"2020.0.0-M4": "Spring Boot >=2.4.0.M2 and <=2.4.0-M3",
			"2020.0.0": "Spring Boot >=2.4.0.M4 and <=2.4.0",
			"2020.0.2": "Spring Boot >=2.4.1 and <2.5.0-M1",
			"2020.0.3-SNAPSHOT": "Spring Boot >=2.4.6-SNAPSHOT"
		},
		"spring-cloud-alibaba": {
			"2.2.1.RELEASE": "Spring Boot >=2.2.0.RELEASE and <2.3.0.M1"
		},
		"spring-cloud-gcp": {
			"2.0.0": "Spring Boot >=2.4.0-M1 and <2.5.0-M1"
		},
		"spring-cloud-services": {
			"2.2.6.RELEASE": "Spring Boot >=2.2.0.RELEASE and <2.3.0.RELEASE",
			"2.3.0.RELEASE": "Spring Boot >=2.3.0.RELEASE and <2.4.0-M1",
			"2.4.1": "Spring Boot >=2.4.0-M1 and <2.5.0-M1"
		},
		"spring-geode": {
			"1.2.12.RELEASE": "Spring Boot >=2.2.0.RELEASE and <2.3.0.M1",
			"1.3.10.RELEASE": "Spring Boot >=2.3.0.M1 and <2.4.0-M1",
			"1.4.5": "Spring Boot >=2.4.0-M1 and <2.5.0-M1",
			"1.5.0-RC1": "Spring Boot >=2.5.0-M1"
		},
		"vaadin": {
			"14.6.0": "Spring Boot >=2.1.0.RELEASE and <2.5.0-M1"
		},
		"wavefront": {
			"2.0.2": "Spring Boot >=2.1.0.RELEASE and <2.4.0-M1",
			"2.1.1": "Spring Boot >=2.4.0-M1 and <2.5.0-M1",
			"2.2.0-RC1": "Spring Boot >=2.5.0-M1"
		}
	},
	"dependency-ranges": {
		"native": {
			"0.9.0": "Spring Boot >=2.4.3 and <2.4.4",
			"0.9.1": "Spring Boot >=2.4.4 and <2.4.5",
			"0.9.2": "Spring Boot >=2.4.5 and <2.5.0-M1",
			"0.10.0-SNAPSHOT": "Spring Boot >=2.5.0-M1 and <2.6.0-M1"
		},
		"okta": {
			"1.4.0": "Spring Boot >=2.2.0.RELEASE and <2.4.0-M1",
			"1.5.1": "Spring Boot >=2.4.0-M1 and <2.4.1",
			"2.0.1": "Spring Boot >=2.4.1 and <2.5.0-M1"
		},
		"mybatis": {
			"2.1.4": "Spring Boot >=2.1.0.RELEASE and <2.5.0-M1"
		},
		"camel": {
			"3.3.0": "Spring Boot >=2.2.0.RELEASE and <2.3.0.M1",
			"3.5.0": "Spring Boot >=2.3.0.M1 and <2.4.0-M1",
			"3.9.0": "Spring Boot >=2.4.0.M1 and <2.5.0-M1"
		},
		"open-service-broker": {
			"3.1.1.RELEASE": "Spring Boot >=2.2.0.RELEASE and <2.3.0.M1",
			"3.2.0": "Spring Boot >=2.3.0.M1 and <2.4.0-M1",
			"3.3.0": "Spring Boot >=2.4.0-M1 and <2.5.0-M1"
		}
	}
}

说明:

版本号版本说明
BUILD-XXX开发版开发团队内部使用
M里程碑版MileStone,M1表示第1个里程碑版本
RC候选发布版Release Candidate,正式发布版本的前一个观察期,不添加新功能,主要着重于除错
SR正式发布版Service Release,SR1 表示第1个版本
GA稳定版General Availability 经过全面测试并可对外发行

重点:SpringCloud 与 SprngBoot 版本(这里只是给出大概,具体需要查看官网)

Spring CloudSpring Boot
Hoxton2.2.x, 2.3.x (Starting with SR5)
Greenwich2.1.x
Finchley2.0.x
Edgware1.5.x
Dalston1.5.x

3. Spring Cloud 子项目版本说明

在这里插入图片描述

  • 2:主版本号,当功能模块有较大更新或整体架构发生变化时,主版本号会更新
  • 1:次版本号,次版本表示只是局部的一些变动
  • 2:修改版本号,一般是bug的修复或者小的变动
  • RELEASE:希腊字母版本号,标注当前的软件处于哪个开发阶段

附:希腊字母版本说明

  • Base:设计阶段,只有相应的设计没有具体的功能实现
  • Alpha:软件的初级版本,存在较多的bug
  • Bate:表示相对Alpha有了很大的进步,消除了严重的bug,还存在一些潜在的bug
  • Gamma:是Bate版做过一些修改,称为正式发布的候选版本(Release Candidate)
  • Release:该版本表示最终版
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值