探索云原生世界:Spring Cloud全方位解读——构建微服务架构的利器

 目录

一、微服务简介

二、微服务发展史

三、Spring Cloud

        3.1 Spring Cloud 版本策略

        3.2 Spring Cloud 发展历程

        微服务是一种软件架构风格,将单一应用程序拆分成一组小型、独立的服务。每个服务运行在自己的进程中,服务之间采用轻量级通信机制进行交互。今天就来带大家全方位的窥探下微服务以及其实现方案 Spring Cloud。

一、微服务简介

        微服务的体系非常庞大,框架组件多,微服务的部分学习路径如下图,主要包括三大功能和两大特性。

        三大功能指微服务核心组件的功能维度,由浅入深层次递进;两大特性是构建在每个服务组件之上的高可用和高可扩展性。

        从功能维度讲,服务间的通信是最基础的功能特性,当构建其服务通信能力之后,接下来就要考虑服务容错能力,提高服务调用的稳定性。在这之后,就可以从全局的角度构建一些分布式特性。

        除了功能特性,还会从高可用性和高可扩展性两个维度来做扩展。

        高可用性是系统设计首要考虑的目标,保障高可用性有两个方向,分别是:

  1. 避免单点故障:在做系统架构时,不能信任任何服务,服务器都有可能挂掉。如果某一个服务只有一台机器,那就会形成单点,一旦这个服务器挂掉,那整个服务都不可用,这时不能接受的。
  2. 故障机器状态恢复:尽快将故障机器恢复到故障前的状态。对于向 Nacos 这类中心化注册中心来说,因故障而下线的机器在重新上线后,应该有能力从某个地方获取故障发生前的服务注册列表。

二、微服务发展史

        要想很好的了解一个事物,就需要先了解它的发展历史,这样才能知道来龙去脉,才能把握未来,学习微服务也是一样的道理。

        微服务是由单体应用发展而来的,单体应用将所有的功能都维护在一个巨无霸的服务中,然后打包成一个 war 包扔到 Tomcat 中运行,对外提供服务。单体应用存在很多问题,比如:

  • 开发中互相干扰
  • 沟通成本高
  • 无法快速迭代
  • 无法单独回滚等

        由于单体服务存在很多问题,计算机中的分治思想就产生了作用,将单体应用拆分成比较小的服务,分开维护。

        微服务架构是在 SOA (面向服务架构)之上的进一步发展。在实践中,通过领域建模理论将一个大型应用拆分成更细粒度且边界清晰的服务模块,而且每个服务可以单独部署、单独测试、单独发布回滚,并借助 Docker 和 CI/CD (持续集成)完成快速上线。

        每个微服务拥有独立的代码库和数据库,采用敏捷开发做快速迭代,微服务的优势:

  • 快速迭代、快速回滚;
  • 资源利用大大提高:可以将硬件资源定向分配给需要用到资源的微服务,实现差异化的资源利用;
  • 降低协作成本:代码库、数据库、编译打包从共享变成独享,进一步降低了沟通成本;
  • 高可用:高可用是系统设计的第一目标,我们可以通过很多技术手段对微服务施加个性化的保护措施,如:弹性机房水位调拨、流量整形、熔断降级。

        了解完微服务后,我们再来了解下 Spring Cloud。

三、Spring Cloud

        Spring Cloud 由 Spring 社区孵化而成,是专门解决微服务架构的一套全家桶微服务架构。最关键的是,Spring Cloud 除了采用 Spring 社区的研发力量外,还吸纳了众多一线大厂的开源组件,经过深度融合,使这些组件成为 Spring Cloud 的一部分。

        以下是 Spring 社区提供的简易架构图

        

         在上图中,可以看到有几个 Spring Boot Apps 的应用集群,这就是经过拆分后的微服务。Spring Cloud 和 Spring Boot 达成了一种默契的配合:Spring Boot 主内,通过自动装配和各种开箱即用的特性,搞定了数据层访问、RESTful 接口、日志组件、内置容器等等基础功能,让开发人员轻轻松松就可以搭建起一个应用;Spring Cloud 主外,在应用集群之外提供了各种分布式系统的支持特性,帮助你轻松实现负载均衡、熔断降级、配置管理等诸多微服务领域的功能。

        3.1 Spring Cloud 版本策略

        大部分开源项目以数字版本进行更新迭代,Spring Cloud 在诞生之初就别出心裁使用了字母序列,以字母 A 开头,按顺序使用字母表中的字母标识重大迭代发布的大版本号。        

