架构设计——云原生与分布式系统架构


** 云原生与分布式系统架构**

5.1 云选型策略:多云、混合云还是单云?如何决定?

“上云”已无需讨论,但“上什么云”是第一个战略决策。

  • 单云(Single Cloud)策略:

    • 描述: 将全部资源集中在一个云提供商(如AWS、Azure、GCP)。
    • 优点:
      • 管理简单: 一套管理控制台、一套账单、一套身份认证体系(IAM)。
      • 深度集成: 能充分利用该云提供的所有高阶托管服务(如AWS的DynamoDB、Lambda),这些服务间通常有深度优化和集成,能极大提升开发效率和质量。
      • 成本优化: 资源用量越大,折扣(如预留实例、承诺使用折扣)力度通常越大。
    • 缺点:
      • 供应商锁定(Vendor Lock-in): 这是最大风险。一旦深度使用了某云的特有服务,迁移到其他云的成本将极其高昂,甚至不可能。
      • 区域性风险: 如果该云在某个区域发生重大故障,你的业务会受影响。
    • 适用场景: 绝大多数初创公司和中小型企业的首选。追求快速开发和迭代,且无法承受多云带来的复杂性。
  • 多云(Multi-Cloud)策略:

    • 描述: 同时使用两个或多个云提供商的服务。
    • 优点:
      • 避免锁定: 保持灵活性,可以在云商之间进行价格和服务谈判。
      • 高可用与容灾: 可以设计跨云的高可用架构,在一个云出现全局性故障时切换到另一个云。
      • 选择最佳服务: 可以为不同 workload 选择不同云上最优秀的服务(例如,在GCP上跑AI,在AWS上跑通用计算)。
    • 缺点:
      • 复杂度极高: 需要掌握多套云API、管理控制台和网络配置。需要自己解决跨云的网络互通、数据同步、身份治理等问题。
      • 成本可能更高: 无法在每个云上都达到能获得最大折扣的用量,管理成本也更高。
    • 适用场景: 大型企业出于规避风险和政策合规的要求;或有特定 workload 需要不同云的独特优势。
  • 混合云(Hybrid Cloud)策略:

    • 描述: 同时使用公有云和私有云(或本地数据中心)。
    • 优点: 兼顾公有云的弹性和私有云的数据控制、合规性、低延迟(对本地)。
    • 缺点: 兼具单云和多云的部分缺点,且需要解决更复杂的网络连接(如专线)和数据同步问题。
    • 适用场景: 传统企业数字化转型的过渡阶段;金融、政府等对数据主权有严格要求的行业。
  1. 默认从单云开始,除非有强烈的规避锁定或合规需求。
  2. 即使在单云策略下,在设计上也要为未来可能的变化留有余地
    • 抽象云服务: 对云服务的使用进行封装,例如定义一个MessageQueue接口,其实现可以是AWS SQS,也可以是Azure Service Bus。这样未来更换提供商只需换一个实现。
    • 使用CNCF技术栈: 优先采用Kubernetes、Prometheus、Istio等云原生开源方案,它们在不同云上具有良好的一致性,是对抗锁定的有效手段。
5.2 计算架构选型:虚拟机、容器、Serverless 的适用场景与成本考量

计算是云的核心,选择正确的计算载体是优化性能和成本的关键。

| 计算模型 | 抽象层级 | 优点 | 缺点 | 适用场景 |
| :— | :— | :— | :— | :— |
| 虚拟机(VM) | 硬件 | • 成熟、隔离性强
• 兼容传统应用
• 控制粒度最细 | • 资源利用率低
• 启动慢(分钟级)
• 运维负担重(需管理OS) | • 遗留系统迁移
• 需要特定OS或内核配置的应用 |
| 容器(Container) | 进程 | • 启动快(秒级)
资源利用率高
• 环境一致性(Dev/Test/Prod)
• DevOps 友好 | • 共享OS内核,隔离性弱于VM
• 需要容器编排(如K8s)带来复杂度 | • 现代应用的事实标准
• 微服务架构
• 批处理任务 |
| Serverless | 函数/逻辑 | • 极致弹性(毫秒级伸缩至0)
按实际使用付费,成本最优
• 无需管理服务器**,运维负担最低** | • 冷启动延迟
• 运行时长和资源限制
• 调试和观测更复杂
• vendor 锁定风险较高 | • 事件驱动型应用(文件处理、消息触发)
• 流量波动巨大的API后端
• Cron job类定时任务 |

