2025年9月24日
导语:你是否遇到过这样的场景:明明在后台看到了“操作成功”的提示,刷新后数据却“穿越”回了修改前的状态?这并非灵异事件,而是分布式系统中一个经典而残酷的现实。本文将带你深入《设计数据密集型应用》的核心章节,从一个诡异的“数据丢失”谜题开始,揭开数据库复制的两种核心模式——物理复制与逻辑复制的神秘面纱,并最终探索它们如何驱动了现代实时数据架构的脉搏。
序幕——一个“幽灵”数据引发的血案 想象一下,你 …...
阅读全文
2025年9月23日
在深入数据系统的世界时,我们常常惊叹于上层架构的宏伟,但支撑这一切的,往往是那些看似朴素却充满智慧的底层设计。在 DDIA 第三章中,SSTable 与 LSM 树无疑就是这样的基石。
这趟探索之旅,始于一个简单构件——SSTable,它像一块块乐高积木,虽好用但略显呆板。随后,我们将看到 LSM 树这套“动态系统”是如何赋予这些积木生命,搭建出能抵御写入洪流的坚固堡垒。最后,我们将站在更高的视 …...
阅读全文
2025年9月9日
这是《把 DDIA 读厚》系列的第六篇文章。在 DDIA 的精读之旅中,我们已经聊过了可靠性、可扩展性等宏大主题。今天,我想和你一起,做一次微观探险。我们将聚焦于一个最基础、最频繁的动作——“写入”,跟踪一次小小的写入请求,从它在应用程序中诞生,到最终在磁盘上安家,看看这段旅程中都发生了哪些惊心动魄、充满权衡的故事。
这一切,都始于 DDIA 第三章中的一句话:
“对于极其简单的场景,日志追加式的 …...
阅读全文
2025年6月22日
这是《把 DDIA 读厚》系列的第五篇文章。在上一篇,我们深入探讨了关系模型与文档模型的世纪之争,核心在于它们如何处理数据的“关系”。今天,我们要把“关系”这个词推向极致,聊一聊为“关系”而生的数据模型——图。
引子:当 JOIN 遇见了"六度空间" 你跟产品经理说:“这个‘猜你喜欢’的功能,要查用户好友的好友,还得看共同兴趣,SQL 写起来太复杂,跑起来也慢,不好做。”
产品 …...
阅读全文
2025年6月21日
这是《把 DDIA 读厚》系列的第四篇文章。今天,咱们不聊那些高大上的分布式共识,而是回到一切开始之前,聊一个每个后端工程师都必须面对的、最朴素也最重要的问题:你的数据,到底应该怎么存?
引子:建表,还是塞个 JSON? 老哥们,拿到一个新需求,是不是脑子里第一反应就是“这数据存哪个库,表怎么建”?紧接着,灵魂拷问就来了:
是一板一眼地遵循三范式,把数据拆分到好几张关联的表里,然后靠 JOIN 过 …...
阅读全文
2025年6月20日
这是《把 DDIA 读厚》系列关于第一章的最后一篇文章。在开始前,我们先快速回顾一下本系列的创作“心法”:我们以 DDIA 的核心思想为锚点,用一个接地气的深潜案例将其“翻译”成我们的实战经验,最后收束为可供 Go 工程师和准架构师借鉴的行动指南。
回顾与衔接:我们究竟在维护什么? 在上一篇的结尾,我们留下了一个拷问灵魂的问题:
我们都经历过维护“屎山”代码的痛苦。回想一下,你觉得那个系统最让你头 …...
阅读全文
2025年6月19日
这是《把 DDIA 读厚》系列的第二篇文章。在上一篇,我们聊了“可靠性”,探讨了如何从“凭感觉”的容错,进化到真正的“可靠性工程”。今天,我们来啃下一个更硬、也更容易被误解的骨头:可扩展性(Scalability)。
回顾与衔接:当"加机器"也解决不了问题 在上一篇的结尾,我们留下了一个思考题:
你是否曾遇到过一个性能瓶颈,是简单的水平扩展无法解决的?它背后的“负载模式”是什 …...
阅读全文
2025年6月18日
这是《把 DDIA 读厚》系列的第一篇文章。在开始前,我想先跟您聊聊这个系列想做什么。市面上解读经典的书不少,但大多是摘要和复述。咱们想玩点不一样的,真正把这本“屠龙宝刀”读厚。
我们的方法很简单,称之为 “锚点-发散-收束”:
锚点 (Anchor):每一篇,我们都从 DDIA 中精炼出一个最核心、最关键的思想作为“锚点”,确保我们的讨论不偏离航道。 发散 (Diverge):我们会围绕这个“锚 …...
阅读全文
2023年12月5日
作为后端程序员,我一直想独立开发一个产品,哪怕只是一个简单的落地页。但由于前端开发对我来说颇有难度,这个愿望一直未能实现。
直到 ChatGPT 发布,我才借助它来共同开发了一个名为“Bulk Delete ChatGPT”的插件,至今已拥有超过1600名用户,并时常收到好评。
由于插件依赖于 ChatGPT 官网的页面样式,而官网经常更新,因此需要频繁更新插件代码。但由于我的能力限制,无法及时发 …...
阅读全文
2023年6月4日
工作中,你一定遇到过这样的场景:你正在认真写代码,线上突然出现报警。看到报警信息之后,你不得不打开浏览器,点开收藏夹,打开监控页面、告警页面、trace 页面、日志搜索平台……有时,还需要打开特定的文件或者软件,比如你记在本地的一些常用的命令文件、iterm2 等等。
这些网页、文件、软件,很可能每次遇到 报警时都要打开。这种重复的工作有没有可能一键自动完成呢?
可以。借助 Raycast 可以非 …...
阅读全文