worse is better 文章

两种设计思想:

  • “正确” 的设计 : 优先用户接口的简洁性。正确性,一致性,完整性 优于 实现简洁性
  • ”worse-is-better“ 设计:实现简洁性优于一切,为此可以牺牲一致性 和 完整性

"worse is better" 的设计,例如 C 和 unix,可以满足 50%-80% 的需求 ,由于实现简洁因此便于移植。因此 C 和 unix 迅速占领了 50% 的用户。作者称 C 和 unix 是 ”终极电脑病毒“。

在此后人们会有更强的动力去完善 ”worse is better“ 的设计,最终将此类系统完善到 90%,使其接近 ”正确“ 的设计。

而一个 ”正确“ 的系统,可能需要花费 80% 的时间实现 20% 的功能,因此需要花费大量时间开发,同时可能只能在最复杂的设备上得到满意的结果。

legacy 体系:

SysVinit :
初始化脚本位于 /etc/init.d/,初始化脚本需要支持 start, stop, status 等命令
使用 service 命令运行初始化脚本
SysVinit 只启动一次,在之后不跟踪单个服务

新体系:

systemd 用于代替 SysVinit ,在初始化结束时, systemd 仍然作为守护进程运行。
使用 systemctlsystemd 交互,运行服务。

sudo systemctl enable [service] 开机启动服务
sudo systemctl disable [service] 不开机启动服务
sudo systemctl start [service]
sudo systemctl stop [service]
sudo systemctl restart [service]

systemd

systemd 是 boot 阶段第一个运行的 userspace 程序,在 kernel 初始化硬件后马上获得控制
systemd 通过 unit configuration file 管理资源
unit 包括 .service, .mount, .device 等文件
unit 保存在 /etc/systemd/system, /lib/systemd/system 等目录
/etc/systemd/system 优先级最高
通过 systemctl 与 systemd 交互
systemd 与 systemctl 之间通过 D-Bus 交互

journald 收集和管理 systemd 的 log
通过 journalctl 查询 log

发表于 sosp2003,经典系统工作 GFS

GFS 包括单个 master 节点。若干 chunkserver,被多个 client 同时访问

将文件分为大小固定的 chunk,每个 chunk 有一个全局唯一的 64位,由 master 在 chunk 创建时分配。
chunkserver 在本地以 linux 文件存储 chunk。每个 chunk 默认存储三个副本。