【Spring Cloud】Spring Cloud 概述
1. 熟悉微服务下图表⽰了服务架构从单体应⽤逐渐转变为微服务应⽤的过程
https://i-blog.csdnimg.cn/direct/a1bc5543b91f4515ab7294737e4154fa.png
1.1 单体架构
许多创业公司早期或者传统企业会把业务的所有功能实现都打包在⼀个项⽬, 这就是单体架构
业务的所有功能实现都打包在⼀个war包或者Jar包中, 这种⽅式就称为单体架构
⽐如Spring课程中的博客系统,前端+后端+数据库实现, 都在⼀个项⽬中, 这种架构就称为单体架构
以⼤家都很熟悉的电商系统为例, 电商系统包罗: ⽤⼾管理, 商品管理, 订单管理, ⽀付管理, 库存管理, 物流管理等等, 项⽬早期我们会把这些模块都写在⼀个web项⽬中, 然后统⼀部署到⼀个Web服务器中
https://i-blog.csdnimg.cn/direct/a4be30dec42041ceae4a35f7aeb7b4fb.png
这种架构开辟简朴, 部署简朴, ⼀个项⽬就包罗了所有的功能, 省去了多个项⽬之间的交互和调⽤斲丧.直接部署在⼀个服务器即可
1.2 集群和分布式架构
当⽹站的⽤⼾量越来越⼤, 需求也会越来越多, 流量也会越来越⼤, 服务可能就会⾯临以下题目:
[*]后端服务器的压⼒就会越来越⼤, 负载越来越⾼, 甚⾄出现⽆法访问的情况
[*]业务场景逐渐复杂. 为了满⾜⽤⼾的需求, 单体应⽤也会越来越⼤. 各个业务代码之间的耦合度也会越来越⾼. 任何⼀个题目, 都需要整个项⽬重新构建, 发布
[*]⼀个微⼩的题目, 可能会导致整个应⽤挂掉
我们从两个⽅⾯进⾏优化:
[*]横向: 添加服务器, 把单台机器变成多台机器的集群.
[*]纵向: 把⼀个应⽤, 按照业务进⾏拆分, 拆分为多个项⽬. 此架构也称为垂直架构.
https://i-blog.csdnimg.cn/direct/2b77dc93d943452bb9eaf56caad56209.png
以单体结构规模的项⽬为单元进⾏垂直分别. 也就是将⼀个⼤项⽬拆分成⼀个⼀个单体结构项⽬. 项⽬和项⽬之间相对⽐较独⽴, 接⼝多为数据同步功能
集群和分布式
[*] 集群(cluster)是将⼀个系统完备的部署到多个服务器上, 每个服务器都能提供系统的所有服务, 多个服务器通过负载均衡调理完成任务. 每个服务器称为集群的节点(node)
[*] 分布式是将⼀个系统拆分为多个⼦系统,多个⼦系统部署在多个服务器上,多个服务器上的⼦系统协同合作完成⼀个特定任务.
https://i-blog.csdnimg.cn/direct/c6a730192fee4d75a66fe4fdacb78c2c.png
集群和分布式区别和联系
[*]从概念上. 集群是多个盘算机做同样的事, 分布式是多个盘算机做差别的事
[*]从功能上. 集群的每⼀个节点功能是雷同的, 并且可以替换的. 分布式也是多个节点组成的系统, 但是每个节点完成的业务是差别的, ⼀个节点出现题目, 这个业务就不可访问了.
[*]从关系上. 分布式和集群在实践中, 许多时候是互相配合使⽤的. ⽐如分布式的某⼀个节点, 可能由⼀个集群来代替. 分布式架构⼤多是建⽴在集群上的. 所以实际的分布式架构计划中并不会把分布式和集群单独区分, ⽽是统称: 分布式架构.
1.3 微服务架构
从上图中可以看出, 按照业务进⾏拆分后, 会有⼀些重复的功能开辟, ⽐如订单系统, 电商平台和⽀付系统都会涉及.
在分布式架构下, 当部署的服务越来越多, 重复的代码就会越来越多, 服务的调⽤关系也会越来越复杂.我们可以把⼀些通⽤的, 会被多个上层服务调⽤的共享业务, 提取成独⽴的基础服务, 组成⼀个个微⼩的服务. 这就是微服务.
https://i-blog.csdnimg.cn/direct/e41a93a957e24c9a8ddb6430a74ebe52.png
简朴来说, 微服务就是很⼩的服务. ⼩到⼀个服务只对应⼀个单⼀的功能, 只做⼀件事. 这个服务可以单独部署运⾏
微服务之间可以采⽤REST和RPC协议进⾏通信.
从这个⻆度来看, 微服务架构是分布式架构的⼀种拓展, 这种架构模式下它拆分粒度更⼩, 服务更独⽴.可以理解为: 微服务是⼀种经过良好架构计划的分布式架构⽅案.
分布式架构&微服务架构
分布式: 服务拆分, 拆了就⾏.
微服务: 指⾮常微⼩的服务, 更细粒度的垂直拆分, 通常指不能再拆的服务
分布式架构偏重于压⼒的分散, 夸大的是服务的分散化. 微服务偏重于能⼒的分散, 更夸大服务的专业化和精细分⼯. 从实践的⻆度来看, 微服务架构通常是分布式服务架构, 反之则未必成⽴. 所以, 选择微服务通常意味着需要办理分布式架构的各种困难
1.4 微服务带来的挑战
随着产品的复杂性和流量的增长, 技术架构也在不断的发⽣变化. 岂论是早期的单体架构, 照旧现在⼴泛使⽤的微服务架构, 都是为了更好的服务产品, 办理题目
微服务架构带来好处的同时, 也⾯临着⼀些挑战, 从单体服务转向微服务意味着管理更加复杂. 接下来我们从优势和挑战两个⽅⾯分析⼀下微服务架构.
优势
[*]易开辟和维护. 每个微服务负责的业务⽐较清晰, 体量⼩, 开辟和维护本钱降低
[*]容错性⾼. ⼀个服务发⽣故障, 可以使故障隔离在单个服务中, 不影响团体服务故障
[*]扩展性好. 每个服务都是独⽴运⾏的, 我们可以结合项⽬实际情况进⾏扩展, 按需伸缩
[*]技术选型灵活. 每个微服务都是单独的团队来运维, 可以根据业务特点和团队特点, 选择适合的技术栈
挑战
虽然微服务具备许多的优势, 但由于服务数的增长, 服务治理也是我们⾯临的巨⼤挑战.
[*]服务依赖. 随着服务的数目增多, 服务之间的关系也会变得更加复杂. ⼀个服务的更改, 需要考虑对其他服务的影响.
[*]运维本钱. ⼀个业务流程会涉及多个微服务共同完成, 有更多的服务需要编译, 部署, 运⾏, 甚⾄可能是差别的编程语⾔, 差别的运⾏环境, 固然也需要集群来处置惩罚故障转移等. 这对于运维⼈员⽽⾔, 挑战是巨⼤的.
[*]开辟和测试. ⼀个业务流程可能涉及多个微服务共同完成, 服务调⽤引⼊⽹络延迟, 不可靠的⽹络, 如何进⾏容错处置惩罚等题目. 这对开辟和测试⽽⾔, 难度也会提升
[*]服务监控. 在⼀个单体结构中, 很容易实现服务的监控. 因为所有功能都在⼀个服务中, 微服务架构下, 不仅需要对整个链路进⾏监控, 还需要对每⼀个服务实现监控.
[*]负载均衡. 微服务架构中的服务实例数目可能⾮常庞⼤,因此需要有用的服务发现和负载均衡机制来管理请求流量和包管⾼可⽤性
https://i-blog.csdnimg.cn/direct/8bf66fde5d1841b3a701d80a2d19ef4b.png
选择微服务架构的话, 以上这些题目都需要我们办理, 我们是⾃⼰研发照旧选择市场上⽐较成熟的技术拿来⽤呢?
全球的互联⽹公司都在积极实验⾃⼰的微服务落地⽅案. 在Java领域, 最引⼈注⽬的就是Spring Cloud了
2. 微服务办理⽅案- Spring Cloud
2.1 什么是Spring Cloud
Spring Cloud 提供了⼀些可以让开辟⼈员快速构建分布式服务的⼯具, ⽐如设置管理, 服务发现, 熔断,智能路由等. 他们可以在任何分布式环境中很好的⼯作.
简朴来说, Spring Cloud 就是分布式微服务架构的⼀站式办理⽅案, 是微服务架构落地的多种技术的集合
⽐如:
[*]Distributed/versioned configuration 分布式版本设置
[*]Service registration and discovery 服务注册和发现
[*]Routing 路由
[*]Service-to-service calls 服务调⽤
[*]Load balancing 负载均衡
[*]Circuit Breakers 断路器
[*]Distributed messaging 分布式消息
Spring Cloud 并不是Spring 团队研发的框架, 它只是把⼀些⽐较优秀的办理微服务架构中常⻅题目的开源框架基于SpringCloud规范进⾏了整合, 并基于SpringBoot的⻛格,对这些组件进⾏封装, 屏蔽掉了复杂的设置和实现原理. 为开辟者提供了开箱即⽤的微服务开辟体验.
这些开源技术的框架是由各个公司来维护的. Spring Cloud 就是这些微服务的⼤管家.
2.2 Spring Cloud版本
Spring Cloud 是⼀个由许多⼦项⽬组成的庞⼤项⽬, 这些⼦项⽬由各个公司来维护的, 所以发布阶段也是差别的.
为了管理主项⽬和⼦项⽬的依赖关系, 以及为了避免和⼦项⽬版本的冲突, 主项⽬版本定名并没有采⽤和⼦项⽬数字版本化的形式, ⽽是采⽤了英⽂名称
这个英⽂版本名称也⽐较风趣, Spring Cloud 采⽤了英国伦敦地铁站的名称来定名,并由地铁站名称字⺟A-Z依次类推的形式来发布迭代版本
https://i-blog.csdnimg.cn/direct/27c048e08dde4d80b7acaea4972fcc2a.png
但英⽂版本号太复杂了, 从 Hoxton 版本之后, Spring Cloud的版本就变成了2020.0.0 这样的⽇期版本号了
https://i-blog.csdnimg.cn/direct/5c390d80935545cfbe82fe7be30eff8d.png
Spring Cloud和SpringBoot的关系
Spring Cloud中的所有⼦项⽬都依赖SpringBoot, 所以SpringBoot 和Spring Cloud的版本之间也存在⼀定的对应关系
https://i-blog.csdnimg.cn/direct/4d40892d547f4029a062fae19793ec32.png
⽐如SpringBoot 3.2.X对应的SpringCloud版本是2023.0.X
如果我们有⼀个SpringBoot项⽬, 我们希望在这个项⽬中添加SpringCloud的⼀些组件, 需要根据当前项⽬的SpringBoot版本, 选择SpringCloud的版本(固然, 新项⽬不存在这个题目)
2.3 Spring Cloud实现⽅案
在Spring Cloud的规范下, 有许多实现, 其中最为着名的是
[*]Spring Cloud Netflix
[*]Spring Cloud Alibaba
Spring Cloud Netflix
Spring Cloud Netflix是 Netflix OSS(Netflix Open Source Software)在Spring Cloud规范下的实现
包罗的组件及其主要功能⼤致如下:
[*]Eureka: 服务注册和发现
[*]Zuul: 服务⽹关
[*]Ribbon: 负载均衡
[*]Feign: 服务调⽤组件
[*]Hystrix: 断路器, 提供服务熔断和限流
[*]Hystrix Dashboard: 监控⾯板
[*]…
在很⻓的⼀段时间⾥, Spring Cloud ⼀度被泛指 Spring Cloud Netflix. Spring Cloud⼀直以来把Netflix OSS 套件作为其官⽅默认的⼀站式办理⽅案. 然⽽, Netflix公司在2018年前后宣布其核⼼组件Hystrix、Ribbon、Zuul等均进⼊维护状态, Spring Cloud 也被迫宣布删除这些维护模块
spring-cloud-netflix 并没有从Spring Cloud的依赖中完全删除, 只是从2020.0版本起, 他只管理Eureka.
Spring Cloud Netflix 在许多公司都有⼤规模使⽤, ⼀旦停⽌更新, 短期看影响不⼤, 但⻓期显然是不符合的, Spring Cloud官⽅也提供了⼀些替换发起
https://i-blog.csdnimg.cn/direct/b4c30f2c38f0493897f67534452da12d.png
Spring Cloud Alibaba
Spring Cloud Alibaba 是阿⾥巴巴集团下的开源组件和云产品在Spring Cloud规范下的实现.
虽然Spring Cloud Alibaba⽬前并不是Spring Cloud官⽅保举的默认⽅案, 但是Spring Cloud Alibaba是阿⾥中间件团队主导的⼀个新⽣项⽬,正处于⾼速迭代中. 甚⾄在Alibaba的开源组件还没有织⼊SpringCloud⽣态之前, 就已经在各⼤公司⼴泛使⽤了.
如果说Spring Cloud Netflix 是 Spring Cloud 的第⼀代实现, 那么Spring Cloud Alibaba 也可以看做是Spring Cloud 的第⼆代实现, 主要由 Nacos、Sentinel、Seata 等组件组成
https://i-blog.csdnimg.cn/direct/e921bb826382470293e8f9c0c17a0173.png
Spring Cloud Alibaba 吸取了 Spring Cloud Netflix 微服务框架的核⼼架构头脑, 并进⾏了⾼性能改进. ⾃ Spring Cloud Netflix 进⼊停更维护后, Spring Cloud Alibaba 逐渐代替它成为主流的微服务框架
Spring Cloud 实现对⽐
https://i-blog.csdnimg.cn/direct/81c519b6ab0443dcaa8a6ad5fc1fdbb3.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]