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

每日一博 - 三高系统架构设计:高性能、高并发、高可用性解析

文章目录

  • 引言
  • 一、高性能篇
      • 1.1 高性能的核心意义
    • 1.2 影响系统性能的因素
    • 1.3 高性能优化方法论
      • 1.3.1 读优化:缓存与数据库的结合
      • 1.3.2 写优化:异步化处理
    • 1.4 高性能优化实践
      • 1.4.1 本地缓存 vs 分布式缓存
      • 1.4.2 数据库优化
  • 二、高并发篇
    • 2.1 高并发的核心意义
    • 2.2 高并发优化方法论
      • 2.2.1 水平扩展(X轴扩展)
      • 2.2.2 纵向扩展(Y轴扩展)
      • 2.2.3 垂直扩展(Z轴扩展)
    • 2.3 高并发优化实践
      • 2.3.1 DDD实践
      • 2.3.2 热Key处理
  • 三、高可用篇
    • 3.1 高可用的核心意义
    • 3.2 高可用优化方法论
      • 3.2.1 应用层高可用
      • 3.2.2 存储层高可用
      • 3.2.3 部署层高可用
    • 3.3 高可用优化实践
      • 3.3.1 Redis高可用
      • 3.3.2 Elasticsearch高可用
      • 3.3.3 Kafka高可用
  • 四、总结

在这里插入图片描述


引言

随着用户规模的不断扩大和业务复杂性的增加,系统的性能、并发能力和可用性成为了技术团队必须面对的核心挑战。无论是C端的高流量场景,还是B端/M端的复杂业务逻辑,系统的“三高”(高性能、高并发、高可用性)设计都是确保业务稳定运行的关键。

接下来我们将深入探讨三高系统架构设计的方法论和实践, 从高性能、高并发、高可用性三个维度展开,理解如何设计和优化一个高可用、高性能、高并发的系统。


一、高性能篇

1.1 高性能的核心意义

高性能是系统设计的基石。一个高性能的系统能够快速处理请求,提供低延迟的服务,从而提升用户体验。高性能不仅直接影响系统的吞吐量,还间接决定了系统的并发能力和可用性。因此,优化系统性能是三高系统设计的首要任务。

1.2 影响系统性能的因素

系统性能的优化需要从多个维度入手,主要包括以下三个方面:

  1. 计算(Computation)

    • 系统内部的计算逻辑复杂度。
    • 频繁的Full GC(垃圾回收)会导致系统停顿,影响性能。
  2. 通信(Communication)

    • 系统与外部依赖(如数据库、缓存、第三方服务)的通信耗时。
    • 网络延迟、带宽限制等问题。
  3. 存储(Storage)

    • 数据库的读写性能,尤其是大库大表、慢SQL问题。
    • 缓存的使用效率,如Redis、Memcached等。
    • 搜索引擎(如Elasticsearch)的索引设计、分片大小等。

1.3 高性能优化方法论

在这里插入图片描述

1.3.1 读优化:缓存与数据库的结合

缓存是提升系统性能的利器,但缓存的使用需要与数据库结合,以确保数据的一致性和可靠性。根据系统的读写特点,缓存的使用可以分为以下两种场景:

  1. 读多写少的系统

    • 方案:同步更新数据库,后删除缓存。
    • 优点:以数据库为主,缓存为辅,确保数据一致性。
    • 适用场景:电商的商品详情页、新闻资讯等。
  2. 写多读少的系统

    • 方案:同步更新缓存,异步更新数据库。
    • 优点:以缓存为主,数据库为辅,提升写性能。
    • 适用场景:物流订单系统、秒杀场景等。

1.3.2 写优化:异步化处理

在高并发场景下,写操作往往成为系统的瓶颈。通过异步化处理,可以将耗时的写操作从主流程中剥离,提升系统的响应速度。

  • 秒杀场景
    • 用户下单后,系统异步处理订单,返回成功响应。
    • 通过消息队列(如Kafka、RocketMQ)削峰填谷,避免系统过载。
    • 缓存库存信息,异步扣减库存,确保数据一致性。

1.4 高性能优化实践