Spring Cloud版本
版本发布时间
Angel2015年3月
Brixton2016年5月
Camden2016年9月
Dalston2017年4月
Edgware2017年11月
Finchley2018年6月
Greenwich2019年1月
Hoxton2019年11月
Ilford2020年12月
Jubilee2021年12月
  • SNAPSHOT 版本:正在开发中的快照版本,例如 2021.0.0-SNAPSHOT,快照版代表当前分支最新的代码进度,也是更新最为频繁的小版本类型,不推荐在线上正式环境使用;
  • Milestone 版本:在大版本正式发布前的里程碑版本,例如 2021.0.0-M1,M1 代表当前大版本的第一个里程碑版本,M2 代表第二个迭代里程碑,以此类推。在正式版本发布之前要经历多个里程碑的迭代,像 Spring Cloud Finchley 版足足经历了 9 个 M 版本之后,才过渡到了 RC 版。同样地,我也不推荐你在正式项目中使用 Milestone 版本;
  • Release Candidate 版本:这就是我们俗称的 RC 版,例如 2021.0.0-RC1。当一个版本迭代到 RC 版的时候,意味着离正式发布已经不远了。但是你要注意,RC 版是发布前的候选版本,走到这一步通常已经没有新的功能开发,RC 主要目的是开放出来让大家试用并尽量修复严重 Bug。
  • Release 版:稳定的正式发布版,比如 2020.0.1。你可以在自己的线上业务中放心使用 Release 稳定版。

        3.2 Spring Cloud 发展历程

        在 Spring Cloud 历史上有两家举足轻重的公司,分别是 Netflix 和 Alibaba。这两家公司分别为开源社区贡献了 Spring Cloud Netflix 组件库和 Spring Cloud Alibaba 组件库。

        Netflix 是一家美国的流媒体巨头,它靠着自己强大的技术实力,开发沉淀了一系列优秀的组件,这些组件经历了 Netflix 线上庞大业务规模的考验,功能特性和稳定性过硬。如 Eureka 服务注册中心、Ribbon 负载均衡器、Hystrix 服务容错组件等。后来Netflix 将这些组件贡献给了 Spring 开源社区,构成了 Netflix 组件库。可以这么说,在 Spring Cloud的早期阶段,是Netflix打下了的半壁江山。

        Netflix 和 Spring Cloud 度过了蜜月期之后,矛盾就逐渐发生了。先是 Eureka 2.0 开源计划的搁浅,而后 Netflix 宣布 Hystrix 进入维护状态,Eureka 和 Hystrix 这两款 Netflix 组件库的明星项目停止了新功能的研发,Spring 社区不得不开始思考替代方案,在后续的新版本中走向了“去 Netflix 化”。以至于 Netflix 的网关组件 Zuul 2.0 历经几次跳票千呼万唤始出来后,Spring Cloud 社区已经不打算集成 Zuul 2.0,而是掏出了自己的 Gateway 网关。在最新版本的 Spring Cloud 中,Netflix 的踪迹已经逐渐消散。

        Spring Cloud Alibaba 是由 Alibaba 贡献的组件库,随着阿里在开源路线上的持续投入,近几年阿里系在开源领域的声音非常响亮。Spring Cloud Alibaba 凝聚了阿里系在电商领域超高并发经验的重量级组件,保持了旺盛的更新活力,成为了 Spring Cloud 社区的一股新生代力量。Spring Cloud Alibaba 组件秉承了“大而全”的特点,就像一个大中台应用一般包罗万象,在功能特性的丰富程度上做到了应有尽有。这也是本课程选择 Spring Cloud Alibaba 组件的一个重要原因。

        下面我们看下 Spring Cloud 的组件库,后续会分别详细介绍这些组件,欢迎收藏关注。

