【Spring Cloud Alibaba】前置知识

  • 1. 微服务介绍
    • 1.1 系统架构的演变
      • 1.1.1 单体应用架构
      • 1.1.2 垂直应用架构
      • 1.1.3 分布式架构
        • 1.1.3.1 SOA架构
      • 1.1.4 微服务架构

1. 微服务介绍

1.1 系统架构的演变

随着互联网的发展,网站应用的规模也在不断的扩大,进而导致系统架构也在不断的进行变化。从互联网早期到现在,系统架构大致经过下面几个过程:单体应用架构->垂直应用架构->分布式架构->SOA架构->微服务架构,当然还有现在的Service Mesh(服务网格化)。

1.1.1 单体应用架构

在互联网发展初期,网站应用的流量普遍较小,通常采用单一应用架构。这种架构将全部功能模块集中部署,能有效降低开发、部署和维护成本。

以电商系统为例,该系统可能包含用户管理、商品管理、订单管理和物流等模块。在传统架构下,这些功能会被整合为单个Web项目,并统一部署到Tomcat服务器上运行。

优点:

  • 项目结构简单,小型项目,开发成本低
  • 项目部署在一个节点上,维护方便

缺点:

  • 全部功能集成在一个工程上,对大型项目来讲不易开发和维护
  • 项目模块之间紧密耦合,单点容错率低
  • 无法针对不同模块进行针对性优化和水平扩展

1.1.2 垂直应用架构

在这里插入图片描述
概念

  • 按照业务线/功能模块,把系统拆分为多个 独立应用。

  • 例如:

    • 用户系统(user service)
    • 订单系统(order service)
    • 支付系统(payment service)
  • 各自有 独立的数据库和应用,之间通过接口交互。

✅ 优点:

  • 降低单个应用的复杂度,团队可以并行开发。
  • 部署隔离:更新某个模块不会影响整个系统。
  • 可以选择不同技术栈(支付模块用 Java,推荐模块用 Python)。
  • 对外可以按业务线提供不同入口(PC 端、App 端、管理后台)。

❌ 缺点:

  • 系统之间接口调用增加,接口维护复杂。
  • 数据不再集中,可能存在 数据冗余 & 一致性问题。
  • 认证、权限、日志、监控等需要在各应用间统一。

1.1.3 分布式架构

概念

  • 在垂直应用的基础上,进一步把业务系统拆解成更小的 服务单元(Service)。
  • 通过 分布式技术(RPC、消息队列、负载均衡、服务注册发现等)来管理和调用。
  • 演进方向:SOA → 微服务(Microservices) → 云原生(Kubernetes、Service Mesh)。

✅ 优点:

  • 高扩展性:可以对某个服务做水平扩容(例如秒杀时只扩容订单服务)。
  • 高可用:通过服务治理、容错机制(熔断、限流、降级)保证稳定性。
  • 灵活性:服务独立部署、迭代,团队可用不同语言实现。
  • 可支撑大规模并发与复杂业务场景。

❌ 缺点:

  • 架构复杂度大大提升。
  • 服务间调用涉及 网络通信开销、延迟、容错。
  • 分布式事务、一致性问题难处理。
  • 需要配套的 服务治理体系(如注册中心、配置中心、监控报警、链路追踪)。
1.1.3.1 SOA架构

SOA(Service-Oriented Architecture,面向服务的架构)其实就是 分布式架构早期的一种实现模式,它是从“垂直应用”往“分布式架构”过渡的重要阶段。

SOA 是一种架构思想,它把系统功能抽象为 服务(Service),不同服务之间通过 统一的服务接口协议(通常是基于网络的调用,如WebService、SOAP、ESB)进行通信和组合。

✅ 优点

  1. 解耦:通过服务接口屏蔽内部实现,不同系统只关心服务定义。

  2. 复用:一个服务可以被多个业务系统调用(例如统一的支付服务)。

  3. 灵活组合:多个服务可以通过编排组合成新的业务流程。

  4. 跨平台:不同服务可以用不同技术栈实现(Java、.NET、Python 都行)。

❌ 缺点

  1. 实现复杂:需要引入 ESB(Enterprise Service Bus)做消息路由、转换、协议适配。

  2. 性能问题:早期 SOA 大多基于 SOAP/XML,通信开销大,性能较低。

  3. 中心化风险:ESB 过度集中,容易成为瓶颈或单点故障。

  4. 运维成本高:需要大量治理(安全、事务、监控)。


SOA 和微服务(Microservices)的区别

对比维度SOA微服务
通信方式传统使用 ESB + SOAP/XML轻量化,RESTful/HTTP、gRPC、消息队列
服务粒度相对粗,服务更大相对细,每个服务只做一件事
服务编排依赖 ESB,中心化编排去中心化,服务自治,通常使用 API Gateway + 注册中心
技术复杂度高,需要重量级中间件相对轻,依赖云原生生态(K8s、Spring Cloud、Dubbo)
弹性扩展不灵活,容易受限于 ESB灵活,支持容器化、自动扩缩容