成本考量示例:

  • 一个持续运行的API服务: 使用容器或虚拟机更经济。
  • 一个每天只运行几分钟的数据处理作业: 使用Serverless(如AWS Lambda)成本极低,因为只为运行时间付费。
  • 一个流量波动巨大的活动页面后端: Serverless能自动应对流量高峰,在低谷时成本几乎为0,是完美选择。
5.3 分布式通信:同步(REST, gRPC) vs 异步(消息队列)模式与实践

服务间如何通信,决定了系统的耦合度和弹性。

  • 同步通信(Synchronous):

    • 模式: 调用方发起请求后阻塞等待被调用方返回响应。
    • 技术: RESTful API (HTTP/JSON)、gRPC (HTTP/2, Protobuf)、GraphQL。
    • 优点: 简单、直观,能立即得到结果。
    • 缺点:
      • 耦合性高: 调用方必须知道被调用方的地址,且要求对方在线。
      • 级联故障: 如果被调用方响应慢或宕机,调用方线程也会被阻塞,可能导致整个系统链式雪崩。
    • 适用场景: 需要立即得到结果的操作,如用户下单前的库存查询。
  • 异步通信(Asynchronous):

    • 模式: 调用方发送消息后不等待立即返回,通过回调或事件驱动的方式处理后续结果。
    • 技术: 消息队列(Message Queue),如RabbitMQ、Kafka、RocketMQ。
    • 优点:
      • 解耦: 发送方和接收方彼此不知晓对方存在,只需约定消息格式。
      • 缓冲与削峰: 消息队列可以堆积请求,防止下游系统被突发流量冲垮。
      • 弹性与容错: 下游系统临时宕机不影响上游发送消息,消息会持久化直到被成功处理。
    • 缺点: 架构更复杂,需要处理消息丢失、重复消费、顺序保证等问题;不能立即得到结果。
    • 适用场景: 耗时操作(如发送邮件、处理视频)、需要保证最终一致性的业务(如扣库存和生成订单)、数据同步。
  1. 默认优先考虑异步、基于事件的模式,尤其是跨核心领域边界的调用,这能显著降低系统耦合度。
  2. 只有在操作本身是快速、且需要即时反馈时,才使用同步调用。
  3. 超时、重试和熔断(Circuit Breaker) 是同步通信中必须实施的防护模式,以防止级联故障。
5.4 核心难题破解:分布式事务、最终一致性、幂等性、重试与补偿机制

这是分布式系统的“魔鬼四重奏”,必须熟练掌握其应对之道。

  • 分布式事务(Distributed Transaction):

    • 难题: 如何保证跨多个数据库/服务的操作要么全部成功,要么全部失败?
    • 破解: 避免使用传统的两阶段提交(2PC,性能差、实现复杂)。采用最终一致性模式,并通过以下模式组合实现:
      • ** Saga模式:** 将一个分布式事务拆分为一系列本地事务,每个本地事务都有对应的补偿事务(Compensating Action)。如果某个步骤失败,则按顺序执行前面所有步骤的补偿操作来回滚。
        • 示例: “创建订单”Saga:1. 订单服务(创建订单状态为“中”)-> 2. 库存服务(扣减库存)-> 3. 支付服务(扣款)。如果步骤3失败,则触发补偿:支付服务(空补偿)-> 库存服务(增加库存)-> 订单服务(更新订单状态为“失败”)。
  • 幂等性(Idempotency):

    • 难题: 由于网络超时、客户端重试等原因,同一个请求可能被多次发送,如何保证重复请求不会产生副作用?(例如,重复支付)
    • 破解:
      • 令牌机制(Token): 客户端先申请一个唯一令牌(Token),发起请求时携带该令牌。服务端在处理前检查该令牌是否已使用过。
      • 唯一键约束: 利用数据库唯一索引,如订单ID、流水号,防止重复数据产生。
    • 黄金法则: 所有可能重试的操作都必须设计成幂等的。
  • 重试与退避(Retry & Backoff):

    • 难题: 调用失败后立即重试可能会加重下游负担,导致雪崩。
    • 破解:
      • 指数退避(Exponential Backoff): 重试的间隔时间随着重试次数指数级增加(如1s, 2s, 4s, 8s…),给下游服务恢复的时间。
      • 重试上限: 设定最大重试次数,超过后则失败,避免无限重试。
    • 建议: 使用具备熔断和退避能力的客户端(如Resilience4j, Polly)或服务网格(Service Mesh)来统一处理。

