Skip to content

四火的唠叨

一个纯正程序员的啰嗦

Menu
  • 所有文章
  • About Me
  • 关于四火
  • 旅行映像
  • 独立游戏
  • 资源链接
Menu

Tag: 基础设施

常见分布式基础设施系统设计图解(八):分布式键值存储系统

Posted on 08/27/202201/18/2025 by 四火

Key-value 存储系统大概是分布式存储系统中最常见的一种类型了。从功能需求的角度说,最核心的包括:

  • 可以创建一张表和删除一张表,同时对于表的数据可以进行:
  • 读,即 get(key) 返回 value
  • 写,即 put(key, value)
  • 删除,即 delete(key)

当然,也有一些其它的功能需求,比如支持事务性,支持 key 排序查询,range key 或者特定列索引,支持同一 key 下 value 的 version 等等。

从非功能需求的角度说,凡是存储系统,Durability 是最重要的,数据不能丢失;其次是 Availability;再次是 Performance,这样的系统需要考虑 thro

[……]阅读全文

Continue reading

常见分布式基础设施系统设计图解(七):分布式实时流处理系统

Posted on 11/19/202010/07/2024 by 四火

今天这篇是关于实时流处理(real-time stream processing)的,这一类的系统这几年比较多了,但相对而言并没有之前提到的几类基础设施系统常见。为什么说这类系统如今更为常见呢?因为一般说来,或者说曾经有一个普遍的认知,就是 throughput 和 latency 难以兼得的事实:

  • 同步系统适用于响应实时性要求高的请求,处理实时性要求高的数据,速度快,处理过程中关注的数据粒度小,吞吐量也相对受限;
  • 异步系统适用于响应实时性要求低的请求,处理实时性要求低的数据,处理过程中关注的数据粒度大,但是吞吐量往往要大得多。

可是,越来越多的系统需要大量的数据处理,往往需要上面二者 “鱼和

[……]阅读全文

Continue reading

常见分布式基础设施系统设计图解(六):分布式 MR 系统

Posted on 11/02/202008/14/2022 by 四火

其实对于 MR(Map Reduce)系统来说,可能更重要的是分治和分步处理的思想,因为现在的基于 MR 的数据处理框架或者平台,在实现上数据处理往往已经和最经典的对于 MR 的理解(最早应该是来自 Google 的那篇论文)有了不少区别。当然,我还是按照之前的做法,把一个典型的 MR 系统简单图示画出来了,这个图相对比较简单。

  • 还是老规矩,虚线表示控制流,实线表示数据流。
  • 上半部分用户向 Master 这个 job 管理节点提交一个 job 的请求,这个请求被拆解为若干个 task,下半部分的 slave 节点完成 task 的跟踪和执行。
  • 具体执行逻辑上:
    • 首先的输入文件,可以是多个已经拆分了的小文件,也可以是一个大文件

[……]阅读全文

Continue reading

常见分布式基础设施系统设计图解(五):分布式流控系统

Posted on 10/29/202010/24/2024 by 四火

这一篇记录分布式的流量控制系统。

首先,关于流量控制系统,从功能性需求上考虑,它涉及到使用怎样的规则去限制流量(基于 IP、用户 ID、地域,等等),以及,流量超出限制以后的策略是怎样的(比如返回 HTTP 429 或者带有 ratelimit 的 HTTP headers,queue,客户端 retry with exponential backoff 等等)。其中一个基本的问题是,流控在客户端做还是服务端做,通常来说,服务端是一定要的。对于存在的形式,有的流控功能可以以一个 lib 依附于 app 执行,有的则可以通过一个 service 来实现。

其次,从非功能性需求上考虑,比方说系统的可靠性,增加 lat

[……]阅读全文

Continue reading

常见分布式基础设施系统设计图解(四):分布式工作流系统

Posted on 10/26/202010/07/2024 by 四火

这一篇是记录分布式工作流系统的。我这些年来参与了几个不同的分布式工作流系统的工作(以前从另外的角度写了一些总结放在这里),大部分是基于基础分布式工作流引擎二次开发的,但也有从头开始实现一个的。总的来说,从原理上看可以说它们的实现是大同小异,大致是基于 Amazon 的 SWF 的各种实现变体。

