《Spring Cloud Alibaba 从入门到实战》理论知识篇

news2024/11/17 17:52:13

基础知识篇

理论篇

俗话说,没有最好的架构,只有最合适的架构

微服务架构也是随着信息产业的发展而出现的最有普遍适用性的一套架构模式。

通常来说,我们认为架构发展历史经历了这样一个过程:单体架构 -> SOA 面向服务架构 -> 微服务架构

单体架构

MVC 架构以及由此衍生出来各种多层架构如下图所示:

image-20230918164349391

优点

在程序规模不大,开发人员很少的时候,下面的几点是非常显著的:

  1. 开发简单。单体应用的结构,天然决定了所有代码都集中在一起,开发者不需要在多个应用之间来回跳转来寻找其中的调用逻辑。
  2. 测试简单。所有代码都在一个应用里,测试人员可以很方便的做到端到端的测试(当然,很多时候测试人员就是开发者自己)。
  3. 部署简单。因为一个应用就是产品功能的全集,所以在部署的时候,只需要不是一款应用即可。即使是集群部署,也不会增加多少复杂度:只需要将应用部署多份即可。
  4. 开发迅速。上面的各种简单,带来的就是软件功能可以快速实现。很多时候,实现需求的速度是项目成功与否的决定性因素。

所以,在开发简单和独立的产品时,单体架构依然是第一优先选择。

弊端

随着功能的持续增加、团队规模的不断扩大,我们很快就会发现单体应用的弊端:

  1. 应用膨胀。所有代码都在一个应用里,导致应用的代码量迅速上升,对于开发者来说,经常需要在海量的代码里找到自己需要维护的哪一行,这种体验往往是令人崩溃的。同时,对于 IDE 来说,一个应用内大量代码也会严重拖慢其运行效率。
  2. 团队合作冲突。这种冲突会体现在多个方面:开发阶段,很容易由于修改相同的代码导致代码冲突。部署阶段,又会因为“运行环境里跑的是谁的分支”而造成新的冲突。所有的这些冲突将会严重影响到团队的合作效率。
  3. 运行效率 & 稳定性。单体应用,由于逻辑都集中在一起,启动时需要完成所有的初始化工作;同时单一功能的问题也会因为运行在一个进程内,从而导致整个应用宕机。

SOA 架构

SOA 是 Service-Oriented Architecture 的简写,直译为“面向服务的架构”。

核心思想是:将系统的功能解构为一系列服务。

与单体架构按照技术职责进行水平拆分不同,SOA 会按照业务领域对应用进行粗粒度的垂直拆分

垂直拆分带来的问题

应用从单体应用做了垂直拆分以后,就会变成一些相对独立的应用。此时,应用间的依赖、调用等相关问题自然而然的就会浮现出来。此时就需要下面这些技术方案来解决这些问题:

  1. XML – 一种标记语言,用于以文档格式描述消息中的数据。
  2. SOAP(Simple Object Access Protocol)-- 在计算机网络上交换基于 XML 的消息的协议,通常是用 HTTP。
  3. WSDL(Web Services Description Language,Web 服务描述语言)-- 基于 XML 的描述语言,用于描述与服务交互所需的服务的公共接口,协议绑定,消息格式。
  4. UDDI(Universal Description, Discovery, and Integration,是统一描述、发现和集成) – 基于 XML 的注册协议,用于发布 WSDL 并允许第三方发现这些服务。
  5. ESB(Enterprise Service Bus, 企业服务总线)-- 支持异构环境中的服务、消息,以及基于事件的交互,并且具有适当的服务级别和可管理性。

典型 SOA 架构模式图

在这里插入图片描述

弊端以及不足

  1. 高门槛。ESB 本身就是一套非常复杂的系统,通过 ESB 落地 SOA ,对开发人员的要求很高。甚至还会需要厂商参与;
  2. 厂商绑定。由于缺乏统一保准,不同厂商的解决方案之间很难做切换。
  3. 不适应云环境。在如今的互联网时代,速度就是一切。由此诞生了敏捷开发、持续集成等在不同节点提升业务上线速度的办法。但是方向是不一致的。
  4. 中心化。虽然应用本身实现了分布式与水平扩展,但是 ESB 却成了系统的中枢神经。

微服务架构

直接从【SOA、微服务】这两者的区别入手来理解到底什么是微服务:

传统 SOA微服务
通信方式基于 ESB,SOAP、W SDL 等重协议点对点通信,开放式协议,如 RESTful、gR PC、或者是轻量级的二进制协议。
数据管理全局数据模型以及共享存储每个服务独立模型和存储
服务粒度较粗较细
诞生的背景企业级应用互联网
解决的问题面向企业内,系统集成面向最终产品,解决扩展,维护的问题

通信手段、数据等的不同只是表象,其本质区别还是由于两者诞生于不同历史时期,需要解决的问题域不同。

  • SOA 解决的核心问题是复用
  • 而微服务解决的核心问题是扩展

微服务的几个重要概念

  1. 一套小服务
  2. 独立进程
  3. 轻量级通信协议
  4. 可独立部署
  5. 多语言 & 不同储技术

微服务架构图

在这里插入图片描述

要考虑的问题(主要包括但不限于):

  1. 通过服务实现组件化
  2. 根据业务组织系统
  3. 做产品而不是做项目
  4. 简单高效的通信协议
  5. 自动化基础设施
  6. 面向失败的设计
  7. 具备进化能力的设计

今天我们所说的【微服务】是一个庞大且复杂的概念集合,它既是一种架构模式,也是实现这种架构模式时所使用的技术方案的集合。

框架篇

Spring

在 Spring 框架的早期,大家都喜欢称其为【轻量化】框架,【轻量】是相对于 EJB 等企业级开发框架而言的。

其【轻】的特性体现在:

  1. 框架本身的大小很小,早期版本的 jar 包不超过 1MB;
  2. 同时不依赖于运行容器,也是说任何容器里都可以运行 Spring 框架;
  3. 更加重要的是 Spring 是非侵入的,使用 Spring 开发的应用可以不完全依赖 Spring 的类。

SpringBoot

使用 Spring Boot 可以大大简化 Spring 应用的开发工作。

在 Spring Boot 中无论是官方组件还是第三方框架都会提供各种【starter】来方便开发者进行依赖和集成。

由于采用了 “约定大于配置” 的思想,开发者在引入 “stater” 以后只需要做少量的配置工作就可以完成框架集成工作。

往往开发者只需要很少量的代码就可以实现以前大量配置文件才能做到的功能。

Spring 官方对 Spring Boot 特色定义如下:

  1. 创建独立的 Spring 应用程序
  2. 直接嵌入 Tomcat,Jetty 或 Undertow(无需部署 WAR 文件)
  3. 提供自以为是的 “starter” 依赖项,以简化构建配置
  4. 尽可能自动配置 Spring 和三方类库
  5. 提供可用于生产的功能,例如指标,运行状况检查和外部化配置
  6. 完全没有代码生成,也不需要 XML 配置

Spring Cloud

“分布式系统中的常见模式” 给了 Spring Cloud 一个清晰的定位,即“模式”。也就是说 Spring Cloud 是针对分布式系统开发所做的通用抽象,是标准模式的实现。

Spring 官方给出的一个 Height Light 的架构图:

在这里插入图片描述

结论:Spring Cloud 是以微服务为核心的分布式系统的一个构建标准。

Spring Cloud Alibaba

既然说 Spring Cloud 是标准,那么自然少不了针对标准的实现。

参与这个标准的实现有很多,比如:

  1. Google 的 Spring Cloud GCP
  2. Netflix 的 Spring Cloud Netflix
  3. Microsoft 的 Spring Cloud Azure
  4. 阿里巴巴的 Spring Cloud Alibaba

介绍图

在这里插入图片描述

图中深色的部分,其实它就是 Spring Cloud 标准,一共有 3 层。

  1. 中间颜色最深的部分就是及整个微服务最核心的内容,包括了 “RPC 调用” 以及 “服务注册与发现”。
  2. 第二层,也就是围绕着核心的这一圈,是一些辅助微服务更好的工作功能,包括了负载均衡、路由、网关、断路器,还有就是追踪等等这些内容。
  3. 再外层的话,主要是些分布式云环境里的通用能力。

最外面这一圈,是 Spring Cloud Alibaba 对 Spring Cloud 的实现。

  • 右上部分是 对于 Spring Cloud 标准的实现。例如,我们通过 Dubbo 实现了 RPC 调用功能,通过 Nacos 实现了“服务注册与发现”、“分布式配置”,通过 Sentinel 实现了断路器等等。
  • 左下部分是我们 Spring Cloud Alibaba 对阿里云各种服务的集成