本章总结:
云原生和分布式架构带来了弹性与 scale 的优势,也引入了前所未有的复杂性。架构师的价值在于:在面对具体业务场景时,能清晰地权衡单云与多云的利弊,为不同工作负载选择最合适的计算资源,设计出耦合度低、弹性高的通信模式,并运用Saga、幂等、熔断等模式妥善解决分布式带来的难题,从而构建出既健壮又高效的数字系统。


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

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

相关文章

Python图片转WebP常用库推荐:Pillow、Wand、cv2

摘要 Python转换图片为WebP,Pillow最推荐:安装简单(pip install pillow)、使用方便,代码示例显示处理RGBA转RGB等细节,适合多数场景;Wand功能更强基于ImageMagick,适合需高级处理的场…

Android WPS Office 18.20

WPS Office是一款集Word,PDF,Sheet,PowerPoint,表格,文档,云存储,模板库和在线编辑与共享于一体的多功能免费办公套件。它提供类似于Microsoft Office的功能,包括文字处理、表格编辑…

Elasticsearch核心配置与性能优化

以下是Elasticsearch(ES)的 核心配置项 及 性能优化措施,涵盖硬件、系统、ES配置、索引设计等关键方面,帮助提升集群稳定性与查询性能:一、硬件与系统层优化内存分配 堆内存(Heap Size)&#xf…

【谷歌浏览器】浏览器实用自用版——谷歌浏览器(Google Chrome)离线纯净版安装 官方版无任何捆绑及广告 【离线安装谷歌浏览器】

