微服务中台架构开发
上QQ阅读APP看书,第一时间看更新

2.1.6 分库分表

该学校是20世纪80年代修建的,占地面积有限,已经完全不能承载这么多学生和教职工的教学和日常生活。学校后来又在南边的大学城建了新校区,面积大、环境好,而且该大学作为示范校园,校园没有围墙,完全是开放式的,甚至他们的一卡通可以让整个大学城里的学生使用。为了让学弟学妹吃好喝好,我帮他们设计了新的架构。上次是对数据库进行主/从和读/写分离,但本质上这两个数据库是一个数据库,数据完全一样,当写的操作增多时还是单节点满足不了并发的需求。

解决方案也比较明确,即减轻对单数据库的访问压力,再次对数据库进行分库和分表的操作。该系统负责人建议将数据库按业务拆分为3个数据库,分别是食堂数据库、超市数据库和其他数据库。我当时极力反对这样的横向业务拆分,因为这样改动太大,几乎所有的业务代码都需要修改,开发量大,而且最熟悉这个系统的几位程序员都已经离职了,所以这样做的风险太大,我给他们的建议是纵向拆分,也就是按地域进行拆分,老校区用一个数据库(数据库1),新校区用一个数据库(数据库2),这样底层代码和数据库结构基本不需要进行修改,只需要应用在请求数据库时带上标识是请求老校区的数据库还是新校区的数据库即可,改动很小即可解决他们碰到的问题,如图2-6所示。

图2-6

正如将厨房进行拆分,一个做面的厨房配两个厨师、一个炒菜的厨房配两个厨师。