当前位置:首页 > 技术分析 > 正文内容

什么是Spring Cloud项目,我把它讲清楚了

ruisui8811小时前技术分析1

@Author : Runsen

最近几年微服务很火,大家都在建设微服务,仿佛不谈点微服务相关的技术,都显得不是那么主流了。

微服务

讲起springcloud之前,我们需要了解一下什么是微服务。

简单来说,微服务就是一种将一个单一应用程序拆分为一组小型服务的方法,拆分完成后,每一个服务都运行在独立的进程中,服务于服务之间采用轻量级的通信机制来进行沟通(Spring Cloud 中采用基于 HTTP 的 RESTful API)。

我们先认识下应用架构的变迁,下面是应用架构的变迁历史

单体架构

早期, 企业的对外提供的服务比较单一, 客户流量也相对不足。 因此将所有的模块,代码打包在一个项目中,集中部署一台机器上。

就像学校里面做的项目,搞定前端,数据库,部署到服务器,把WEB应用 APP做出来就是以前的单体架构。

其实就是给你用的,基本部署到一个云服务器。没有任何的实用,企业的客户会越来越多, 流量越来越大, 单单一台服务器对外提供服务, 哪里撑得住啊, 不分分钟被搞挂掉才怪。

遇到并发和大流量,基本就Over了。

SOA架构

应用软件over了,企业损失惨重,你也可以滚蛋了。一台最垃圾云服务器1G运行内存加50G空间,虽然垃圾,但是我几个服务器一起上。一个挂了,还有几个撑着,然后我们赶紧把挂的重启,这样不就可以顶住了吗,这就是SOA架构,全面就是Service-Oriented Architecture。简称SOA,翻译过来面向服务的架构,下图就是SOA架构图

  • 将所有的服务提供者注册到注册中心。
  • 客户端向注册中心订阅服务
  • 注册中心向客户端推送有效的服务信息
  • 客户端得到所有可调用服务的信息后, 根据需求,按负载均衡算法, 进行调用, 获取数据。

下面用百度百科把SOA说得高大上点。

面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。(百度百科)

比如,阿里巴巴的Dubbo数据源就是一个非常好的服务治理SOA框架,

微服务

微服务可以理解为是 SOA 的一个传承,一个本质的区别是微服务是一个真正分布式、去中心化的,微服务的拆分比 SOA 更加彻底。

微服务架构的系统是一个分布式的系统,每个微服务基本是一个能独立发布的应用服务,因此可以作为独立组件升级、灰度或复用等,对整个大应用的影响也较小,每个服务可以由专门的组织来单独完成,依赖方只要定好输入和输出口即可完全开发,甚至整个团队的组织架构也会更精简,因此沟通成本低、效率高。

比如,一个项目出了问题。哪里出了问题,难道将整个项目从头到尾看一遍吗,就算你肯,老板也不肯啊。你把企业都有的私密的源码都知道了,万一你突然间要挟涨薪。这时候,就将一个项目分成几个小项目。一个小项目负责一个功能实现,再整合起来,不就是一个大项目。

每一个服务,都是围绕具体的业务进行构建,例如一个电商系统,订单服务、支付服务、物流服务、会员服务等等,这些拆分后的应用都是独立的应用,都可以独立的部署到生产环境中。在采用微服务之后,我们的项目不再拘泥于一种语言,可以 Java、Go、Python、PHP 等等,混合使用,这在传统的 应用开发中,是无法想象的。而使用了微服务之后,我们可以根据业务上下文来选择合适的语言和构建 工具进行构建。

比如,今日头条APP。推荐算法可能是用Python,处理并发可能用go,注册功能可能是Java。所以一个上百万的用户的项目,绝对耗上亿资金完成的。如果出毛病了,就让那个负责这个模块的人去处理。

SpringCloud

那SpringCloud和微服务有什么关系?Spring Cloud 可以理解为微服务这种思想在 Java 领域的一个具体落地。Spring Cloud 在发展之初,就 借鉴了微服务的思想,同时结合 Spring Boot,Spring Cloud 提供了组件的一键式启动和部署的能力, 极大的简化了微服务架构的落地。

这也是Java为什么是老大的原因。

学任何东西都先访问官方文档,我们先访问SpringCloud官方文档:
https://spring.io/projects/spring-cloud/

Spring Cloud为开发人员提供了工具,以快速构建分布式系统中的一些常见模式(例如,配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式会话,群集状态)。分布式系统的协调导致样板式样,并且使用Spring Cloud开发人员可以快速站起来实现这些样板的服务和应用程序。它们可以在任何分布式环境中正常工作,包括开发人员自己的笔记本电脑,裸机数据中心以及Cloud Foundry等托管平台。

SpringCloud版本

不同于其他的框架,Spring Cloud 版本名称是通过 A(Angel)、B(Brixton)、C(Camden)、 D(Dalston)、E(Edgware)、F(Finchley)。这样来明明的,这些名字使用了伦敦地铁站的名 字,目前最新版是 H (Hoxton)版。

