知识卡片

SQL存储的三阶段演进:从直接使用到中间件再到统一存储平台

结构图卡

内容

NoSQL火了几年后大家发现关系数据不可能被完全抛弃,NoSQL不是No SQL、而是Not Only SQL,是对SQL的补充,因此互联网行业依然离不开关系数据,考虑到Oracle太贵还需要专人维护,一般都用MySQL、PostgreSQL这类开源数据库——优点是开源免费、拿来就用,缺点是性能不如商业数据库。SQL存储的演进大致分三个阶段。第一阶段是直接使用:业务量不大时直接用单实例数据库就够了;但随着业务发展,性能要求越来越高,必然要把数据拆到多个数据库实例才能撑住(这个瓶颈Oracle同样会遇到,只是时间早晚问题)。第二阶段是中间件:数据库拆分解决了性能问题,却带来”数据怎么拆、怎么组合”这个复杂度问题,如果每个业务都各自实现一遍,重复造轮子会浪费投入、拖慢业务开发速度,因此互联网公司普遍的做法是业务发展到一定阶段后,把分库分表这部分能力独立成中间件(如百度DBProxy、淘宝TDDL)——但把分库分表做到自动化、平台化本身技术门槛很高,通常只有规模足够大的公司才自己做,中小公司更适合直接用开源方案(MySQL官方推荐的MySQL Router、360开源的Atlas)。第三阶段是SQL存储平台:如果业务继续扩大、SQL服务器越来越多,每个业务都基于统一中间件各自独立部署一套SQL集群,又会带来新的复杂度——数据库资源利用率不高、各SQL集群分开维护导致维护成本持续攀升;因此实力雄厚的大公司会在SQL集群之上再构建统一的SQL存储平台,以对业务透明的方式统一提供资源分配、数据备份、迁移、容灾、读写分离、分库分表等一整套服务(比如淘宝的UMP,Unified MySQL Platform)。

结构图

flowchart LR
  A["阶段一:直接使用<br/>单实例MySQL/PostgreSQL<br/>性能撑不住时拆库"]
  A --> B["阶段二:中间件<br/>分库分表能力独立成中间件<br/>(自研如TDDL/DBProxy,或用开源MySQL Router/Atlas)<br/>解决'重复造轮子'"]
  B --> C["阶段三:SQL存储平台<br/>统一提供资源分配/备份/迁移/容灾/读写分离/分库分表<br/>(如淘宝UMP)<br/>解决'资源利用率低+维护成本高'"]

参考来源

- 位置:《从零开始学架构》第40讲《互联网架构模板:"存储层"技术》"SQL"(源文件:_epub-src/OEBPS/text00003.html) - 结论依据:原文说明"互联网公司流行的做法是业务发展到一定阶段后,就会将这部分功能独立成中间件……不过这部分的技术要求很高……一般是规模很大的公司才会自己做",并说明"实力雄厚的大公司此时一般都会在 SQL 集群上构建 SQL 存储平台,以对业务透明的形式提供资源分配、数据备份、迁移、容灾、读写分离、分库分表等一系列服务,例如淘宝的 UMP",直接支撑本卡片结论与结构图。 - 原始内容:所以互联网公司流行的做法是业务发展到一定阶段后,就会将这部分功能独立成中间件……实力雄厚的大公司此时一般都会在 SQL 集群上构建 SQL 存储平台……例如淘宝的 UMP(Unified MySQL Platform)系统。