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

基础知识篇

理论篇

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

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

通常来说,我们认为架构发展历史经历了这样一个过程:单体架构 -> 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.mzph.cn/news/208214.shtml

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

相关文章

springboot智慧导诊系统源码:根据患者症状匹配挂号科室

一、系统概述 医院智慧导诊系统是在医疗中使用的引导患者自助就诊挂号,在就诊的过程中有许多患者不知道需要挂什么号,要看什么病,通过智慧导诊系统,可输入自身疾病的症状表现,或选择身体部位,在经由智慧导诊…

微型5G智能网关助力打造智能清洁机器人

智能机器人不断融入我们的生活,提供了越来越多样化的服务,例如专用于卫生清洁的机器人,就已经广泛应用于酒店、体育馆、大型商场、写字楼、工地等各种场景,相较于人工,机器人在此类具有高度重复性、劳动量大的工作中具…

C++作业6

以下是一个简单的比喻,将多态概念与生活中的实际情况相联系: 比喻:动物园的讲解员和动物表演 想象一下你去了一家动物园,看到了许多不同种类的动物,如狮子、大象、猴子等。现在,动物园里有一位讲解员&…

用23种设计模式打造一个cocos creator的游戏框架----(五)工厂方法模式

1、模式标准 模式名称:工厂方法模式 模式分类:创建型 模式意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 结构图: 适用于: 1、当一个类不知道它…

failed to install plugin grafana 插件安装失败

升级时忽略plugins 权限问题,导致安装插件失败!调整权限即可

042:el-table表格表头自定义高度(亲测好用)

第042个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

Shrio 安全框架

目录 前言 1.介绍 2.整合 Shiro 到 Spring Boot 3.Shiro 相关配置 总结 前言 几乎所有涉及用户的系统都需要进行权限管理,权限管理涉及到一个系统的安全。Spring Boot 的安全框架整合方案中还有一个璀璨的明珠:Shrio。 1.介绍 Shiro是一款由Java 编…

信道复用技术

目录 一、频分复用FDM(Frequency Division Multiplexing) 二、波分复用 WDM(Wavelength Division Multiplexing) 三、时分复用TDM(Time Division Multiplexing) 四、统计时分复用 STDM(Statisti…

双通道5V高细分步进电机驱动芯片应用于摇头机,X,Y控制,聚焦控制,CAMERA云台控制等产品上的芯片选型分析

双通道5V高细分步进电机驱动芯片GC6106,GC6107,GC6119,GC6151,GC6236,GC6225,GC6129,电压范围3~5.5V,最大持续电流可达0.6A左右。可应用于摇头机,X,Y控制,聚焦…

基于AIS数据的船舶密度计算与规律研究

参考文献:[1]陈晓. 基于AIS数据的船舶密度计算与规律研究[D].大连海事大学,2021.DOI:10.26989/d.cnki.gdlhu.2020.001129. 谢谢姐姐的文章! 网格化AIS数据 网格化 AIS 数据是处理和分析船舶轨迹数据的一种有效方法,特别是当涉及到密度计算和…

Vue3+Antd实现弹框显示内容并加入复制按钮

使用Vue3antd实现点击弹框出现内容并可复制内容的功能&#xff1a; HTML部分&#xff1a; <a-button type"primary" click"showModel">打开弹框 </a-button><!-- ok 是弹框中确定按钮的操作&#xff0c;cancel 是弹框中取消按钮的操作 --…

Redis数据已经删除了,为什么内存占用还是很高?

Redis数据已经删除了&#xff0c;为什么内存占用还是很高&#xff1f; Redis做了数据删除操作&#xff0c;为什么使用top命令时&#xff0c;还是显示Redis占了很多内存&#xff1f; 没做相关功课的人觉得这个问题有问题&#xff0c;删了数据还说占着内存&#xff0c;面试官不…

【学一点儿前端】真机调试本地公众号网页项目

前言 微信公众号网页开发的真机调试一直是很头疼的事情。 原因一 微信公众号配置的JS安全域名只有三个&#xff0c;一个大中型的公众号这三个JS安全域名都是生产的域名&#xff0c;不可能预留域名用于开发和调试。 原因二 在微信里面只有访问正确的安全域名才能调用wx.config用…

vuepress-----18、图片缩放

图片引入两种方式 地址 # 图片缩放插件 # 实战 md文件引入图片 <img class"zoom-custom-imgs" :src"$withBase(/favicon.ico)" alt"favicon">安装配置插件 vuepress/medium-zoom: {selector: img.zoom-custom-imgs,},效果展示

MVCC是什么

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

ChibiOS简介1/5

ChibiOS简介1/5 1. 源由2. ChibiOS基础知识1/52.1 Chapter 1 - Introduction2.1.1 Priciple&#xff08;设计原则&#xff09;2.1.2 Fundamental requirements&#xff08;基本需求&#xff09; 2.2 Chapter 2 - Real Time Systems Concepts2.2.1 System&#xff08;系统&#…

flutter TextPainter 的用法

本文章基于 Flutter 3.16.2 Dart SDK 3.2.2。 TextPainter 是 Flutter 中用于在 Canvas 上绘制文本的类。它允许您在自定义的 CustomPainter 中使用 drawText 方法来绘制文本&#xff0c;并可以控制文本的位置、颜色、字体等属性。 import package:flutter/material.dart;cla…

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…

使用git push太慢怎么办

使用git push太慢怎么办 修改host文件&#xff1a; windows 的路径应该在 C:\Windows\System32\drivers\etc\hosts 在host文件的最后一行加上 151.101.72.249 github.global.ssl.fastly.nethost不允许修改就复制一份&#xff0c;修改好了再替换掉&#xff0c;可能会让你输入…

【面试经典150 | 二叉树】对称二叉树

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;递归方法二&#xff1a;迭代 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的…