从功能需求上看,一个工作流系统,当然是要完成一个工作流的执行和追踪,因此,它的用户,可以定义工作流的逻辑,启动、停止工作流,并能够查询工作流的当前执行状态。但我觉得有一条需要着重强调——自治(Autonomy)能力。分布式工作流系统通常来说,要比其它常见的分布式基础设施,从用户理解的角度来说,要复杂和困难

[……]阅读全文

Continue reading

常见分布式基础设施系统设计图解(三):分布式消息队列

Posted on 10/18/202008/14/2022 by 四火

这篇的内容是关于分布式消息队列的,无论是在实时系统,还是在非实时系统中,它都有广泛的应用。作为一个消息队列,基本的功能需求相对好描述,简单说有两条:

  • 首先,围绕着 pub-sub 这样的机制,允许消息发布者发布的特定主题下的消息,能够投递到若干个订阅者。这条几乎是必选的。
  • 其次,消息的有序性,既然是一个队列,那么消息满足先进先出(FIFO)的规则。这一条,部分实际场景方面并非必选。

非功能需求方面,这里面有几个基本的重要特性可以拿来考量,可以说这些基本都是分布式系统所共有的,但其中有几个是异步系统所更为看重的——比如说:

  • Availability
  • Security
  • Consistenc

[……]阅读全文

Continue reading

常见分布式基础设施系统设计图解(二):分布式数据库

Posted on 10/08/202009/24/2024 by 四火

从大致的非功能需求角度来说,作为一般的分布式持久化存储系统,这样三个需求从重要性依次排列:

Durability > Availability > Performance

即最重要的是,数据绝对不能丢失,其次是要一直提供服务,最后才是要保持一定的性能。当然,有了上述基础以后,我们还可以谈论任何分布式存储系统都涉及的重要特性,比如一致性。最后,作为特定的存储系统——“数据库”,我们还常常谈论一些特定的特性,比如权限管理和事务控制等等。

下面拿的是 Bigtable 来举例的,它建立在 GFS 这样的分布式文件系统上面,有一定代表性。

  • 图中展示的是一个简单的写数

[……]阅读全文

Continue reading

常见分布式基础设施系统设计图解(一):分布式文件系统

Posted on 10/04/202009/24/2024 by 四火

继续分布式系统的设计图解,下半部分是基础设施,此篇是分布式文件系统。这里面典型就是 GFS,对应开源的版本就是 HDFS。