Spring Cloud 组件
功能特性Alibab组件库Netflix组件库Spring Cloud官方或三方组件库
服务治理NacosEurekaConsul
负载均衡RibbonLoadbalancer
远程调用DubboNetflix FeignOpenfeign
服务容错SentinelHystrixResilience4j
分布式配置中心NacosSpring Cloud Config
消息总线Bus
服务网关ZuulGateway
分布式链路追踪

Sleuth

Zipkin

消息中间件RocketMQStream
分布式事务Seata

        这些组件配合使用就形成了分布式架构 Spring Cloud 的强大功能,在自己的项目中需要斟酌选择,尽量不用 Netflix 的组件,因为它的影子后续会越来越少。这些组件在后边的文章中会陆续进行详细介绍,欢迎大家收藏关注。

往期经典推荐

SpringBoot项目并发处理大揭秘,你知道它到底能应对多少请求洪峰?-CSDN博客

深入探索Elasticsearch数据写入黑箱-CSDN博客

TiDB内核解密:揭秘其底层KV存储引擎如何玩转键值对-CSDN博客

透视Redis大key背后的I/O挑战-CSDN博客

MySQL自增主键有什么作用?来自大厂的使用经验-CSDN博客

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

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

相关文章

Open3D 进阶(21)无序点云平面检测的鲁棒统计方法

目录 一、算法原理1、算法过程2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、算法过程 除了寻找具有最大支持的单个平面外,Open3D还包含一个算法,该算法使…

【Java EE初阶二十九】Linux 系统的学习