👉 可以说 微服务是对 SOA 的轻量化和进化,解决了 SOA 中心化、臃肿的问题。

举个例子

假设一个电商系统:

  • SOA 模式下

    • 有 支付服务、订单服务、库存服务
    • 所有应用通过 ESB 调用这些服务
    • ESB 会处理协议转换、消息路由、服务编排
  • 微服务模式下

    • 每个服务独立运行
    • 通过 注册中心(Eureka/Nacos) + API Gateway 直接通信
    • 不需要依赖一个中心化的 ESB

1.1.4 微服务架构

微服务架构是一种 架构风格,它将复杂应用拆分成一组 小而独立的服务。
每个服务围绕 单一业务能力 构建(如用户服务、订单服务、支付服务),独立开发、部署和运维,通过 轻量级通信机制(HTTP REST、gRPC、消息队列等) 进行交互。

微服务架构的核心特征
1.服务小而专一

  • 每个服务只负责一个明确的业务功能。
  • 例如:订单服务只负责订单的创建、查询,不会处理用户登录。

2.独立部署

  • 服务是独立的进程,可以单独部署,不影响其他服务。
  • 便于快速迭代、灰度发布。

3.去中心化治理

  • 没有像 SOA 的 ESB 单点瓶颈。

  • 服务之间直接通过注册中心(Eureka/Nacos/Consul)发现和通信。

4.轻量通信

  • 常用 RESTful API、gRPC、消息队列。
  • 弃用了 SOAP/XML 这种重量级通信协议。

5.分布式特性

  • 支持服务弹性伸缩(秒杀时扩容订单服务)。
  • 容错机制:熔断、限流、降级(Hystrix、Sentinel)。
  • 配置中心、日志监控、链路追踪等支撑系统。

优缺点
✅ 优点

  1. 灵活扩展:不同服务可独立水平扩容。

  2. 高可用:某个服务挂了,不会拖垮整个系统。

  3. 技术多样性:每个服务可用最适合的技术栈(Java、Go、Python…)。

  4. 快速迭代:不同团队负责不同服务,能并行开发。

❌ 缺点

  1. 架构复杂度高:涉及服务治理、分布式事务、网络调用问题。

  2. 运维成本高:服务数量多,部署、监控、调试更复杂。

  3. 数据一致性难:一个业务可能涉及多个服务,需要分布式事务或最终一致性。

  4. 性能开销:服务之间是远程调用(RPC/HTTP),比单体的本地调用慢。


微服务 vs 单体应用 vs SOA

特点单体应用SOA微服务
架构一个整体应用服务化,但依赖 ESB小服务 + 去中心化治理
部署整体部署部署多个服务,但耦合 ESB每个服务独立部署
通信方法调用(本地)SOAP/XML,依赖 ESBREST/gRPC/消息队列
扩展性不灵活一定灵活,但中心化瓶颈高度灵活,天然支持云原生
技术栈单一多样,但受限于 ESB完全多样,自由度更高

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

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

相关文章

2025互联网大厂Java面试1000道题目及参考答案

Java学到什么程度可以面试工作? 要达到能够面试Java开发工作的水平,需要掌握以下几个方面的知识和技能: 1. 基础扎实:熟悉Java语法、面向对象编程概念、异常处理、I/O流等基础知识。这是所有Java开发者必备的基础,也…

记录:HSD部署(未完成)

建数据库 相关文档:Confluence准备:CA文件和备份用的aws key。 CA文件:在namespace添加trust-injectionenabled的标签,会自动生成。 aws key:生成cnpg-backup-creds的secret。安装: 从git仓库获取values模…

【AI】提示词与自然语言处理:从NLP视角看提示词的作用机制

提示词与自然语言处理:从 NLP 视角看提示词的作用机制在人工智能快速发展的今天,大模型成为了人们关注的焦点。而要让大模型更好地理解人类意图、完成各种任务,提示词扮演着关键角色。从自然语言处理(NLP)的角度来看&a…

2025.8.29机械臂实战项目

好久没给大家更新了,上周末大学大四开学,所以停更了几天,回来后在做项目,接下来的几篇文章,给大家带来几个项目,第一个介绍的是机械臂操作,说是机械臂操作,简单来说,就是…

【机器学习基础】机器学习的要素:任务T、性能度量P和经验E

第一章 机器学习的本质与理论框架 机器学习作为人工智能领域的核心支柱,其理论基础可以追溯到20世纪中叶的统计学习理论。Tom Mitchell在其1997年的经典著作《Machine Learning》中给出了一个至今仍被广泛引用的学习定义:"对于某类任务T和性能度量P,一个计算机程序被认…

wav音频转C语言样点数组

WAV to C Header Converter 将WAV音频文件转换为C语言头文件的Python脚本,支持将音频数据嵌入到C/C项目中。 功能特性 音频格式支持 PCM格式:支持8位、16位、24位、32位PCM音频IEEE Float格式:支持32位浮点音频多声道:支持单声道、…

