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

系统架构:高可用与容错设计

系统架构:高可用与容错设计

大家好,我是欧阳瑞(Rich Own)。今天想和大家聊聊系统架构这个重要话题。作为一个全栈开发者,高可用和容错设计是构建可靠系统的关键。今天就来分享一下高可用与容错设计的实战经验。

高可用概述

什么是高可用性?

高可用性是指系统在长时间内保持正常运行的能力 通常用几个9来衡量:99.9%、99.99%、99.999%

可用性计算

可用性 = (总时间 - 停机时间) / 总时间 × 100% 99.9% → 每年停机约8.77小时 99.99% → 每年停机约52.6分钟 99.999% → 每年停机约5.26分钟

核心策略

冗余设计 → 多副本部署 故障转移 → 自动切换 负载均衡 → 流量分发 监控告警 → 及时发现问题

容错设计

故障处理策略

策略说明适用场景
重试失败后重新请求网络抖动、临时故障
熔断暂时停止请求服务持续故障
降级提供降级服务非核心功能
限流限制请求数量流量突增

熔断器实现

class CircuitBreaker { constructor(options = {}) { this.failureThreshold = options.failureThreshold || 5; this.successThreshold = options.successThreshold || 3; this.timeout = options.timeout || 30000; this.state = 'closed'; this.failureCount = 0; this.successCount = 0; this.lastFailureTime = null; } async execute(fn) { if (this.state === 'open') { if (Date.now() - this.lastFailureTime > this.timeout) { this.state = 'half-open'; } else { throw new Error('Circuit breaker is open'); } } try { const result = await fn(); this.onSuccess(); return result; } catch (error) { this.onFailure(); throw error; } } onSuccess() { if (this.state === 'half-open') { this.successCount++; if (this.successCount >= this.successThreshold) { this.state = 'closed'; this.successCount = 0; this.failureCount = 0; } } else { this.failureCount = 0; } } onFailure() { this.failureCount++; this.lastFailureTime = Date.now(); if (this.failureCount >= this.failureThreshold) { this.state = 'open'; } } } // 使用 const breaker = new CircuitBreaker(); async function fetchData() { return breaker.execute(async () => { const response = await fetch('/api/data'); return response.json(); }); }

负载均衡

负载均衡算法

class LoadBalancer { constructor(servers) { this.servers = servers; this.index = 0; this.weights = servers.map(() => 1); } // 轮询 roundRobin() { const server = this.servers[this.index]; this.index = (this.index + 1) % this.servers.length; return server; } // 加权轮询 weightedRoundRobin() { let totalWeight = this.weights.reduce((a, b) => a + b, 0); let random = Math.random() * totalWeight; for (let i = 0; i < this.servers.length; i++) { random -= this.weights[i]; if (random <= 0) { return this.servers[i]; } } return this.servers[0]; } // 最少连接 leastConnections(connections) { let minConnections = Infinity; let selectedServer = this.servers[0]; for (const server of this.servers) { if (connections[server] < minConnections) { minConnections = connections[server]; selectedServer = server; } } return selectedServer; } }

数据一致性

CAP定理

CAP定理:分布式系统只能同时满足以下三点中的两点 C (Consistency) → 一致性 A (Availability) → 可用性 P (Partition tolerance) → 分区容错性

最终一致性

// 使用事件溯源实现最终一致性 class EventStore { constructor() { this.events = []; this.subscribers = []; } append(event) { this.events.push(event); for (const subscriber of this.subscribers) { subscriber(event); } } subscribe(callback) { this.subscribers.push(callback); } } // 使用 const eventStore = new EventStore(); eventStore.subscribe((event) => { if (event.type === 'orderCreated') { updateInventory(event.data.orderId); } }); eventStore.append({ type: 'orderCreated', data: { orderId: 'abc123' } });

实战案例:高可用架构

class HighAvailabilitySystem { constructor() { this.primary = null; this.secondary = null; this.loadBalancer = new LoadBalancer([]); this.circuitBreaker = new CircuitBreaker(); } async init() { this.primary = await this.startService('primary'); this.secondary = await this.startService('secondary'); this.loadBalancer = new LoadBalancer([this.primary, this.secondary]); this.setupHealthCheck(); this.setupFailover(); } setupHealthCheck() { setInterval(async () => { const primaryHealth = await this.checkHealth(this.primary); if (!primaryHealth) { await this.failover(); } }, 10000); } async failover() { console.log('Failing over to secondary...'); [this.primary, this.secondary] = [this.secondary, this.primary]; this.loadBalancer = new LoadBalancer([this.primary, this.secondary]); } async handleRequest(req) { return this.circuitBreaker.execute(async () => { const server = this.loadBalancer.roundRobin(); return server.handle(req); }); } }

最佳实践

1. 多数据中心部署

// 跨区域部署 const regions = ['us-west', 'us-east', 'eu-west']; function getServerByRegion(region) { return servers[region]; }

2. 自动化故障恢复

// 自动重启失败的服务 const service = new Service(); service.on('crash', async () => { console.log('Service crashed, restarting...'); await service.restart(); });

总结

高可用和容错设计是构建可靠系统的核心。通过冗余设计、故障转移和负载均衡,可以实现系统的高可用性。

我的鬃狮蜥Hash对高可用也有自己的理解——它总是能适应不同的环境,确保自己的生存,这也许就是自然界的"高可用性"吧!

如果你对系统架构有任何问题,欢迎留言交流!我是欧阳瑞,极客之路,永无止境!


技术栈:系统架构 · 高可用 · 容错设计

http://www.gsyq.cn/news/1427076.html

相关文章:

  • 实战避坑指南:用MATLAB/Simulink仿真多无人机编队控制(附一致性算法源码)
  • 如何在3天内掌握PUBG压枪技巧:罗技鼠标宏的终极解决方案
  • 基于Slack Webhook构建实时AI助手:轻量级集成方案与实战
  • 从PromQL到Categraf指标:Grafana面板与告警规则迁移实战指南
  • XPD767 支持 XPD-LINK™互联 USB 双端口控制器
  • UE5 GAS实战:手把手教你为RPG角色创建第一个AttributeSet(含网络同步与预测配置)
  • 浙江高考复读学校实力排行榜:东阳高复中心领跑,五大名校助力学子逆袭 - 玖叁鹿
  • 手机号码归属地查询工具:3秒定位任何手机号的地理位置
  • 别再只把CANopenNode当从站了:手把手教你配置Master模式,实现多节点数据读写
  • 黄冈外贸建站哪家好?WaiMaoYa 外贸鸭解决海外访问慢、排名低、无询盘核心难题 - 外贸营销驿站
  • 告别在线排队!用Stable Diffusion WebUI在本地电脑搭建专属AI画室(Win11/RTX3060实测)
  • 告别黑屏与卡顿:手把手教你为Arch Linux笔记本配置完整的图形栈(Mesa/Vulkan/VA-API全包括)
  • 复旦微FM7Z045开发板:JTAG、QSPI、级联、独立四种启动模式到底怎么选?
  • 营口外贸独立站哪家口碑好?WaiMaoYa 外贸鸭摒弃廉价模板网站,打造差异化外贸官网 - 外贸营销驿站
  • 别再让电机乱转了!用STM32的TIM3和ULN2003A实现精准PWM调速(附完整代码)
  • 德州外贸建站推荐,WaiMaoYa 外贸鸭产品全景精细化展示,海外客户一目了然 - 外贸营销驿站
  • 从CTF实战出发:手把手教你用Python复现DES算法(附完整代码与NepCTF题解)
  • 中骄家居全渠道联系方式汇总 太原装修咨询一键直达 - 商业新知
  • Windows右键菜单管理终极指南:3步打造个性化高效系统
  • 相机都调麻了,缺陷还是漏检,问题到底卡在哪?
  • 工程石膏板主流品牌全解析 适配各类施工场景需求 - 奔跑123
  • 如何利用时间管理与AI工具构建个人专注系统,应对数字分心
  • 惠普tank 2606sdw屏幕显示 er-08 ,加了粉还是报错er08,黄灯闪烁成像鼓接近寿命期限?亲测完美修复。
  • CowabungaLite iOS免越狱定制工具箱终极指南:从界面美化到系统级优化完全手册
  • 2026年西安商业空间设计师全景范本:从工装全案到品牌落地的深度解析 - 企业名录优选推荐
  • 国密SM2与RSA怎么选?从性能、合规到Java代码实现的深度对比
  • 调查研究-149 龙蛇之变,木雁之间:真正成熟的人,懂得在锋芒与藏拙之间切换
  • 684573
  • 北京北创铭居装饰全渠道联系方式汇总 北京装修咨询一键直达 - 商业新知
  • 2026滚塑机械厂家怎么选?本凡机械领衔国内十大品牌深度解析 - 玖叁鹿