为什么要加上【集成】这一部分呢?

因为在实际生产过程中,单独使用微服务框架其实并不足以支撑我们去构建一个完整的系统。所以这部分是用阿里帮助开发者完成微服务以外的云产品集成的功能。

包含组件

目前,Spring Cloud Alibaba 包含如下组件:

开源部分

  1. Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
  2. Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
  3. RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
  4. Dubbo:Apache Dubbo 是一款高性能 Java RPC 框架。
  5. Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。

平台服务部分

  1. Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  2. Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
  3. Alibaba Cloud SMS: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力, 帮助企业迅速搭建客户触达通道。

工具篇

Java 工程脚手架

访问地址:云原生应用脚手架

Sandbox 沙箱环境

Sandbox 沙箱环境,为开发者带来一套快速上手、免除任何环境依赖、免费、便捷的 开发&运行环境。允许开发者在上面查看、修改、部署示例代码,并且由平台提供相关运行资源。

触达通道。

工具篇

Java 工程脚手架

访问地址:云原生应用脚手架

Sandbox 沙箱环境

Sandbox 沙箱环境,为开发者带来一套快速上手、免除任何环境依赖、免费、便捷的 开发&运行环境。允许开发者在上面查看、修改、部署示例代码,并且由平台提供相关运行资源。

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

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

相关文章

css 输入框动态特效

