一个简单操作是怎么在分布式环境下变复杂的
最近碰到一个问题,事后想想,很适合拿来讲分布式系统里一个很普遍的现象:一个在单节点上简单到不用过脑子的事,放到多节点环境下,复杂度会一层一层地叠上去,每加一层,就多一类你绕不开的问题。 单节点:两个 if 的事 需求是这样的:用户请求来了,需要从 S3 拉一份代码到本地,解压,然后执行。 为了避免同
最近碰到一个问题,事后想想,很适合拿来讲分布式系统里一个很普遍的现象:一个在单节点上简单到不用过脑子的事,放到多节点环境下,复杂度会一层一层地叠上去,每加一层,就多一类你绕不开的问题。 单节点:两个 if 的事 需求是这样的:用户请求来了,需要从 S3 拉一份代码到本地,解压,然后执行。 为了避免同
仓位管理(position sizing):每只股票买多少钱。等权最简单,波动配最保守,信号配最直接。三个不选比一个要选更值钱:不全仓一只、不配一堆相关的、不设单票上限。策略的 alpha 靠因子,存活靠仓位。
设计分布式系统,最难的不是学概念,是拿到需求知道从哪下手。不是找最优解——最优解不存在。
多节点下,谁说了算?锁和选主都是排他性地让一个节点说了算,只是生命周期不同。
一个操作跨多个数据库、多个服务,没有谁替你兜底。分布式事务就是让多个独立操作原子完成。
数据分散在多个节点,消息不可靠,机器随时挂。现在需要这些节点就一个值达成一致——这就是共识。
数据有多个副本,读的时候能看到哪个版本?一致性模型就是系统给外部的承诺——从线性到最终,不是开关,是刻度。
单机上代码执行顺序就是时间顺序。到了分布式系统,铁律就碎了——没有全局时钟,消息到达顺序不固定。
复制是同一份数据放多份,分区是把不同数据放不同地方。数据量超过单机磁盘时,只能切开。
每台机器只有「部分的真相」。复制是把同一份数据放到多台机器上,让系统在单机挂掉时还能继续服务。 为什么需要复制 单机有物理上限。数据量可能超过单机磁盘,请求量可能超过单机 CPU,还有机器故障、机房断电这些不可抗力。复制把数据拷贝到多台机器,用冗余换可用性。这是分布式系统最原始的动力——如果一台机器