1.4.1 本地缓存 vs 分布式缓存

  • 本地缓存:适用于数据量小、访问频率高的场景,如Guava Cache、Caffeine。
  • 分布式缓存:适用于数据量大、需要跨节点共享的场景,如Redis、Memcached。

1.4.2 数据库优化

  • 索引优化:为高频查询字段添加索引,避免全表扫描。
  • 分库分表:将大表拆分为多个小表,提升查询性能。
  • 读写分离:主库负责写操作,从库负责读操作,分担主库压力。

二、高并发篇

2.1 高并发的核心意义

高并发是指系统能够同时处理大量请求的能力。随着用户规模的增加,系统的并发能力直接决定了其能否支撑业务的快速发展。高并发设计的目标是通过水平扩展、垂直扩展等手段,提升系统的吞吐量和响应速度。

2.2 高并发优化方法论

在这里插入图片描述

2.2.1 水平扩展(X轴扩展)

水平扩展是通过增加机器数量来提升系统的并发能力。常见的水平扩展方式包括:

  • 应用层扩展:通过负载均衡(如Nginx、HAProxy)将流量分发到多台服务器。
  • 存储层扩展:通过分库分表将数据分散到多个数据库实例。

2.2.2 纵向扩展(Y轴扩展)

纵向扩展是通过拆分单体应用为多个微服务,提升系统的可扩展性和可维护性。常见的纵向扩展方式包括:

  • 微服务架构:将系统按照业务领域拆分为多个独立的服务。
  • 领域驱动设计(DDD):通过领域划分指导微服务的设计。

2.2.3 垂直扩展(Z轴扩展)

垂直扩展是通过分片和单元化设计,提升系统的并发能力和可用性。常见的垂直扩展方式包括:

  • 分库分表:将数据按照一定规则分散到多个数据库实例。
  • 单元化设计:将系统流量和数据闭环在一个单元内,避免单点故障。

2.3 高并发优化实践

2.3.1 DDD实践

  • 业务流程:从商家下单到用户签收,涵盖正向和逆向流程。
  • 领域划分:将系统划分为商品服务域、订单域、支付结算域、履约域等。

2.3.2 热Key处理

  • 本地缓存:在应用层增加本地缓存,减少对分布式缓存的依赖。
  • 随机数法:在Key后增加随机数,将热点数据分散到多个分片。

三、高可用篇

3.1 高可用的核心意义

高可用是指系统在面对故障时仍能持续提供服务的能力。高可用设计的目标是通过冗余、容错等手段,确保系统在出现故障时能够快速恢复,避免业务中断。

3.2 高可用优化方法论

在这里插入图片描述

3.2.1 应用层高可用

  • 限流:通过限流算法(如令牌桶、漏桶)保护系统不被流量打垮。
  • 熔断降级:通过熔断器(如Hystrix)避免下游故障拖垮系统。
  • 超时设置:设置合理的超时时间,避免无限等待下游响应。
  • 重试机制:通过有限次数的重试提高请求成功率。
  • 隔离:通过线程池隔离、数据隔离等手段,控制故障影响范围。

3.2.2 存储层高可用

  • 复制:通过主从复制、多主复制等手段,确保数据的高可用。
  • 分区:通过分片将数据分散到多个节点,避免单点故障。

3.2.3 部署层高可用

  • 多机房部署:将系统部署在多个机房,避免单机房故障导致业务中断。
  • 容器化部署:通过Docker、Kubernetes等工具,实现快速扩容和故障恢复。

3.3 高可用优化实践

3.3.1 Redis高可用

  • 主从复制:主节点负责写操作,从节点负责读操作。
  • 集群模式:通过分片将数据分散到多个节点,提升并发能力。

3.3.2 Elasticsearch高可用

  • 分片与副本:通过分片和副本设计,确保数据的高可用和高性能。
  • 数据节点:将索引数据分散到多个数据节点,避免单点故障。

3.3.3 Kafka高可用

  • 分区与副本:通过分区和副本设计,提升消息队列的吞吐量和可用性。
  • Leader选举:在Leader节点故障时,自动选举新的Leader节点。