先上图 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>css 输入框动效</title><style>.inputBox {position: relative;width: 250px;}.inputBox input {width: 100%;padding: 10px…

PyTorch2.0环境搭建

一、安装python并配置环境变量 1、打开python官网&#xff0c;下载并安装 Welcome to Python.org 下载 寻找版本&#xff1a;推荐使用3.9版本&#xff0c;或其他表中显示为安全&#xff08;security&#xff09;的版本 安装&#xff1a;&#xff08;略&#xff09; 2、配置环…

《Android编程权威指南》之第二个activity源码及挑战

文章目录 前言效果图依赖MainactivityKotlin的“ &#xff1f;”kotlin的符号 QuizViewModelQuestion类CheatActivityonBackPressed()companion CheatViewModelstring.xml 前言 实现禁止一题多答&#xff0c;按题记录作弊状态、偷看次数限制、横竖屏切换依旧保存状态数据 个人…

探索异步交互:JavaScript AJAX 的全面指南

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;JavaScript篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript-AjAx 目录 AJAX AJAX 的优势 AJAX 的使用 创建一个 ajax 对象 配置…

Java网络编程-深入理解BIO、NIO

深入理解BIO与NIO BIO BIO 为 Blocked-IO&#xff08;阻塞 IO&#xff09;&#xff0c;在 JDK1.4 之前建立网络连接时&#xff0c;只能使用 BIO 使用 BIO 时&#xff0c;服务端会对客户端的每个请求都建立一个线程进行处理&#xff0c;客户端向服务端发送请求后&#xff0c;…

三防平板|手持终端PDA|8寸/10寸工业三防平板电脑主板方案定制

近年来&#xff0c;随着科技的快速发展&#xff0c;三防平板成为了各行各业中不可或缺的工具。三防平板采用IP67级别的防护设计&#xff0c;通过了多项测试标准&#xff0c;如国标和美标&#xff0c;具备防水、防摔、防尘、防撞、防震、防跌落以及防盐雾等多重防护功能。因此&a…

CCKS2023-面向金融领域的主体事件检测-亚军方案分享

赛题分析 大赛地址 https://tianchi.aliyun.com/competition/entrance/532098/introduction?spma2c22.12281925.0.0.52b97137bpVnmh 任务描述 主体事件检测是语言文本分析和金融领域智能应用的重要任务之一&#xff0c;如在金融风控领域往往会对公司主体进行风险事件的检测…

microblaze仿真

verdivcs (1) vlogan/vcs增加编译选项 -debug_accessall -kdb -lca (2) 在 simulation 选项中加入下面三个选项 -guiverdi UVM_VERDI_TRACE"UVM_AWARERALHIERCOMPWAVE" UVM_TR_RECORD 这里 -guiverdi是启动verdi 和vcs联合仿真。UVM_VERDI_TRACE 这里是记录 U…

计算机存储单位 + 程序编译过程

C语言的编译过程 计算机存储单位 头文件包含的两种方式 使用 C/C 程序常用的IDE 常用的C语言编译器&#xff1a; 在选择编译器时&#xff0c;需考虑平台兼容性、性能优化、调试工具和开发人员的个人偏好等因素。 详细教程可转 爱编程的大丙

C++特性之多态

C作为面向对象的语言&#xff0c;三大特性之一多态在平时的编程中使用频率特别高。 本篇文章就来详细讲解一下多态。 什么是多态 不同的对象做相同的一件事会出现不同的状态&#xff0c;这就是多态。 举个列子&#xff1a;比如普通人买车票要全价购买&#xff0c;而军人只用半…

POJ 3735 Training little cats 动态规划(矩阵的幂)

一、题目大意 我们有N只猫&#xff0c;每次循环进行K次操作&#xff08;N<100&#xff0c;K<100&#xff09;&#xff0c;每次操作可有以下三种选择&#xff1a; 1、g i 给第i只猫1个食物 2、e i 让第i只猫吃完它所有的食物 3、s i j 交换第i和j只猫的食物。 求出M次…

【池式组件】线程池的原理与实现

线程池的原理与实现 线程池简介1.线程池1.线程池2.数量固定的原因3.线程数量如何确定4.为什么需要线程池5.线程池结构 线程池的实现数据结构设计1.任务结构2.任务队列结构3.线程池结构 接口设计 线程池的应用reactorredis 中线程池skynet 中线程池 线程池简介 1.线程池 1.线程…

ABP vNext 扩展 CurrentUser

ABP内置Users表&#xff0c;我们可以对其字段进行扩展&#xff0c;辅助进行更详细的数据记录 ICurrentUser 是主要的服务,用于获取有关当前活动的用户信息. 以下是 ICurrentUser 接口的基本属性:1. IsAuthenticated 如果当前用户已登录(已认证),则返回 true. 如果用户尚未登录…

软件设计师——面向对象技术(一)

&#x1f4d1;前言 本文主要是【面向对象技术】——软件设计师—面向对象技术的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#…

每日一练2023.12.8—— 稳赢【PTA】

题目链接&#xff1a; L1-044 稳赢 题目要求&#xff1a; 大家应该都会玩“锤子剪刀布”的游戏&#xff1a;两人同时给出手势&#xff0c;胜负规则如图所示&#xff1a; 现要求你编写一个稳赢不输的程序&#xff0c;根据对方的出招&#xff0c;给出对应的赢招。但是&#xff…

正则表达式(7):转义符

正则表达式&#xff08;7&#xff09;&#xff1a;正则表达式&#xff08;5&#xff09;&#xff1a;转义符 本博文转载自 此处&#xff0c;我们来认识一个常用符号&#xff0c;它就是反斜杠 “\” 反斜杠有什么作用呢&#xff1f;先不着急解释&#xff0c;先来看个小例子。 …

Python random模块及用法

random 模块主要包含生成伪随机数的各种功能变量和函数。 在 Python 的交互式解释器中先导入 random 模块&#xff0c;然后输入 random.__all__ 命令&#xff08;__all__ 变量代表了该模块开放的公开接口&#xff09;&#xff0c;即可看到该模块所包含的全部属性和函数&#x…

【分享】我想上手机器学习

目录 前言 一、理解机器学习 1.1 机器学习的目的 1.2 机器学习的模型 1.3 机器学习的数据 二、学习机器学习要学什么 2.1 学习机器学习的核心内容 2.2 怎么选择模型 2.3 怎么获取训练数据 2.4 怎么训练模型 三、机器学习的门槛 3.1 机器学习的第一道门槛 3.2 机器…

ES-环境安装(elasticsearch:7.17.9,kibana,elasticsearch-head)

ES 环境搭建 1 拉取镜像 常用三件套 docker pull kibana:7.17.9 docker pull elasticsearch:7.17.9 docker pull mobz/elasticsearch-head:52 启动镜像 elasticsearch 安装 这里可以先不挂载文件启动一波&#xff0c;然后把容器里的文件拷贝出来 docker run -p 19200:9200 …

[oeasy]python0002_终端_CLI_GUI_编程环境_游戏_真实_元宇宙

回忆 上次 了解了 python 语言的特点 历史悠久功能强大深受好评已成趋势 3大主流操作系统 macwindowslinux 我们 选择 linux 作为基础系统 为什么选择 黑乎乎的命令行界面呢&#xff1f;&#x1f914; GUI vs CLI 个人电脑 用图标和菜单组成 图形界面(GUI) Graphic User I…