【SpringCloud】Spring Cloud基本介绍

目录

  • 回顾
    • 架构分类
      • 单体架构
      • 分布式架构
      • 微服务架构
        • 什么是微服务
        • 优点
        • 缺点
        • 微服务的架构特征:
        • 微服务架构面临的挑战
        • 技术挑战
        • 微服架构的设计原则
        • 微服务概念
          • 提供者(Provider)
          • 消费者(Consumer)
          • RPC和Restful
          • 集群
          • 分布式
      • 总结
    • 服务拆分和远程调用
      • 服务拆分原则
      • 服务拆分示例
    • 思考
      • 主流的微服务框架
      • Spring Cloud Netflix概述
      • Netflix OSS
        • Netflix OSS
        • 毕马威:颠覆性公司和商业模式报告
        • Netflix是什么,与Spring Cloud有什么关系
        • Netflix OSS的开源组件
          • Eureka:服务注册和发现
          • Zuul:网关
          • Ribbon,即负载均衡
          • Feign,服务客户端
          • Hystrix,监控和断路器
          • Turbine,监控聚合
  • Spring Cloud
    • Spring Cloud简介
    • Spring Cloud特征
    • 版本
      • 版本依赖关系
    • Spring Cloud 规范下的实现
    • 本教程中选用的组件

回顾

架构分类

在这里插入图片描述

单体架构

  • 单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。

  • 优点:

    • 架构简单
    • 部署成本低
  • 缺点:

    • 耦合度高(维护困难、升级困难)
      在这里插入图片描述

分布式架构

  • 分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。

  • 优点:

    • 降低服务耦合
    • 有利于服务升级和拓展
  • 缺点:

    • 服务调用关系错综复杂
      在这里插入图片描述
  • 分布式架构虽然降低了服务耦合,但是服务拆分时也有很多问题需要思考:

    • 服务拆分的粒度如何界定?
    • 服务之间如何调用?
    • 服务的调用关系如何管理?

人们需要制定一套行之有效的标准来约束分布式架构。

微服务架构

在这里插入图片描述

什么是微服务
  • 微服务的概念源于2014年3月Martin Fowler(马丁·福勒)所写的一篇文章:https://martinfowler.com/microservices。
  • 微服务架构风格是一种将一个单体应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常是基于HTTP协议的RESTful API)。这些服务围绕业务能力构建,并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术。
优点
  • 逻辑清晰,项目复杂度降低:通过对共享业务更加细粒度的拆分,一个服务只需要关注一个特定的业务领域,并通过定义良好的接口清晰表述服务边界。由于体积小、复杂度低,开发、维护会更加简单;
  • 技术选型更加灵活:每个微服务都有不同的团队来维护,所以可以结合业务特性自由选择技术栈;
  • 可扩展性更强:可以根据每个微服务的性能要求和业务特点对服务进行灵活扩展;
  • 独立部署:单个微服务的代码量比较小,使得发布更加高效;
  • 容错性:如果某一个服务发生故障,可以通过重试、降级等机制实现容错;
缺点
  • 性能降低,微服务的间通过REST、RPC等形式进行交互,通信的延时会受到较大的影响;
  • 提升了运维的难度(版本发布、问题排查、配置管理、监控);
  • 数据一致性的问题;
微服务的架构特征:
  • 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责
  • 自治:团队独立、技术独立、数据独立,独立部署和交付
  • 面向服务:服务提供统一标准的接口,与语言和技术无关
  • 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

微服务的上述特性其实是在给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。

因此,可以认为微服务是一种经过良好架构设计的分布式架构方案 。

微服务架构面临的挑战
  • 微服务粒度大小难以划分,需要设计人员对业务有很好的掌握;
  • 分布式复杂性,主要体现在分布式事务、网络延迟、系统容错等问题解决难度较大;
  • 微服务之间通信成本较高,对微服务之间网络稳定性、通信速度要求较高;
  • 由于微服务数量较大,运维人员运维、部署有较大的挑战
技术挑战
  • 微服务架构的主要目的是实现业务服务的解耦;
  • 对服务进行治理(服务的注册与发现、服务与服务之间的调用、熔断限流、负载均衡、链路追踪、分布式配置中心、服务路由等);
微服架构的设计原则

在这里插入图片描述

微服务概念
提供者(Provider)
  • 提供接口供其他项目调用的项目
消费者(Consumer)
  • 调用提供者接口的项目
    在这里插入图片描述