既然谈到分布式文件系统,我觉得需要从需求层面做一个简单的说明:

  • 这里的文件,通常以 “大” 文件为主,越大效率越高,而不会是小文件。小文件的存储,不一定要选择这里说的分布式文件系统——功能上当然行得通,但容易造成效率低下(比如因为元数据占比高,或者是单一 chunk 的空间利用率低),通常它们也可以:
    • 存放到某一种 NoSQL 的数据库中去,并辅以其它优化。
    • 在这里说的分布式文件系统上面再加一层,在存储上需要做一定的额外优化,比如在 GFS 上实现的 Bigtable(多个小文件可以

[……]阅读全文

Continue reading

常见分布式系统设计图解(汇总)

Posted on 09/25/202009/15/2024 by 四火

【Updated on 9/15/2023】本来只是自己粗浅的总结,但好几位朋友说这套笔记帮助很大,甚至帮他们通过了系统设计面试并找到了工作,那我就打算置顶一段时间,让更多人看到。

这一篇是给我记录的那些常见分布式系统设计图解系列的文章做一个汇总,也提供一个访问入口。

如同我在第一篇文中说的那样,自己在学习各种各样分布式系统的过程中,做了一些笔记,也有自己的理解,把它们放到一起,用一张图选择最主要的部分来阐释,从我的角度来说,是能够帮助理解和记忆的。事实上,遇到的很多各种各样的分布式系统,绝大多数都逃不出那最常见的十几种,也就是说,逃不出这些 “套路” 和 “玩法”。这就是把它们整理成一

[……]阅读全文

Continue reading

订阅·联系

四火,啰嗦的程序员一枚,现居西雅图

Amazon Google Groovy Hadoop Haskell Java JavaScript LeetCode Oracle Python Spark 互联网 前端 华为 历史 同步 团队 图解笔记 基础设施 工作 工作流 工具 工程师 应用系统 异步 微博 思考 技术 数据库 曼联 测试 生活 程序员 管理 系统设计 缓存 编码 编程范型 英语 西雅图 设计 评审 问题 面试 项目

分类

  • Algorithm and Data Structure (30)
  • Concurrency and Asynchronization (6)
  • System Architecture and Design (43)
  • Distributed System (18)
  • Tools Frameworks and Libs (13)
  • Storage and Data Access (8)
  • Front-end Development (33)
  • Programming Languages and Paradigms (55)
  • Testing and Quality Assurance (4)
  • Network and Communication (6)
  • Authentication and Authorization (6)
  • Automation and Operation Excellence (13)
  • Big Data and Machine Learning (5)
  • Product Design (7)
  • Hiring and Interviews (14)
  • Project and Team Management (14)
  • Engineering Culture (17)
  • Critical Thinking (25)
  • Career Growth (57)
  • Life Experience and Thoughts (45)

推荐文章

  • 谈谈分布式锁
  • 常见分布式系统设计图解(汇总)
  • 系统设计中的快速估算技巧
  • 从链表存在环的问题说起
  • 技术面试中,什么样的问题才是好问题?
  • 从物理时钟到逻辑时钟
  • 近期面试观摩的一些思考
  • RSA 背后的算法
  • 谈谈 Ops(汇总 + 最终篇):工具和实践
  • 不要让业务牵着鼻子走
  • 倔强的程序员
  • 谈谈微信的信息流
  • 评审的艺术——谈谈现实中的代码评审
  • Blog 安全问题小记
  • 求第 K 个数的问题
  • 一些前端框架的比较(下)——Ember.js 和 React
  • 一些前端框架的比较(上)——GWT、AngularJS 和 Backbone.js
  • 工作流系统的设计
  • Spark 的性能调优
  • “残酷” 的事实
  • 七年工作,几个故事
  • 从 Java 和 JavaScript 来学习 Haskell 和 Groovy(汇总)
  • 一道随机数题目的求解
  • 层次
  • Dynamo 的实现技术和去中心化
  • 也谈谈全栈工程师
  • 多重继承的演变
  • 编程范型:工具的选择
  • GWT 初体验
  • java.util.concurrent 并发包诸类概览
  • 从 DCL 的对象安全发布谈起
  • 不同团队的困惑
  • 不适合 Hadoop 解决的问题
  • 留心那些潜在的系统设计问题
  • 再谈大楼扔鸡蛋的问题
  • 几种华丽无比的开发方式
  • 我眼中的工程师文化
  • 观点的碰撞
  • 谈谈盗版软件问题
  • 对几个软件开发传统观点的质疑和反驳
  • MVC 框架的映射和解耦
  • 编程的未来
  • DAO 的演进
  • 致那些自嘲码农的苦逼程序员
  • Java 多线程发展简史
  • 珍爱生命,远离微博
  • 网站性能优化的三重境界
  • OSCache 框架源码解析
  • “ 你不适合做程序员”
  • 画圆画方的故事

近期评论

  • + 1.943624 BTC.NEXT - https://graph.org/Ticket--58146-05-02?hs=9a9c6f8dfe3cdbe0074006e3e640b19b& on 所有文章
  • Anonymous on 闲聊投资:亲自体验和护城河
  • 四火 on 关于近期求职的近况和思考
  • YC on 关于近期求职的近况和思考
  • mafulong on 常见分布式基础设施系统设计图解(四):分布式工作流系统
  • 四火 on 常见分布式基础设施系统设计图解(八):分布式键值存储系统
  • Anonymous on 我裸辞了
  • https://umlcn.com on 资源链接
  • Anonymous on 我裸辞了
  • Dylan on 我裸辞了
© 2025 四火的唠叨 | Powered by Minimalist Blog WordPress Theme