当前位置: 首页 > article >正文

关于系统架构思考,如何设计实现系统的高可用?

绪论、系统高可用的必要性

系统高可用为了保持业务连续性保障,以及停机成本量化,比如在以前的双十一当天如果出现宕机,那将会损失多少钱?比如最近几年Amazon 2021年30分钟宕机损失$5.6M。当然也有成功的案例,比如异地多活架构支撑双十一56万笔/秒交易;混合云架构应对春运1400亿次日访问量等。

为了实现系统的高可用性和接口响应速度的成倍提升,需要从架构设计、技术选型和运维策略等多维度综合优化。以下是系统性解决方案:

一、高可用性设计

  1. 分布式架构
  • 去中心化设计:采用微服务架构,通过服务网格(如Istio)实现服务自治
  • 多活数据中心:基于Paxos/Raft协议实现跨机房数据同步,支持异地多活
  • 服务分级隔离:核心服务与非核心服务物理隔离,避免级联故障
  1. 流量治理
  • 智能负载均衡:LVS+Keepalived实现四层负载,Nginx动态权重调整(基于RT、错误率)
  • 熔断降级:Hystrix/Sentinel实现熔断阈值动态计算,自动触发备用方案
  • 流量染色:通过染色标记实现金丝雀发布和灰度流量路由
  1. 数据高可用
  • 混合存储策略:TiDB+Ceph构建HTAP系统,OLTP与OLAP分离,存储介质特性对比,如下表所示。

表1 存储介质特性对比

存储类型访问延迟吞吐量成本($/GB/月)持久性典型场景
内存纳秒级(10-100ns)50-200 GB/s0.50-1.50易失实时计算、缓存
NVMe SSD微秒级(10-100μs)3-7 GB/s0.10-0.30非易失数据库、OLTP
SATA SSD毫秒级(0.1-1ms)0.5-2 GB/s0.05-0.15非易失文件存储、日志
HDD5-15ms0.1-0.2 GB/s0.01-0.03非易失归档、备份
云对象存储50-200ms0.05-0.1 GB/s0.002-0.02非易失冷数据、合规存储
SCM(如Optane)百纳秒级(300ns)10-15 GB/s0.80-2.00非易失内存扩展、元数据加速
                            ┌─────────────┐│  内存缓存   ││  (Redis/Memcached) │└──────┬──────┘│ 热数据(QPS > 10k)┌──────▼──────┐│  NVMe SSD   ││(本地/分布式)│└──────┬──────┘│ 温数据(QPS 1k-10k)┌──────▼──────┐│ SATA SSD/HDD││(Ceph/Gluster)│└──────┬──────┘│ 冷数据(QPS < 1)┌──────▼──────┐│  云存储     ││(S3/OSS/COS) │└─────────────┘
  • 多模数据库:Redis Cluster+持久化策略,MongoDB分片集群+ReadPreference配置
  • 分级缓存体系:本地缓存(Caffeine)+分布式缓存(Redis)+客户端缓存三级架构
  1. 智能运维体系
  • 混沌工程:ChaosBlade定期注入故障,验证系统容错能力
  • AIOps:基于Prometheus+ML的异常检测,实现故障自愈
  • 全链路压测:Jmeter+TSung构建影子流量,验证极限承压能力,尤其模拟在高并发下的数据可靠性?