官方图为证

Spring Cloud 中,除了大的版本之外,还有一些小版本,小版本命名方式如下: M ,M 版是 milestone 的缩写,所以我们会看到一些版本叫 M1、M2 RC,RC 是 Release Candidate,表示该项目处于候选状态,这是正式发版之前的一个状态,所以 我们会看到 RC1、RC2 SR,SR 是 Service Release ,表示项目正式发布的稳定版,其实相当于 GA(Generally Available) 版。所以,我们会看到 SR1、SR2 SNAPSHOT,这个表示快照版

Spring Cloud体系

下面总结下重点的(来源:江南一点雨 松哥)

  • Spring Cloud Netflix,这个组件,在 Spring Cloud 成立之初,立下了汗马功劳。但是, 2018 年 的断更,也是 Netflix 掉链子了。
  • Spring Cloud Config,分布式配置中心,利用 Git/Svn 来集中管理项目的配置文件
  • Spring Cloud Bus,消息总线,可以构建消息驱动的微服务,也可以用来做一些状态管理等
  • Spring Cloud Consul,服务注册发现
  • Spring Cloud Stream,基于 Redis、RabbitMQ、Kafka 实现的消息微服务
  • Spring Cloud OpenFeign,提供 OpenFeign 集成到 Spring Boot 应用中的方式,主要解决微服务 之间的调用问题 - Spring Cloud Gateway,Spring Cloud 官方推出的网关服务
  • Spring Cloud Cloudfoundry,利用 Cloudfoundry 集成我们的应用程序
  • Spring Cloud Security,在 Zuul 代理中,为 OAuth2 客户端认证提供支持 Spring Cloud AWS ,快速集成亚马逊云服务
  • Spring Cloud Contract,一个消费者驱动的、面向 Java 的契约框架
  • Spring Cloud Zookeeper,基于 Apache Zookeeper 的服务注册和发现
  • Spring Cloud Data Flow,在一个结构化的平台上,组成数据微服务
  • Spring Cloud Kubernetes,Spring Cloud 提供的针对 Kubernetes 的支持 Spring Cloud Function Spring Cloud Task,短生命周期的微服务

Spring Cloud和 Spring Boot 版本关系

初学spring cloud的朋友可能不知道,其实SpringBoot与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

下面总结Spring Cloud和 Spring Boot 版本关系(来源:江南一点雨 松哥)

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3696.html

分享给朋友:

“什么是Spring Cloud项目,我把它讲清楚了” 的相关文章

厅监控结算中心加强高速公路联网收费系统运行管理

厅监控结算中心加强高速公路联网收费系统运行管理,一是严格PSAM卡管理要求,加强跟踪各营运公司PSAM卡使用情况,切实做到PSAM卡专人保管,定期核查,做好联网收费系统基础安全工作。二是督促各营运公司加强3G备份链路管理,保障数据应急通道的畅通,确保车道数据正常传输。三是落实标识站建设工作,督促各营...

最快清除数组空值?分享 1 段优质 JS 代码片段!

本内容首发于工粽号:程序员大澈,每日分享一段优质代码片段,欢迎关注和投稿!大家好,我是大澈!本文约 600+ 字,整篇阅读约需 1 分钟。今天分享一段优质 JS 代码片段,用最简洁的代码清除了数组中的空值。老规矩,先阅读代码片段并思考,再看代码解析再思考,最后评论区留下你的见解!const arr...

JavaScript数组操作:掌握常用方法,提升开发效率

JavaScript数组操作:从增删改查到高级应用本文深入解析JavaScript中常用的数组方法,包括push、unshift、pop、shift、map、filter、reverse、at 和 slice。通过详细的例子和应用场景,帮助开发者快速掌握这些方法,提升代码效率和可读性。开篇点题作为J...

Vue实现动态路由

通常我们在vue项目中都是前端配置好路由的,但在一些项目中我们可能会遇到权限控制,这样我们就涉及到动态路由的设置了。动态路由设置一般有两种:(1)、简单的角色路由设置: 比如只涉及到管理员和普通用户的权限。通常直接在前端进行简单的角色权限设置(2)、复杂的路由权限设置: 比如OA系统、多种角色的权限...

Vue中的路由配置常用属性

router:路由页面跳转的核心库;引入路由:import VueRouter from 'vue-router'; 注册路由:const router = new VueRouter({ })mode:模式路由有hash history两种模式:hash模式URL中包含#,#后边是...

基于 vue3.0 小程序拖拽定制

今天给大家分享一个使用Vue3编写的自由DIY小程序页面。mbDIY 一款基于vue3.x构建的可拖拽定制小程序模板。支持新建页面、自由拖拽模块、复制/移动、自定义模块样式等功能。整个项目分为页面、模块、控件三大部分。模块里面的组件可拖拽至主面板区,编辑后保存即可预览效果。快速安装# 克隆项目 gi...