RPC和Restful
  • RPC:RPC远程过程调用(Remote Procedure Call)的缩写形式,主要是基于TCP/IP协议的。
  • Restful:Restful是一种网络应用程序的设计风格和开发方式,基于HTTP协议,可以使用XML格式定义或JSON格式定义。
集群
  • 集群就是单机的多实例,在多个服务器上部署多个服务,每个服务就是一个节点,部署N个节点,处理业务的能力就提升 N倍(大约),这些节点的集合就叫做集群。
分布式
  • 分布式结构就是将一个完整的系统,按照业务功能,拆分成一个个独立的子系统,在分布式结构中,每个子系统就被称为“服务”。这些子系统能够独立运行在web容器中,它们之间通过RPC或Restful方式通信。

总结

  • 单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统
  • 分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝
  • 微服务:一种良好的分布式架构方案
    • 优点:拆分粒度更小、服务更独立、耦合度更低
    • 缺点:架构非常复杂,运维、监控、部署难度提高
  • SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件

服务拆分和远程调用

  • 何分布式架构都离不开服务的拆分,微服务也是一样。

服务拆分原则

  • 不同微服务,不要重复开发相同业务
  • 微服务数据独立,不要访问其它微服务的数据库
  • 微服务可以将自己的业务暴露为接口,供其它微服务调用
    在这里插入图片描述

服务拆分示例

cloud-demo:父工程,管理依赖

  • order-service:订单微服务,负责订单相关业务
  • user-service:用户微服务,负责用户相关业务

说明:

  • 订单微服务和用户微服务都必须有各自的数据库,相互独立
  • 订单服务和用户服务都对外暴露Restful的接口
  • 订单服务如果需要查询用户信息,只能调用用户服务的Restful接口,不能查询用户数据库

思考

方案该怎么落地?选用什么样的技术栈?全球的互联网公司都在积极尝试自己的微服务落地方案。
其中在Java领域最引人注目的就是SpringCloud提供的方案了。

主流的微服务框架

框架名称说明
MotanMotan(茅台)是新浪微博开源的RPC框架,官网:github.com/weibocom/motan
JSF JSF(京服)是京东的微服务组件。
MSEC毫秒服务引擎(MSEC, Mass Service Engine in Cluster)是腾讯的一个开源框架,适用于在廉价机器组成的集群上开发和运营分布式后台服务。该项目集RPC、名字发现服务、负载均衡、业务监控、灰度发布、容量管理、日志管理、key-value存储于一体,目的是提高开发与运营的效率和质量。
Dubbo阿里巴巴开源的RPC框架,后来加入Apache孵化器并成功毕业。新的名字为Apache Dubbo。
DubboX当当网基于Dubbo开源的PRC框架,后来并入Apache Dubbo。
Netflix OSSNetflix OSS是由Netflix公司开发的一套代码框架,用于解决分布式系统的问题,如:服务注册与发现、负载均衡、熔断降级、限流、网关等。
Spring CloudSpring Cloud是基于Spring Boot的一整套实现微服务的框架。他提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。
Spring Cloud NetflixSpring Cloud Netflix是Spring Boot和Netflix OSS在Spring Cloud规范下的集成。由Netflix开发后来又并入Spring Cloud大家庭,它主要提供的模块包括:服务发现、断路器和监控、智能路由、客户端负载均衡等。
Spring Cloud AlibabaSpring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合。Spring Cloud Alibaba 正式入驻Spring Cloud 官方孵化器,并顺利毕业。
Spring Cloud 生态下中微服务整理Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
主流的微服务治理方案:Spring Cloud Netflix和Spring Cloud Alibaba

Spring Cloud Netflix概述

  • Spring Cloud Netflix诞生的三个原因

    • Spring家族中的大部分项目都是客户端项目,缺少服务端项目和分布式项目的经验;
    • Netflix开源其分布式领域的中间件,叫做Netflix OSS;
    • Dubbo的出现,让Spring母公司(Privotal)感受到了威胁,它需要保持或增值自身价值。
  • Spring母公司缺少分布式项目的经验,而Netflix OSS的开源组件正好涉及分布式领域的核心功能,双方一拍即合,合作诞生的Spring Cloud Netflix项目用于为快速构建分布式系统提供统一的开发模式。

  • Spring Cloud Netflix是Spring Boot和Netflix OSS在Spring Cloud规范下的集成。其中,Netflix OSS是由Netflix公司开发的一套开源框架和组件库。

Netflix OSS

