知识卡片

优化期"优化派"与"架构派"之争,及架构期"拆"字诀的三个方向

结构图卡

内容

承接[[初创期:业务重创新轻完善,技术唯一要求是”快”]]的堆功能期,功能越堆越多之后系统会变得越来越复杂,继续堆功能会越来越吃力、越来越慢,典型症状是改一个需求要动好多地方、一不小心就改出问题,直到团队再也受不了这种慢,才会下决心解决——这时通常会分裂成两派。优化派主张优化现有系统(重构代码、分层、优化某个MySQL查询、机械硬盘换SSD、MySQL换Oracle、加Memcache缓存),优点是改动小、能快速落地,缺点是可能撑不了多久系统又扛不住了。架构派主张调整系统架构,把原来的大系统拆成多个互相配合的小系统(比如把购物系统拆成登录认证、订单、查询、分析等子系统),优点是一次调整能支撑较长期的发展,缺点是动作大、耗时长、对业务的影响也更大。现实中大部分公司这个阶段都是优化派先赢,原因很直接:此时”优化”就是最快的方式,至于优化派撑不了多久这个问题,反而不是当下最要紧的事——毕竟业务能不能真的发展到那个阶段本身就是未知数,保住当下的竞争力才是第一位的。但如果业务真的继续发展,优化早晚会撑不住——再怎么优化,单机系统的能力总有极限(Oracle再强也扛不住1亿交易量,小型机再好也撑不住100万在线人数),这时候就没有别的选择,只能进入架构期,先前被压制的架构派开始扬眉吐气。架构期能用的手段很多,但归根结底就是一个字”拆”,可以拆的地方包括:拆功能(把购物系统拆成登录认证子系统、订单系统、查询系统、分析系统)、拆数据库(MySQL从一台变两台、两台变四台,加DBProxy、做分库分表)、拆服务器(服务器从一台变两台、两台变四台,加Nginx、HAProxy这类负载均衡系统)。

结构图

flowchart TB
  A["堆功能期后遗症:越堆越慢,改一处牵动多处"]
  A --> B["优化派:重构/分层/换硬件/加缓存/换数据库"]
  B --> B1["优点:改动小,落地快"]
  B --> B2["缺点:不久后系统又会扛不住"]
  A --> C["架构派:拆大系统为多个小系统"]
  C --> C1["优点:能支撑较长期发展"]
  C --> C2["缺点:动作大、耗时长、影响业务"]
  B1 --> D["现实:多数公司优化派先赢<br/>因为优化是当下最快的路<br/>业务能否发展到瓶颈本就未知"]
  D --> E["业务真发展下去:<br/>单机能力见顶(如Oracle扛不住1亿交易)<br/>→被迫进入架构期"]
  E --> F["架构期核心手段:拆<br/>拆功能/拆数据库(分库分表+DBProxy)/拆服务器(负载均衡)"]

参考来源

- 位置:《从零开始学架构》第39讲《互联网技术演进的模式》"发展期"之"优化期""架构期"(源文件:_epub-src/OEBPS/text00003.html) - 结论依据:原文说明"优化派的优势是对系统改动较小,优化可以比较快速地实施;缺点就是可能过不了多久,系统又撑不住了""大部分情况下都是'优化派'会赢,主要的原因还是因为此时'优化'是最快的方式",及架构期"归根结底可以总结为一个字'拆'……拆功能……拆数据库……拆服务器",直接支撑本卡片结论与结构图。 - 原始内容:优化派的核心思想是将现有的系统优化……架构派的核心思想是调整系统架构……大部分情况下都是"优化派"会赢……架构期可以用的手段很多,但归根结底可以总结为一个字"拆",什么地方都可以拆。