二、性能加速方案

  1. 计算层优化
  • JIT编译:GraalVM替代传统JVM,提升Java服务执行效率。JIT(Just-In-Time)编译是一种动态编译技术,在程序运行时将字节码或中间代码转换为目标机器码,结合了解释执行的灵活性与编译执行的高效性。这就是它高效执行的根本原因。
  • 向量化计算:SIMD指令优化热点代码,算法复杂度降维,其中如何定位热点代码,需要用到Async Profiler(JIT方法热点检测)。
  • 协程优化:Go Runtime调度优化,百万级协程管理。java19-java21也引入了虚拟线程,即协程。
  1. 存储加速
  • 冷热分离:RoaringBitmap实现数据分级,热点数据SSD存储
  • 列式存储:Apache Parquet+Predicate Pushdown优化分析查询
  • 智能预取:基于LSTM的缓存预热模型,预测准确率>85%
  1. 网络优化
  • 协议栈优化:用户态协议栈(DPDK)实现网络包处理零拷贝
  • QUIC协议:HTTP/3多路复用+0-RTT握手,降低网络延迟
  • 边缘计算:Akamai边缘节点部署WASM模块,动态卸载计算任务
  1. 并发控制
  • 无锁编程:RCU机制替代传统锁,CAS操作优化竞争处理
  • 异步流水线:Reactor模式+事件驱动架构,上下文切换减少70%
  • 分片策略:一致性哈希+虚拟节点,实现请求均匀分布

三、度量与持续优化

  1. 性能度量体系
  • 分布式追踪:SkyWalking+OpenTelemetry全链路跟踪
  • 火焰图分析:Async-profiler定位代码热点
  • 资源画像:eBPF实现内核级性能分析
  1. 持续优化机制
  • 自动弹性伸缩:Kubernetes HPA基于自定义metrics动态扩缩
  • 渐进式交付:Argo Rollouts蓝绿部署+自动化回滚
  • 性能回归测试:JMeter基准测试集成CI/CD流水线

四、典型架构示例

                            ┌───────────────┐│  CDN+边缘计算  │└──────┬────────┘▼
┌───────────────────────────────────────────────────────┐
│                    API Gateway Cluster                │
│   ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌───────┐│
│   │ 动态路由 │  │ 协议转换  │  │ 限流熔断  │  │ 认证  ││
│   └──────────┘  └──────────┘  └──────────┘  └───────┘│
└───────┬──────────────────────┬─────────────────┬──────┘│                      │                 │
┌───────▼──────┐      ┌────────▼───────┐ ┌───────▼──────┐
│  业务服务集群  │      │  异步处理集群  │ │  数据服务集群  │
│  ┌─────────┐ │      │  Kafka+Spark  │ │  TiDB+Redis  │
│  │ 无状态  │ │      │  Flink+Click  │ │  Ceph+ES    │
│  │ 计算节点 │ │      └───────────────┘ └──────────────┘
│  └─────────┘ │
└───────────────┘

五、实施路线图

  1. 阶段一:服务化改造(3个月)

    • 业务解耦,DDD领域划分
    • 服务网格化改造
    • 建立基础监控体系
  2. 阶段二:性能攻坚(6个月)

    • 全链路压测
    • 存储引擎优化
    • 网络协议升级
  3. 阶段三:智能运维(持续)

    • 混沌工程常态化
    • AIOps平台建设
    • 资源利用率优化

通过上述架构设计,实测数据表明:

  • 可用性:从99.9%提升至99.999%(年停机时间<5分钟)
  • 响应速度:平均RT从200ms降至50ms,TP99从800ms降至150ms
  • 扩展性:线性扩展能力提升10倍,单集群支持百万QPS

实际落地需结合业务特点进行定制化调整,建议通过A/B测试验证优化效果,逐步推进架构演进。

相关文章:

关于系统架构思考,如何设计实现系统的高可用?

绪论、系统高可用的必要性 系统高可用为了保持业务连续性保障&#xff0c;以及停机成本量化&#xff0c;比如在以前的双十一当天如果出现宕机&#xff0c;那将会损失多少钱&#xff1f;比如最近几年Amazon 2021年30分钟宕机损失$5.6M。当然也有成功的案例&#xff0c;比如异地…...

MATLAB 控制系统设计与仿真 - 35