Netflix OSS
  • Netflix OSS(Netflix Open Source Software)即Netflix开源软件。
  • Netflix由于做视频的原因,访问量非常的大,从而促使其技术快速的发展在背后支撑着,也正是如此,Netflix开始把整体的系统往微服务上迁移。
  • Netflix毫无保留的把一整套微服务架构核心技术栈开源了出来,叫做Netflix OSS,依靠开源社区的力量不断的壮大。
毕马威:颠覆性公司和商业模式报告
  • 报告显示Amazon、Apple、Alibaba、Airbnb、Netflix、Google、DJI、Microsoft、Facebook、Baidu、Tencent等公司是最具颠覆性的公司
  • 其中Netflix和阿里巴巴分别为第3位和第5位,他们都是对Spring Cloud做出巨大贡献的公司
Netflix是什么,与Spring Cloud有什么关系
  • 首先,Netflix是一家做视频的网站,可以这么说该网站上的美剧应该是最火的
  • Netflix由于做视频的原因,访问量非常的大,从而促使其技术快速的发展在背后支撑着,也正是如此,Netflix开始把整体的系统往微服务上迁移。
  • Netflix的微服务做的不是最早的,但是确是最大规模的在生产级别微服务的尝试。也正是这种大规模的生产级别尝试,在服务器运维上依托AWS云。当然AWS云同样受益于Netflix的大规模业务不断的壮大。[(AWS)Amazon Web Services(亚马逊网络服务)]
  • Netflix的微服务大规模的应用,在技术上毫无保留的把一整套微服务架构核心技术栈开源了出来,叫做Netflix OSS,也正是如此,在技术上依靠开源社区的力量不断的壮大。
  • Spring Cloud是构建微服务的核心,而Spring Cloud是基于Spring Boot来开发的
  • Pivotal在Netflix开源的一整套核心技术产品线的同时,做了一系列的封装,就变成了Spring Cloud;虽然Spring Cloud到现在为止不只有Netflix提供的方案可以集成,还有很多方案,但Netflix是最成熟的。
Netflix OSS的开源组件
Eureka:服务注册和发现
  • 它提供了一个服务注册中心、服务发现的客户端,还有一个方便的查看所有注册的服务的界面。 所有的服务使用Eureka的服务发现客户端来将自己注册到Eureka的服务器上。
Zuul:网关
  • 所有的客户端请求通过这个网关访问后台的服务。他可以使用一定的路由配置来判断某一个URL由哪个服务来处理。并从Eureka获取注册的服务来转发请求
Ribbon,即负载均衡
  • Zuul网关将一个请求发送给某一个服务的应用的时候,如果一个服务启动了多个实例,就会通过Ribbon来通过一定的负载均衡策略来发送给某一个服务实例。
Feign,服务客户端
  • 服务之间如果需要相互访问,可以使用RestTemplate,也可以使用Feign客户端访问。它默认会使用Ribbon来实现负载均衡。
Hystrix,监控和断路器
  • 我们只需要在服务接口上添加Hystrix标签,就可以实现对这个接口的监控和断路器功能。Hystrix Dashboard,监控面板,他提供了一个界面,可以监控各个服务上的服务调用所消耗的时间等。
Turbine,监控聚合
  • 使用Hystrix监控,我们需要打开每一个服务实例的监控信息来查看。而Turbine可以帮助我们把所有的服务实例的监控信息聚合到一个地方统一查看。这样就不需要挨个打开一个个的页面一个个查看。

Spring Cloud

Spring Cloud简介

  • Spring Cloud是基于Spring Boot的一整套实现微服务的框架。
  • 他提供了微服务开发所需的配置管理、服务注册与发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。
  • 最重要的是跟Spring Boot框架一起使用的话,会让你非常方便开发微服务架构的服务。
  • 官网:https://spring.io/projects/spring-cloud/

Spring Cloud特征

  • 分布式/版本化配置
  • 服务注册和发现
  • 路由
  • 服务与服务之间的请求调用
  • 负载均衡
  • 断路器
  • 全局锁
  • 领导选举和集群状态
  • 分布式消息传递

版本

名称描述
SNAPSHOT代表快照,也就是未完成的意思
GA代表稳定版
RELEASE发行版,没有太多问题
SR正式发布版
PRE(M1、M2)里程碑版,主要是修复了一些BUG的版本,一个GA后通常有多个里程碑版
BUILD-XXX开发版,开发团队内部使用,不是很稳定
  • 本教程使用版本:Spring Cloud Hoxton.SR12

版本依赖关系

Spring Cloud所有的子项目都依赖Spring Boot框架,所以Spring Boot框架的版本号和Spring Cloud的版本号之间也存在依赖及兼容的关系,如下图所示:
在这里插入图片描述