四、总结

三高系统架构设计是一场与复杂性对抗的持久战。通过高性能、高并发、高可用性的优化,我们可以构建出稳定、可靠、高效的系统,支撑业务的快速发展。

参考这里

在这里插入图片描述

相关文章:

每日一博 - 三高系统架构设计:高性能、高并发、高可用性解析

文章目录 引言一、高性能篇1.1 高性能的核心意义 1.2 影响系统性能的因素1.3 高性能优化方法论1.3.1 读优化:缓存与数据库的结合1.3.2 写优化:异步化处理 1.4 高性能优化实践1.4.1 本地缓存 vs 分布式缓存1.4.2 数据库优化 二、高并发篇2.1 高并发的核心…...

C++ 中的引用(Reference)

在 C 中,引用(Reference)是一种特殊的变量类型,它提供了一个已存在变量的别名。引用在很多场景下都非常有用,比如函数参数传递、返回值等。下面将详细介绍 C 引用的相关知识。 1. 引用的基本概念和语法 引用是已存在…...

负荷预测算法模型

1. 时间序列分析方法 时间序列分析方法是最早被用来进行电力负荷预测的方法之一,它基于历史数据来构建数学模型,以描述时间与负荷值之间的关系。这种方法通常只考虑时间变量,不需要大量的输入数据,因此计算速度快。然而&#xff…...

【C语言】内存管理

【C语言】内存管理 文章目录 【C语言】内存管理1.概念2.库函数3.动态分配内存malloccalloc 4.重新调整内存的大小和释放内存reallocfree 1.概念 C 语言为内存的分配和管理提供了几个函数。这些函数可以在 <stdlib.h> 头文件中找到。 在 C 语言中&#xff0c;内存是通过…...

deepseek大模型本机部署

2024年1月20日晚&#xff0c;中国DeepSeek发布了最新推理模型DeepSeek-R1&#xff0c;引发广泛关注。这款模型不仅在性能上与OpenAI的GPT-4相媲美&#xff0c;更以开源和创新训练方法&#xff0c;为AI发展带来了新的可能性。 本文讲解如何在本地部署deepseek r1模型。deepseek官…...

动态规划DP 最长上升子序列模型 拦截导弹(题目分析+C++完整代码)

概览检索 动态规划DP 最长上升子序列模型 拦截导弹 原题链接 AcWiing 1010. 拦截导弹 题目描述 某国为了防御敌国的导弹袭击&#xff0c;发展出一种导弹拦截系统。 但是这种导弹拦截系统有一个缺陷&#xff1a;虽然它的第一发炮弹能够到达任意的高度&#xff0c;但是以后每…...

缩位求和——蓝桥杯

1.题目描述 在电子计算机普及以前&#xff0c;人们经常用一个粗略的方法来验算四则运算是否正确。 比如&#xff1a;248153720248153720 把乘数和被乘数分别逐位求和&#xff0c;如果是多位数再逐位求和&#xff0c;直到是 1 位数&#xff0c;得 24814>145 156 56 而…...

Baklib赋能企业实现高效数字化内容管理提升竞争力

内容概要 在数字经济的浪潮下&#xff0c;企业面临着前所未有的机遇与挑战。随着信息技术的迅猛发展&#xff0c;各行业都在加速推进数字化转型&#xff0c;以保持竞争力。在这个过程中&#xff0c;数字化内容管理成为不可或缺的一环。高效的内容管理不仅能够优化内部流程&…...

【视频+图文讲解】HTML基础2-html骨架与基本语法

图文教程 基本骨架 举个例子&#xff0c;下图所展示的为html的源代码 -!DOCTYPE&#xff1a;表示文档类型&#xff08;后边写的html表示文档类型是html&#xff09;&#xff1b;其中“&#xff01;”表示声明 只要是加这个声明标签的&#xff0c;浏览器就会把下边的源代码当…...

消息队列篇--原理篇--常见消息队列总结(RabbitMQ,Kafka,ActiveMQ,RocketMQ,Pulsar)

1、RabbitMQ 特点&#xff1a; AMQP协议&#xff1a;RabbitMQ是基于AMQP&#xff08;高级消息队列协议&#xff09;构建的&#xff0c;支持多种消息传递模式&#xff0c;如发布/订阅、路由、RPC等。多语言支持&#xff1a;支持多种编程语言的客户端库&#xff0c;包括Java、P…...

【力扣每日一题】存在重复元素 II 解题思路

219. 存在重复元素 II 解题思路 问题描述 给定一个整数数组 nums 和一个整数 k&#xff0c;要求判断数组中是否存在两个 不同的索引 i 和 j&#xff0c;使得&#xff1a; nums[i] nums[j]且满足 abs(i - j) < k 如果满足上述条件&#xff0c;返回 true&#xff0c;否则…...

React第二十八章(css modules)

css modules 什么是 css modules 因为 React 没有Vue的Scoped&#xff0c;但是React又是SPA(单页面应用)&#xff0c;所以需要一种方式来解决css的样式冲突问题&#xff0c;也就是把每个组件的样式做成单独的作用域&#xff0c;实现样式隔离&#xff0c;而css modules就是一种…...

本地运行大模型效果及配置展示

电脑上用ollama安装了qwen2.5:32b&#xff0c;deepseek-r1:32b&#xff0c;deepseek-r1:14b&#xff0c;llama3.1:8b四个模型&#xff0c;都是Q4_K_M量化版。 运行过程中主要是cpu和内存负载比较大&#xff0c;qwen2.5:32b大概需要22g&#xff0c;deepseek-r1&#xff1a;32b类…...

愿景:做机器视觉行业的颠覆者

一个愿景&#xff0c;两场战斗&#xff0c;专注制胜。 一个愿景&#xff1a;做机器视觉行业的颠覆者。 我给自己创业&#xff0c;立一个大的愿景&#xff1a;做机器视觉行业的颠覆者。 两场战斗&#xff1a;无监督-大模型 上半场&#xff0c;无监督。2025-2030&#xff0c;共五…...

arm-linux-gnueabihf安装

Linaro Releases windows下打开wsl2中的ubuntu&#xff0c;资源管理器中输入&#xff1a; \\wsl$gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz 复制到/home/ark01/tool 在 Ubuntu 中创建目录&#xff1a; /usr/local/arm&#xff0c;命令如下&#xff1a; …...

力扣动态规划-16【算法学习day.110】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;建议灵神的题单和代码随想录&#xff09;和记录自己的学习过程&#xff0c;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关…...

Java基础知识总结(三十四)--java.util.Date

月份从0-11&#xff1b; /* 日期对象和毫秒值之间的转换。 1&#xff0c;日期对象转成毫秒值。Date类中的getTime方法。 2&#xff0c;如何将获取到的毫秒值转成具体的日期呢&#xff1f; Date类中的setTime方法。也可以通过构造方法。 */ //日期对象转成毫秒值 Date …...

零售EDI:Costco EDI 项目须知

Costco 是全球领先的会员制仓储式零售商&#xff0c;致力于为会员提供高品质且价格实惠的商品。其经营范围涵盖食品、电子产品、家居用品、服装和办公设备等多个领域。 Costco 的 EDI 对接需求分析 为了更高效地管理其复杂的全球供应链&#xff0c;Costco 采用了先进的 EDI&am…...

最近最少使用算法(LRU最近最少使用)缓存替换算法

含义 最近最少使用算法&#xff08;LRU&#xff09;是一种缓存替换算法&#xff0c;用于在缓存空间有限的情况下&#xff0c;选择最少使用的数据项进行替换。该算法的核心思想是基于时间局部性原理&#xff0c;即刚被访问的数据在未来也很有可能被再次访问。 实现 LRU算法的…...

sublime_text的快捷键

sublime_text的快捷键 向下复制, 复制光标所在整行并插入到下一行&#xff1a;通过 CtrlShiftD 实现快速复制当前行的功能。 可选多行, 不选则复制当前行 ctrl Shift D 删除当前行&#xff1a;通过 CtrlShiftK 实现快速删除当前行的功能。 可选多行, 不选则删当前行 ctrl S…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...