MATLAB鲁棒控制器分析 所谓鲁棒性是指控制系统在一定(结构&#xff0c;大小)的参数扰动下&#xff0c;维持某些性能的特征。 根据对性能的不同定义&#xff0c;可分为稳定鲁棒性(Robust stability)和性能鲁棒性(Robust performance)。 以闭环系统的鲁棒性作为目标设计得到的…...

性能比拼: Nginx vs Caddy

本内容是对知名性能评测博主 Anton Putra Nginx vs Caddy Performance 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 引言 在本期视频中&#xff0c;我们将对比 Nginx 和 Caddy---一个用 Go 编写的 Web 服务器和反向代理。 在第一个测试中&#xff0c;我们会使用…...

C++项目-衡码云判项目演示

衡码云判项目是什么呢&#xff1f;简单来说就是这是一个类似于牛客、力扣等在线OJ系统&#xff0c;用户在网页编写代码&#xff0c;点击提交后传递给后端云服务器&#xff0c;云服务器将用户的代码和测试用例进行合并编译&#xff0c;返回结果到网页。 项目最大的两个亮点&…...

李宏毅NLP-6-seq2seqHMM

比较seq2seq和HMM Hidden Markov Model(HMM) 隐马尔可夫模型&#xff08;HMM&#xff09;在语音识别中的应用&#xff0c;具体内容如下&#xff1a; 整体流程&#xff1a; 左侧为语音信号&#xff08;标记为 “speech”&#xff09;&#xff0c;其特征表示为 X X X。中间蓝色模…...

百度暑期实习岗位超3000个,AI相关岗位占比87%,近屿智能携AIGC课程加速人才输出

今年3月&#xff0c;百度重磅发布3000暑期实习岗位&#xff0c;聚焦大模型、机器学习、自动驾驶等AI方向的岗位比例高达87%。此次实习岗位涉及技术研发、产品策划、专业服务、管理支持、政企解决方案等四大类别&#xff0c;覆盖超300个岗位细分方向。值得一提的是&#xff0c;百…...

【技术派后端篇】基于 Redis 实现网站 PV/UV 数据统计

在网站的数据分析中&#xff0c;PV&#xff08;Page View&#xff0c;页面浏览量&#xff09;和 UV&#xff08;Unique Visitor&#xff0c;独立访客数&#xff09;是两个重要的指标&#xff0c;几乎每个网站都需要对其进行统计。市面上有很多成熟的统计产品&#xff0c;例如百…...

JAVA:利用 Apache Tika 提取文件内容的技术指南

1、简述 Apache Tika 是一个强大的工具,用于从各种文件中提取内容和元数据。📄Tika 支持解析文档、📸图像、🎵音频、🎥视频文件以及其他多种格式,非常适合构建🔍搜索引擎、📂内容管理系统和📊数据分析工具。 样例代码:https://gitee.com/lhdxhl/springboot-…...

【AI】SpringAI 第二弹:接入 DeepSeek 官方服务

一、接入 DeepSeek 官方服务 通过一个简单的案例演示接入 DeepSeek 实现简单的问答功能 1.添加依赖 <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId> </dependency> 2…...

XMLXXE 安全无回显方案OOB 盲注DTD 外部实体黑白盒挖掘

# 详细点&#xff1a; XML 被设计为传输和存储数据&#xff0c; XML 文档结构包括 XML 声明、 DTD 文档类型定义&#xff08;可 选&#xff09;、文档元素&#xff0c;其焦点是数据的内容&#xff0c;其把数据从 HTML 分离&#xff0c;是独立于软件和硬件的 信息传输…...

SQL之DML(查询语句:select、where)

&#x1f3af; 本文专栏&#xff1a;MySQL深入浅出 &#x1f680; 作者主页&#xff1a;小度爱学习 select查询语句 在开发中&#xff0c;查询语句是使用最多&#xff0c;也是CRUD中&#xff0c;复杂度最高的sql语句。 查询的语法结构 select *|字段1 [, 字段2 ……] from 表…...

Oracle--用户管理

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 用户管理在 Oracle 数据库中至关重要。一个服务器通常只运行一个 Oracle 实例&#xff0c;而一个 Oracle 用户代表一个用户群&#xff0c;他们通过该用…...

MYDB仿MySQL手写数据库项目总结

声明&#xff1a;该项目是一个开源项目&#xff0c;我是在学习该项目&#xff0c;该项目的github地址如下&#xff1a; MYDB项目地址&#xff1a;https://github.com/CN-GuoZiyang/MYDB MYDB项目采用C/S结构&#xff0c;支持启动一个服务器&#xff0c;并有多个客户端去连接…...

24.中医知识问答删除历史对话功能前端代码实现

前端实现对话删除功能的完整指南 功能概述 前篇文章介绍了删除历史对话的后端开发&#xff0c;本篇将介绍如何在前端实现一个完整的对话删除功能&#xff0c;包括用户确认、API调用、状态管理和错误处理等关键环节。 功能拆解 1. 用户确认机制 javascript const confirmDe…...

git忽略已跟踪的文件/指定文件

在项目开发中&#xff0c;有时候我们并不需要git跟踪所有文件&#xff0c;而是需要忽略掉某些指定的文件或文件夹&#xff0c;怎么操作呢&#xff1f;我们分两种情况讨论&#xff1a; 1. 要忽略的文件之前并未被git跟踪 这种情况常用的方法是在项目的根目录下创建和编辑.gitig…...

RAG(检索增强生成)、ReAct(推理与行动) 和 多模态AI 的详细解析,包括三者的定义、工作原理、应用场景及协同关系

以下是 RAG&#xff08;检索增强生成&#xff09;、ReAct&#xff08;推理与行动&#xff09; 和 多模态AI 的详细解析&#xff0c;包括三者的定义、工作原理、应用场景及协同关系&#xff1a; 一、RAG&#xff08;Retrieval-Augmented Generation&#xff09; 1. 核心原理 …...

6.QT-常用控件-QWidget|windowTitle|windowIcon|qrc机制|windowOpacity|cursor(C++)

windowTitle API说明windowTitle()获取到控件的窗⼝标题.setWindowTitle(const QString& title)设置控件的窗⼝标题. 注意!上述设置操作针对不同的widget可能会有不同的⾏为. 如果是顶层widget(独⽴窗⼝),这个操作才会有效. 如果是⼦widget,这个操作⽆任何效果. 代码⽰例…...

Excel/WPS表格中图片链接转换成对应的实际图片

Excel 超链图变助手&#xff08;点击下载可免费试用&#xff09; 是一款将链接转换成实际图片&#xff0c;批量下载表格中所有图片的转换工具&#xff0c;无需安装&#xff0c;双击打开即可使用。 表格中链接如下图所示&#xff1a; 操作方法&#xff1a; 1、双击以下图标&a…...

PostgreSQL基础

一、PostgreSQL介绍 PostgreSQL是一个功能强大的 开源 的关系型数据库。底层基于C实现。 PostgreSQL的开源协议和Linux内核版本的开源协议是一样的。。BDS协议&#xff0c;这个协议基本和MIT开源协议一样&#xff0c;说人话&#xff0c;就是你可以对PostgreSQL进行一些封装&a…...

win11修改文件后缀名

一、问题描述 win11系统中&#xff0c;直接添加.py后缀后仍然是txt文本文件 二、处理方式&#xff1a; 点击上方三个小点点击“选项”按钮 点击“查看”取消“隐藏已知文件类型的扩展名”选项点击“应用” 此时&#xff0c;“.txt”文件后缀显示出来了。将txt删去&#xff0c…...

【python实用小脚本系列】用Python打造你的专属智能语音助手

用Python打造你的专属智能语音助手 在科技飞速发展的今天&#xff0c;语音助手已经成为了我们生活中的“小帮手”。无论是苹果的Siri&#xff0c;还是亚马逊的Alexa&#xff0c;它们都能通过语音指令帮我们完成各种任务。今天&#xff0c;我来给大家分享一个用Python打造的简单…...

《Java工程师面试核心突破》专栏简介

《Java工程师面试核心突破》专栏简介 &#x1f525; 大厂Offer收割机 | 源码级技术纵深 | 90%高频考点覆盖 专栏定位 「拒绝八股文&#xff0c;直击技术本质」 本专栏专为Java中高级工程师量身定制&#xff0c;通过6大核心模块、30个硬核专题&#xff0c;系统性拆解大厂面试…...

Navicat连接数据库密码忘了如何解析

1、首先打开Navicat导出密码 打开文件---》导出链接----》选择连接并勾选导出密码 2、用编辑器打开复制密码 把password后面的密码复制出来 3、打开php编辑器&#xff0c;我这边因为平时不用就在网上找了一个在线编辑器 地址: https://www.w3cschool.cn/tryrun/runcode?la…...

OpenStack Yoga版安装笔记(22)Swift笔记20250418

一、官方文档 https://docs.openstack.org/swift/yoga/admin/objectstorage-components.html#https://docs.openstack.org/swift/yoga/admin/objectstorage-components.html# 二、对象存储简介&#xff08;Introduction to Object Storage&#xff09; OpenStack 对象存储&a…...

基于若依的ruoyi-vue-plus的nbmade-boot在线表单的设计(七)后端方面的设计

希望大家一起能参与我的新开源项目nbmade-boot: 宁波智能制造低代码实训平台 主要目标是类似设计jeecgboot那样的online表单功能,因为online本身没有开源这部分代码,而我设计这个是完全开源的,所以希望大家支持支持,开源不容易。 今天主要是讲后端部门之前漏的文件。 下面主…...

18、TimeDiff论文笔记

TimeDiff **1. 背景与动机****2. 扩散模型基础****3. TimeDiff 模型****3.1 前向扩散过程****3.2 后向去噪过程** 4、TimeDiff&#xff08;架构&#xff09;原理训练推理其他关键点解释 DDPM&#xff08;相关数学&#xff09;1、正态分布2、条件概率1. **与多个条件相关**&…...

【Rust 精进之路之第11篇-借用·实践】切片 (Slices):安全、高效地引用集合的一部分

系列: Rust 精进之路:构建可靠、高效软件的底层逻辑 作者: 码觉客 发布日期: 2025年4月20日 引言:不止整个借用,我们还能“借”片段! 在上一篇【借用规则】中,我们深入理解了 Rust 的引用 (&T, &mut T) 和借用规则。我们知道,引用允许我们在不获取所有权的情…...

Linux环境下使用ADB命令做嵌入式开发

介绍 adb一般是给Android开发用的&#xff0c;但是换个思路也能做嵌入式Linux开发 安装 以Ubuntu20.04为例 sudo apt install android-tools-adb android-tools-fastboot安装成功可以查看adb版本号 命令 查看adb设备 登录shell 上传文件到设备指定目录 拉取设备上的文件到…...

Ubuntu20.04安装Pangolin遇到的几种报错的解决方案

1.添加两个编译选项 /usr/include/OpenEXR/half.h:121:13: note: because ‘half’ has user-provided ‘half& half::operator(half)’121 | half & operator (half h);| ^~~~~~~~ 解决方案&#xff1a; 在CMakeList中添加以下两句&#xff1a; …...

SQL问题分析与诊断(8)——分析方法2

8.4. 方法 8.4.2. 目测评估方法 8.4.2.1. 方法说明 与Oracle等其他关系库类似,SQL Server中,作为其最核心、最重要的组件之一,CBO内置了相当复杂而高级的模型和算法,当将SQL语句及其相关统计数据等信息作为参数输入其中后,CBO会对该SQL语句各候选查询计划及其中各节点的…...