知识全景图/ 软件工程与系统/ 如何设计系统

如何设计系统

从语言、编译器、操作系统到数据库,把“如何设计”收成一条系统构造路线。

定位:这不是新的大目录,也不是概念大全。具体页面仍放在各自专业目录;这页只做“如何设计 X”系列总入口,帮助读者按系统层级阅读。
一、这条线只收一种问题
可以进入这条线不放进这条线
有内部机制,可以从失败中长出设计。只是产品功能、工具清单或经验建议。
能回答“最小版本怎样跑起来”。只回答“有哪些概念、有哪些产品”。
能做实验验收:输入、状态、失败、恢复。没有明确验收,只能泛泛讨论。
二、已落地的系统构造主线
1. 如何设计一门编程语言
先决定语言要表达什么,再设计语法、语义、类型、错误、运行时和工具链。进入 如何设计一门编程语言
2. 如何设计编译器
把源码变成 Token、AST、符号表、类型检查、IR、优化和可执行计划。进入 如何设计编译器
3. 如何设计操作系统
设计进程、调度、虚拟内存、系统调用、文件、设备、网络和安全边界。进入 如何设计操作系统
4. 如何设计一个数据库
设计 DBMS 本身:存储引擎、B+Tree、SQL 执行器、优化器、事务、WAL、MVCC。进入 如何设计一个数据库
三、相邻系统放在哪里
主题应放位置当前状态
如何设计文件系统pages/tech/engineering/待补,承接操作系统和数据库存储引擎。
如何设计消息队列pages/tech/system-security/可从 消息队列 / 事件驱动 收敛。
如何设计缓存系统pages/tech/platform/可从 缓存工程 收敛。
如何设计搜索引擎pages/tech/data/可从 搜索 / 推荐 收敛。
如何设计分布式系统pages/tech/system-security/可从 分布式系统 收敛。
四、推荐下一步
优先级下一张页为什么
1如何设计文件系统它连接操作系统、数据库存储引擎和崩溃恢复,是最自然的下一块。
2如何设计消息队列它连接分布式系统、事件驱动、补偿对账和生产可靠性。
3如何设计搜索引擎它和数据库形成对照:结构化查询 vs 倒排索引、召回、排序。
一句话:“如何设计系统”不是把所有页面放到一个目录,而是用一条路线把系统层级串起来:语言表达意图,编译器执行语言,操作系统管理资源,数据库管理持久数据。