01.《基础入门:了解网络的基本概念》

网络基础 文章目录网络基础网络通信核心原理网络通信定义信息传递过程关键术语解释网络的分类网络参考模型OSI 参考模型各层核心工作分层核心原则TCP/IP 参考模型(4 层 / 5 层,实际应用模型)TCP/IP 与 OSI 模型的对应关系传输层核心协议&…

基于vue驾校管理系统的设计与实现5hl93(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表:项目功能:学员,教练,教练信息,预约信息,场地信息,时间安排,车辆信息,预约练车,时间段,驾校场地信息,驾校车辆信息,预约报名开题报告内容:一、选题背景与意义背景随着汽车保有量持续增长,驾校行业规模不断扩大&am…

灰度思维:解锁世界原有本色的密码

摘要本文深入探讨灰度思维的概念内涵及其在处理他人评价中的应用价值。研究指出,灰度思维作为一种超越非黑即白的思维方式,能够帮助个体以更客观、全面的态度接受他人评价的片面性,从而促进个人成长和人际关系和谐。文章分析了他人评价片面性…

动态规划--Day03--打家劫舍--198. 打家劫舍,213. 打家劫舍 II,2320. 统计放置房子的方式数

动态规划–Day03–打家劫舍–198. 打家劫舍,213. 打家劫舍 II,2320. 统计放置房子的方式数 今天要训练的题目类型是:【打家劫舍】,题单来自灵艾山茶府。 掌握动态规划(DP)是没有捷径的,咱们唯一…

Nuxt.js@4 中管理 HTML <head> 标签

可以在 nuxt.config.ts 中配置全局的 HTML 标签,也可以在指定 index.vue 页面中配置指定的 HTML 标签。 在 nuxt.config.ts 中配置 HTML 标签 export default defineNuxtConfig({compatibilityDate: 2025-07-15,devtools: { enabled: true },app: {head: {charse…

UCIE Specification详解(十)

文章目录4.5.3.7 PHYRETRAIN(物理层重训练)4.5.3.7.1 Adapter initiated PHY retrain4.5.3.7.2 PHY initiated PHY retrain4.5.3.7.3 Remote Die requested PHY retrain4.5.3.8 TRAIN ERROR4.5.3.9 L1/L24.6 Runtime Recalibration4.7 Multi-module Link…

电商数据的获取方式:API、爬虫、第三方服务及更多

在竞争激烈的电商领域,数据是驱动业务增长的关键。准确、及时地获取电商数据,并进行深入分析,能够帮助企业洞察市场趋势、优化运营策略、提升用户体验。本文将全面介绍电商数据的获取方式,涵盖API接口、网络爬虫技术、第三方数据服…

《WINDOWS 环境下32位汇编语言程序设计》第8章 通用对话框

Windows操作系统为一些常用功能提供了一些通用对话框(Common Dialog Box),比如,在不同的应用程序中进行打开文件、选择字体、选择颜色等操作时,不同程序显示的对话框的模样都是一样的。另外,把同样的应用程…

SOME/IP-SD协议中组播IP地址和端口号应从何处获取、由谁设置?

<摘要> AUTOSAR SOME/IP-SD协议中组播通信参数的核心配置规则明确规定了在服务端传输&#xff08;Server-Transmits&#xff09;和客户端传输&#xff08;Client-Transmits&#xff09;两种模式下&#xff0c;组播IP地址和端口号应从何处获取、由谁设置&#xff0c;从而确…

DAY49打卡

追到第45天内容浙大疏锦行

十四、测试 (Testing)

Rust内置了强大的测试框架,使得编写和运行测试变得非常简单。Rust的测试系统主要包括单元测试、集成测试和文档测试。 1. 单元测试 单元测试通常放在与被测试代码相同的文件中,使用#[cfg(test)]模块和#[test]属性标记。 1.1 基本测试结构 // 在src/lib.rs或任何模块中pub…

LeetCode 刷题【56. 合并区间】

56. 合并区间 自己做 解&#xff1a;排序合并 class Solution { public:static bool compare(const vector<int> &p1, const vector<int> &p2){ //按第一个数排序return p1[0] < p2[0]; }vector<vector<int>> merge(ve…

DistributedLock 实现.Net分布式锁

在分布式系统中&#xff0c;经常会遇到多个实例同时访问同一份资源的情况&#xff0c;例如&#xff1a; • 多个服务节点同时写入数据库同一行数据• 定时任务在多个节点上同时运行&#xff0c;导致重复执行• 多实例写缓存时出现数据覆盖问题 为了解决 并发冲突 和 数据一致…

Flutter:ios打包ipa,证书申请,Xcode打包,完整流程

步骤1 - 5 为 申请ios的签名文件&#xff0c;App ID&#xff0c;证书&#xff0c;描述文件&#xff0c;并添加测试打包设备。 步骤1&#xff1a;生成证书签名文件&#xff08;打开钥匙串访问>证书助理>从证书颁发机构请求证书&#xff09; 存储后得到了一个签名文件&…