经常上网的朋友们肯定深有体会:如今不少浏览器动不动就弹广告、塞插件,用起来简直是折磨。面对这些“全家桶”式捆绑,大家都渴望能找到一款干净、简洁、无打扰的浏览器——这时候,Google Chrome(谷歌浏览器&#xff09…

2025年渗透测试面试题总结-39(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 3. SAST(静态应用安全测试) 4. IAST(交互式应用安全测试) …

网站测试报告:WEB应用反CSRF的本质与防御机制

CSRF (跨站请求伪造) 本质: 攻击者诱骗已登录目标站点的用户,在不知情的情况下提交一个恶意请求。该请求利用用户浏览器中已存储的认证信息(如Cookie、Session),以该用户的身份执行未授权的操作(如修改密码…

2025年9月计算机二级C++语言程序设计——选择题打卡Day10

备考计算机二级 C 程序设计考试&#xff0c;选择题是不容忽视的重要部分。 今天为大家带来 10 道难点选择题&#xff0c;聚焦继承、多态等核心难点&#xff0c;助力提升解题精度。 1、有如下程序&#xff1a; #include<iostream> using namespace std; class Base { pub…

Formdata表单数据提交

前言&#xff1a;在表单数据提交中&#xff0c;常常除了字符串拼接的方式传给后端&#xff0c;一般可能还需要使用Fromdata的格式包装所要提交的表单数据传递。常用场景&#xff1a;表单数据提交一、Formdata的优势使用 FormData 主要是因为它有两个独特优势&#xff1a;能轻松…

React Native 初体验

前言 最近公司需要移植一个应用到 iOS 端&#xff0c;本来想要尝试 uniapp 的新架构 uniapp-x 的&#xff0c;折腾两天放弃了&#xff0c;选择了 React Native。 原因&#xff1a; HbuilderX 中的 uniapp-x 模版过于臃肿&#xff0c;夹杂很多不需要的东西&#xff08;可能是…

自动驾驶中的传感器技术36——Lidar(11)

本章节重点介绍和FMCWOPA Lidar强相关的硅光技术。 1、硅光技术概述&#xff08;Silicon Photonics&#xff09; 硅光技术主要是用在光通信中&#xff0c;利用硅作为光学介质&#xff0c;通过光传输和处理数据。与依赖电子进行数据传输的传统电子电路不同&#xff0c;硅光子学…

MapStruct用法和实践

一、MapStruct 用法1. 嵌套对象深度映射&#xff08;Deep Mapping&#xff09;// 源对象 public class User {private Address address;// getter/setter }public class Address {private String city;private String street; }// 目标对象 public class UserDTO {private Stri…

设计模式相关面试题

写在前面 &#x1f525;我把后端Java面试题做了一个汇总&#xff0c;有兴趣大家可以看看&#xff01;这里&#x1f449; ⭐️在反复复习面试题时&#xff0c;我发现不同资料的解释五花八门&#xff0c;容易造成概念混淆。尤其是很多总结性的文章和视频&#xff0c;要么冗长难…

访问者设计模式

访问者设计模式是一种行为模式&#xff0c;允许您向现有对象结构添加新作&#xff0c;而无需修改其类。 它通过允许您将算法与其作的对象分开来实现这一点。 它在以下情况下特别有用&#xff1a; 您有一个复杂的对象结构&#xff08;如 AST、文档或 UI 元素&#xff09;&#x…

Linux_用 `ps` 按进程名过滤线程,以及用 `pkill` 按进程名安全杀进程

用 ps 按进程名过滤线程&#xff0c;以及用 pkill 按进程名安全杀进程摘要&#xff1a; 过滤线程信息&#xff1a;教你用 ps -C、pgrepps 等多种姿势&#xff0c;既精准又避免误杀。按名字杀进程&#xff1a;用 pkill 一把梭&#xff0c;优雅还是强杀随你选&#xff0c;附带“先…

关于国产 RAC 和分布式研讨

本次研讨核心目标是围绕崖山 DB、达梦 DB、GBASE三款国产数据库&#xff0c;以及数据库内核开发吕工程师的分享&#xff0c;深入了解共享集群 RAC 的开发技术。但实际效果未达预期&#xff0c;参会者多围绕 “共享集群与分布式应用场景” 泛泛而谈&#xff0c;缺乏深度技术拆解…

传输层协议介绍

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档文章目录前言一、TCP协议介绍二、TCP报文格式三、TCP三次握手四、TCP四次挥手五、UDP协议介绍六、常见协议及其端口七、TCP与UDP的不同总结前言提示&#xff1a;这里可以添加本…

Vibe Coding 概念提出者 AndrejKarpathy 谈强化学习。

在预训练时代&#xff0c;关键在于互联网文本。你最需要的是一大批量、多样化且高质量的互联网文档&#xff0c;供模型从中学习。在监督微调&#xff08;SFT&#xff09;时代&#xff0c;核心则是对话数据。人们雇佣合同工人为问题撰写答案&#xff0c;类似于你在 Stack Overfl…

OSI模型和TCP/IP模型区别是什么

问题OSI模型和TCP/IP模型区别是什么我的回答OSI和TCP/IP这两个协议栈有几个主要区别&#xff1a;首先&#xff0c;层次结构不同。OSI是七层模型&#xff1a;物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而TCP/IP是四层模型&#xff1a;数据链路层、网络层、传…

ros2与gazebo harmonic机械臂仿真项目Moveit2YoloObb的优化

文章目录 关于项目RVIZ控制Gazebo Harmonic仿真机械臂GraphExecuter创建流程并通过Yolo算法抓取螺栓 关于项目 本文介绍ros2与gazebo harmonic机械臂仿真项目Moveit2YoloObb优化的内容&#xff0c;具体的代码细节就不赘述了&#xff0c;主要还是演示效果&#xff0c;包括RVIZ控…

Linux 系统调优与CPU-IO-网络内核参数调优

1. Linux系统调优1.1 安装工具包在开始监控前&#xff0c;需要确保系统已安装以下工具包&#xff0c;它们是后续操作的基础&#xff1a;sysstat&#xff1a;包含 mpstat、iostat、sar 等核心统计工具iotop&#xff1a;专门监控磁盘 I/O 的进程级工具nethogs&#xff1a;按进程查…