1. 架构演变
在O2O外卖领域,基于位置服务的需求越来越多,这就要求DB能够存储地理位置信息,而在开源数据库中,对空间地理数据支持比较好的要数PG的插件Postgis。
饿了么在使用PG的过程中,由于性能及容量的原因,DB结构也在不断发生变化。 在刚开始使用PG时,公司使用的是最简单的结构一主两从,读写分离,Master负责写,Slave负责读,一切都是那么快乐的运行着。 但过了一段时间,随着公司业务量的扩大,单台数据库的写遇到了瓶颈,所以需要对DB进行拆分,在水平拆分与垂直拆分中,垂直拆分是相对简单的,由于饿了么业务与地理位置相关性很大,自然想到了根据地域进行切分,结构如下:
经过拆分把单一Master, 拆分成多个Master, 此时数据库的写已不是瓶颈。 世间万物总是在不断变化,饿了么每天几百万的订单量,相关的地理位置信息数据达到几百GB的真是轻轻松松, 有时DBA不得不进行一些系统维护,比如导出数据,做历史归档,DDL变更等等,但如果一个表数据有100G+的时候,那些操作想想都是头疼,此时不得不对表进行水平拆分,把大表变成小表,结合业务,饿了么对数据时效性要求比较强,故我们采用每天一个轮询表的方式进行水平拆分,结构如下: