【系统设计】数据结构选型:内存与磁盘
问题背景描述要解决的问题:如何在不同的硬件限制(内存 vs 磁盘)和业务需求(多读 vs 多写 vs 范围查询)下,最快地找到数据? 可以把这个问题拆解为两个维度来理解: 存储介质维度: 内存(RAM): 访问极快,但空间有限。重点在于算法的CPU计算复杂度(如红黑树、跳表)。 磁盘(Disk/SSD): 访问慢,IO成本高。重点在于减少磁盘IO次数和利用顺序读写(如B+树、LS...
问题背景描述要解决的问题:如何在不同的硬件限制(内存 vs 磁盘)和业务需求(多读 vs 多写 vs 范围查询)下,最快地找到数据? 可以把这个问题拆解为两个维度来理解: 存储介质维度: 内存(RAM): 访问极快,但空间有限。重点在于算法的CPU计算复杂度(如红黑树、跳表)。 磁盘(Disk/SSD): 访问慢,IO成本高。重点在于减少磁盘IO次数和利用顺序读写(如B+树、LS...
基本概念与发展过程我们要解决的核心任务是:一台服务器(电脑),如何同时接待成千上万个客户端(用户连接)。(即,高并发问题) 按照您的要求,我先列出3个必须知道的基础概念,然后再按时间线讲故事。 第一部分:基础概念小词典(先看懂这3个词) 用户空间 vs 内核空间: 内核(Kernel):操作系统的核心老大,拥有最高权限,只有它能直接控制网卡、硬盘等硬件。 用户进程(User Process)...
什么是崩溃一致性?设计背景在涉及状态持久化的系统中(如数据库、元数据服务、资产系统、任务状态系统等),写操作不可避免地面临以下风险: 进程异常退出 主机宕机或掉电 磁盘写入中断 写入顺序被打乱 如果缺乏专门设计,系统可能在崩溃后处于一种历史上从未合法存在过的中间状态,导致: 数据损坏不可解析 业务状态不一致(如部分更新生效) 无法自动恢复,只能人工介入 因此,需要一种崩溃一致性(Cr...
消息队列1. 消息队列是什么?如何选型? 定义的广义化: 消息队列本质上是具有 “缓冲作用” 和 “发布/订阅能力” 的存储引擎。 技术的发展由 需求 和 底层架构 双重驱动: 需求面(功能演进):消息 (异步/解耦) –> 流 (高吞吐/削峰) –> 消息和流融合 (一站式解决) 架构面(技术演进):单机 –> 分布式 (分区/副...
多数派的定义分布式系统里(比如 Etcd、ZooKeeper、Consul、Redis Sentinel、MongoDB ReplicaSet 等)一般采用多数派原则。 多数派原则(majority): 只有多数派节点(majority of voting nodes)同意,写入才算成功;只有多数派在线,集群才能选出主节点。少数派分区永远不能参与选举,也不能投票 选举(leader e...
热key指一段时间内被频繁访问或操作的键。通常出现在商品限时抢购、瞬时新闻热点等业务场景,可能会对系统的稳定性和可用性造成影响,比如对应节点的网卡带宽被打满,出现丢包重传,请求波动耗时大幅上升,甚至影响到业务的正常使用,引发用户的不满。因此,不可能等到热Key出现已经拖垮了服务再去处理,那个时候业务一定已经受到影响,因此需要提前尽可能在设计和开发时避免引入全局热key,另外,真实的生成环境还...
秒杀系统作为互联网“高并发、高性能、高可用”系统的代表,从系统设计、数据处理到运维保障等方面都有很多可以考察和深挖的点,本文将尝试分析涉及的关键问题,并总结相关的最佳实践。 秒杀系统的核心挑战在于平衡性能、一致性与安全性。 秒杀系统中常见的问题包括:超卖问题、高并发性能瓶颈、数据一致性问题、分布式锁失效、事务管理失效、安全与放作弊问题、系统监控与运维等。 通过分层架构(如流量削峰、异步化)、...