当前写的博客系统程序,只是部署在咱们自己的电脑上,其他用户是无法直接访问的.由于 NAT 机制的存在,导致了IP 地址就被分成了 内网 IP 和 外网 IP. 云服务器,包括公司中使用专用服务器,一般都是 Linux 系统,这个系统的使用和 Windows 差异很大.(通过命令行来操作的系…

Jupyter Notebook的安装和使用(windows环境)

一、jupyter notebook 安装 前提条件:安装python环境 安装python环境步骤: 1.下载官方python解释器 2.安装python 3.命令行窗口敲击命令pip install jupyter 4.安装jupyter之后,直接启动命令jupyter notebook,在默认浏览器中打开jupyte…

测试环境搭建整套大数据系统-问题篇(一:实时遇到的问题)

1. java.io.IOException: Failed to deserialize JSON ‘{“age”:867,“sex”:“fba8c074f9”,“t_insert_time”:“2024-03-04 14:12:24.821”}’ 解决方式 修改数据类型。将TIMESTAMP_LTZ改为TIMESTAMP。 2. java. lang,classNotFoundException: org,apache.flink,streami…

典中典之西电A测-气压测控仿真系统

兄弟,如果你看到这篇,只能说明你A测也挂了,没办法,哥们太菜了,抄的太假过不了你电有些老师的慧眼 这坨🐕⑩我先吃为敬 环境搭建可以参考这个兄弟的博客 一、题目要求 实现功能:使用 Arduino UNO 微控制器,搭建一个 PC 上位机远程气压检测控…

账号管理支持批量测试资产可连接性,资产管理支持通过标签方式选择资产,JumpServer堡垒机v3.10.4 LTS版本发布

2024年3月4日,JumpServer开源堡垒机正式发布v3.10.4 LTS版本。JumpServer开源项目组将对v3.10 LTS版本提供长期的支持和优化,并定期迭代发布小版本。欢迎广大社区用户升级至v3.10 LTS最新版本,以获得更佳的使用体验。 在v3.10.4 LTS版本中&a…

ChromeDriver全版本下载教程

确定自己的Chrome版本 step1. 打开Chrome浏览器右上角的三个点,再点击设置 step2. 在设置中点击“关于Chrome”,圈起来的红框即为当前Chrome版本,我的版本就是121.0.6167.185 在json中查找自己对应ChromeDriver版本下载链接 一般教程会让你…

【树】【异或】【深度优先】【DFS时间戳】2322. 从树中删除边的最小分数

作者推荐 【二分查找】【C算法】378. 有序矩阵中第 K 小的元素 涉及知识点 树 异或 DFS时间戳 LeetCode2322. 从树中删除边的最小分数 存在一棵无向连通树,树中有编号从 0 到 n - 1 的 n 个节点, 以及 n - 1 条边。 给你一个下标从 0 开始的整数数组…

C++惯用法之RAII思想: 资源管理

C编程技巧专栏:http://t.csdnimg.cn/eolY7 目录 1.概述 2.RAII的应用 2.1.智能指针 2.2.文件句柄管理 2.3.互斥锁 3.注意事项 3.1.禁止复制 3.2.对底层资源使用引用计数法 3.3.复制底部资源(深拷贝)或者转移资源管理权(移动语义) 4.RAII的优势和挑战 5.总…

MATLAB:Image Processing Toolbox工具箱入门实战

目录 1.基本图像导入、处理和导出 2.实战项目一:利用imfindcircles()函数检测和测量图像中的圆形目标 1.基本图像导入、处理和导出 Basic Image Import, Processing, and Export- MATLAB & SimulinkThis example shows how to read an image into the worksp…

Java集合框架-Collection和Map

文章目录 Collection-单列集合特点ListArrayListLinkedListVecter SetHashSetTreeSet Map-键值对集合特点Map常用APIput添加细节remove Map的三种遍历方式1.通过键找值2.通过"键值对"3.Lambda表达式foreach源码 HashMap需求 为什么要使用泛型 泛型的优点1.集合中存储…

#QT(智能家居界面-布局)

1.IDE:QTCreator 2.实验: 水平布局,垂直布局,栅格布局(弹簧) 界面自动调整 3.记录 注意弹簧不是拖拽拉长,而是使用栅格布局 运行发现窗口放大缩小可以自动调整 如果想要重新布局,需…

【PHP趣味技术】分分钟教会你轻松采集PDF文本内容 《重庆话真的太吃皮老!》

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享博主 🐋 希望大家多多支持一下, 我们一起学习和进步!😄 🏅 如果文章对你有帮助的话,欢迎评论 💬点赞&a…

备忘 clang diagnostic 类的应用示例 ubuntu 22.04

系统的ncurses环境有些问题 通过源码安装了ncurses6.3后,才可以在 llvmort-18.1.rc4中编译通过示例: 1,折腾环境 ncurses-6.3$ ./configure ncurses-6.3$ make -j ncurses-6.3$ sudo make install sudo apt install libtinfo5 sudo…

使用Visual Studio 2022 创建lib和dll并使用

概述:对于一个经常写javaWeb的人来说,使用Visual Studio似乎没什么必要,但是对于使用ffi的人来说,使用c或c编译器,似乎是必不可少的,下面我将讲述如何用Visual Studio 2022 来创建lib和dll,并使用。 静态库…

ABAP - SALV教程12 显示图标和提示信息

ALV要求字段的值为图标的需求并不多见,一般都用于红黄绿灯,来表示单据的执行状态,添加图标的方式也可以实现红黄绿灯的功能,也可以参考SALV实现红黄绿灯这篇文章:http://t.csdnimg.cn/Dzx7x效果图SAVL列设置为图标图标…

434G数据失窃!亚信安全发布《勒索家族和勒索事件监控报告》

最新态势快速感知 最新一周全球共监测到勒索事件90起,与上周相比数量有所增加。 lockbit3.0仍然是影响最严重的勒索家族;alphv和cactus恶意家族也是两个活动频繁的恶意家族,需要注意防范。 Change Healthcare - Optum - UnitedHealth遭受了…

详细分析服务器自动重启原因(涉及Linux、Window)

目录 前言1. Linux2. Window 前言 对于服务器异常重启的问题,需要定位原因并解决,下次就不会重启 1. Linux 要查看Linux服务器自动重启的原因,可以执行以下步骤: 检查系统日志:Linux系统通常会记录系统事件和错误信…

vue3页面内容切换(类似登录、注册内容切换)

一、内容描述 页面有俩块内容,分别是验证码登录页面内容,账号密码登录页面内容。有俩种处理方式,一个是写俩个页面跳转使用,还有一种是一个页面俩个内容,切换的只是不同的内容,相同的内容保留。一般都是选择…

通过人工智能增强的对话建立有意义的联系

人工智能如何重塑我们的交流?2024年最新对话AI趋势 在技术和人类互动比以往任何时候都更加复杂地交织在一起的时代,人工智能增强的对话已成为建立有意义的联系的关键要素。 这种转变不仅关乎效率,还关乎效率。 这是为了丰富沟通的结构。 在这…