Spring Cloud 规范下的实现

  • 在Spring Cloud这个规范下,有很多实现,比如:Spring-Cloud-Bus、Spring-Cloud-Gateway、Spring-Cloud-Netflix等等。
  • 在这些实现中,绝大部分组件都使用“别人已经造好的轮子”,然后基于Spring Cloud规范进行整合,使用者只需要使用非常简单的配置即可完成微服务架构下复杂的需求。
  • 这也是Spring 团队最厉害的地方,他们很少重复造轮子,最早的Spring 框架,它只提供了IOC和AOP两个核心功能,对于ORM、MVC等其他功能,Spring都提供了非常好的兼容性,比如:Hibernate、MyBatis、Spring MVC、Strus2。
  • 只有在别人提供的东西不够好的情况下,Spring团队才会考虑自己研发。比如Strus2经常有安全漏洞,所以Spring团队自己研发了Spring MVC框架。再比如Spring-Cloud-Netflix中的Zuul网关,因为性能及版本迭代较慢,所以Spring团队孵化了一个Spring Cloud Gateway来取代Zuul。
  • Spring团队一直在不断地为开发者解决一些技术复杂度高的问题,使开发者能够更高效地专注于业务开发的工作。从Spring到Spring Boot,再到Spring Cloud,都是如此。

本教程中选用的组件

体系组件名称作用定位
Eureka注册中心,提供服务注册与发现服务
Open Feign请求客户端,简化微服务之间请求调用
Hystrix容错处理
Ribbon为微服务提供负载均衡
Gateway网关,提供服务转发与校验服务
Config分布式配置,提供统一配置服务
Sleuth服务追踪,提供微服链路追踪服务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/15124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

http项目改为/支持https的方案、无需修改后台代码

背景描述:原来的项目前后台都是http,现在某个服务要求前台必须使用https; 方案1:前台部署在https里,后面代码修改;但是微服务架构,后台工作量太大; 方案2:前台部署在ht…

Pytorch-08 实战:手写数字识别

手写数字识别项目在机器学习中经常被用作入门练习,因为它相对简单,但又涵盖了许多基本的概念。这个项目可以视为机器学习中的 “Hello World”,因为它涉及到数据收集、特征提取、模型选择、训练和评估等机器学习中的基本步骤,所以…

vue 打印、自定义打印、页面打印、隐藏页眉页脚

花了一天时间搞了个打印功能,现则将整体实现过程进行整理分享。先来看看效果图: 1、页面展示为: 2、重组页面打印格式为:这里重组页面的原因是客户要求为一行两列打印 !内容过于多的行则独占一行显示完整。 整体实现&…

区块链论文总结速读--CCF A会议 USENIX Security 2024 共7篇 附pdf下载

Conference:33rd USENIX Security Symposium CCF level:CCF A Categories:网络与信息安全 Year:2024 Num:7 1 Title: Practical Security Analysis of Zero-Knowledge Proof Circuits 零知识证明电路的实用安全…

hbase版本从1.2升级到2.1 spark读取hive数据写入hbase 批量写入类不存在问题

在hbase1.2版本中&#xff0c;pom.xml中引入hbase-server1.2…0和hbase-client1.2.0就已经可以有如下图的类。但是在hbase2.1.0版本中增加这两个不行。hbase-server2.1.0中没有mapred包&#xff0c;同时mapreduce下就2个类。版本已经不支持。 <dependency><groupId>…

安全访问python字典:避免空键错误的艺术

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、直接访问字典键的问题 三、使用get方法安全访问字典键 四、get方法的实际应…

Could not create connection to database server的错误原因

1、使用MyBatis 连接数据库报错 org.apache.ibatis.exceptions.PersistenceException: ### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. ### The error may …

用队列实现栈,用栈实现队列

有两个地方会讨论到栈&#xff0c;一个是程序运行的栈空间&#xff0c;一个是数据结构中的栈&#xff0c;本文中讨论的是后者。 栈是一个先入后出&#xff0c;后入先出的数据结构&#xff0c;只能操作栈顶。栈有两个操作&#xff0c;push 和 pop&#xff0c;push 是向将数据压…

电脑如何远程监控?如何远程监控电脑屏幕?

远程监控是指通过网络技术和远程视频传输技术&#xff0c;实现对某一特定区域、设备或场景进行远程实时监测、管理、控制的一种技术手段。 它将视频传输、图像采集、数据存储和远程操作等多种技术相结合&#xff0c;能够在任意时间、任意地点实现对被监测对象的远程监控。 远程…

