《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.hqwc.cn/news/258565.html

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

相关文章

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

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

C++: 多态

多态的基本概念: 多态是 C 面向对象三大特性之一 多态分为两类: 静态多态 : 函数重载 和 运算符重载属于静态多态,复用函数名 动态多态 : 派生类和虚函数实现运行时多态 静态多态和动态多态区别: 静态多态的函数地址早绑定 …

高德地图画渐变线

高德地图画渐变线,思路是将线和颜色均分为多个小线段和小颜色,实现渐变,类似于下图。 如果需要多段线,自己循环拼一下就可以了,方法返回多个小线段组成的polyline数组。 /** 高德地图画渐变线* author: liyun* params…

第一课【习题】HarmonyOS应用/元服务上架

元服务发布的国家与地区仅限于“中国大陆” 编译打包的软件包存放在项目目录build > outputs > default下 创建应用时,应用包名需要和app.json5或者config.json文件中哪个字段保持一致? 发布应用时需要创建证书,证书类型选择什么…

粤能环保亮相迪拜COP28,智能技术铸就运河城市可持续未来

在全球应对气候变化的重要会议——迪拜COP28大会上,运河城市面临的独特环境挑战引起了广泛关注。随着城市化进程的加快,运河城市在处理固体废物、减少温室气体排放以及维持水资源安全方面面临着严峻考验。智能垃圾分类作为应对这些挑战的有效途径&#x…

2024年强烈推荐mac 读写NTFS工具Tuxera NTFS for Mac2023中文破解版

大家好啊~今天要给大家推荐的是 Tuxera NTFS for Mac2023中文破解版! 小可爱们肯定知道,Mac系统一直以来都有一个小小的痛点,就是无法直接读写NTFS格式的移动硬盘和U盘。但是,有了Tuxera NTFS for Mac2023,…

ATFX汇市:11月非农就业报告来袭,美指提前高位回落

ATFX汇市:今日21:30,美国劳工部劳动统计局将公布美国11月非农就业报告,其中两项数据需重点关注。其一,11月季调后非农就业人口,前值为增加15万人,预期值增加17.5万人。由于10月份的非农数据出现爆冷&#x…

H5ke14--1--拖放

drag,drop 被拖动元素,目标(释放区) 元素要设置dragable属性:true,false,auto 被拖动元素上面有三个事件,drag,dragend,按下左键,移动种,鼠标松,这三个事件一般只用获取我们的被拖动元素 event是可以继承的,mouseevent鼠标事件,dragevent拖放事件,前面都是一个个继承的 释放…

鸿蒙4.0开发笔记之ArkTS语法基础之数据传递与共享详细讲解(十八)

文章目录 一、路由数据传递(router)1、路由数据传递定义2、路由数据传递使用方法3、数据传递两个页面的效果 二、页面间数据共享(EntryAbility)1、定义2、实现案例3、避坑点 三、数据传递练习 一、路由数据传递(router…

SAP物料会计视图的价格确定MLAST为空后台补录

物料10013812 工厂会计视图的价格确定为空,前台目前无法修改,申请修改底表,将价格确定调整为2 解决: 该字段涉及:MBEW表和CKMLHD表的MLAST字段两个地方,经修改后,前后台数据一致。 只改技术信…

自动化运维工具-ansible部署

首先我们来谈一下,为什么要引入自动化运维呢? 引入自动化运维的目的是为了提高运维效率、降低人工操作的错误率、减少重复性的工作、提高系统的可靠性和稳定性。传统的手动运维方式存在以下问题: 出现了大量的人工干预,运维人员需…

AI伦理专题报告:2023年全球人工智能伦理治理报告

今天分享的是人工智能系列深度研究报告:《AI伦理专题报告:2023年全球人工智能伦理治理报告》。 (报告出品方:钛媒体国际智库) 报告共计:239页 摘要 人工智能(ArtificialIntelligence)作为新一轮科技革命…