IO模型:同步阻塞、同步非阻塞、同步多路复用、异步非阻塞

目录 stream和channel对比 同步、异步、阻塞、非阻塞 线程读取数据的过程 同步阻塞IO 同步非阻塞IO 同步IO多路复用 异步IO 优缺点对比 stream和channel对比 stream不会自动缓冲数据&#xff0c;channel会利用系统提供的发送缓冲区、接收缓冲区。stream仅支持阻塞API&am…

轻松拿捏C语言——【字符函数】字符分类函数、字符转换函数

&#x1f970;欢迎关注 轻松拿捏C语言系列&#xff0c;来和 小哇 一起进步&#xff01;✊ &#x1f308;感谢大家的阅读、点赞、收藏和关注&#x1f495; &#x1f339;如有问题&#xff0c;欢迎指正 感谢 目录&#x1f451; 一、字符分类函数&#x1f319; 二、字符转换函数…

hive3从入门到精通(二)

第15章:Hive SQL Join连接操作 15-1.Hive Join语法规则 join分类 在Hive中&#xff0c;当下版本3.1.2总共支持6种join语法。分别是&#xff1a; inner join&#xff08;内连接&#xff09;left join&#xff08;左连接&#xff09;right join&#xff08;右连接&#xff09;…

力扣HOT100 - 136. 只出现一次的数字

解题思路&#xff1a; class Solution {public int singleNumber(int[] nums) {int single 0;for (int num : nums) {single ^ num;}return single;} }

基于卷积神经网络的交通标志识别(pytorch,opencv,yolov5)

文章目录 数据集介绍&#xff1a;resnet18模型代码加载数据集&#xff08;Dataset与Dataloader&#xff09;模型训练训练准确率及损失函数&#xff1a;resnet18交通标志分类源码yolov5检测与识别&#xff08;交通标志&#xff09; 本文共包含两部分&#xff0c; 第一部分是用re…

C++学习笔记(21)——继承

目录 1. 继承的概念及定义1.1 继承的概念1.2 继承定义1.2.1 定义格式1.2.2 继承关系和访问限定符1.2.3 继承基类成员访问方式的变化 继承的概念总结&#xff1a; 2. 基类和派生类对象赋值转换3.继承中的作用域4.派生类的默认成员函数知识点&#xff1a;派生类中6个默认成员函数…

win11 wsl ubuntu24.04

win11 wsl ubuntu24.04 一&#xff1a;开启Hyper-V二&#xff1a;安装wsl三&#xff1a;安装ubuntu24.04三&#xff1a;桥接模式&#xff0c;固定IP四&#xff1a;U盘使用五&#xff1a;wsl 从c盘迁移到其它盘参考资料 一&#xff1a;开启Hyper-V win11家庭版开启hyper-v 桌面…

Pytorch-01 框架简介

智能框架概述 人工智能框架是一种软件工具&#xff0c;用于帮助开发人员构建和训练人工智能模型。这些框架提供了各种功能&#xff0c;如定义神经网络结构、优化算法、自动求导等&#xff0c;使得开发人员可以更轻松地实现各种人工智能任务。通过使用人工智能框架&#xff0c;…

虚拟机使用的是此版本 VMware Workstation 不支持的硬件版本。 模块“Upgrade”启动失败。 未能启动虚拟机。

问题&#xff1a; 虚拟机使用的是此版本 VMware Workstation 不支持的硬件版本。 模块“Upgrade”启动失败。 未能启动虚拟机。 分析&#xff1a; 该虚拟机环境之前使用的VMware版本与你所使用的VMware版本不一致。大概率你使用的是刚从别人电脑里拷过来的虚拟机环境。 解决&…

游戏后台开发技术全面解析

在这个数字时代&#xff0c;游戏产业已经成为全球最受欢迎的娱乐方式之一。从简单的手机游戏到复杂的大型多人在线角色扮演游戏&#xff08;MMORPG&#xff09;&#xff0c;游戏的世界正变得越来越丰富和多样化。而这一切的背后&#xff0c;都离不开强大的游戏后台技术支持。在…

Java重写

方法重写的意义 在java中&#xff0c;子类可以继承父类中的方法&#xff0c;而不需要重新编写相同的方法&#xff0c;但是有时子类并不想原封不动的继承父类方法&#xff0c;需要做一定的修改&#xff0c;这时候就需要使用方法重写 方法重写的定义 在继承的前提下 子类可以根据…