我们继续来讲分布式,回到我们的创业游戏。
我们的业务规模上来了,客户也越来越忠诚了。很多客户都通过我们的订票服务,来方便自己的行程。
那对这些老客户,我们的宗旨是:要不断超越客户的期待。
所以,我们要建立我们的客户数据库。
我们要记录下每个客户的偏好的航空公司,偏爱的酒店。下次服务,才能直接更好地服务客户。
怎么办?
最简单的办法,每个客服小姐姐各自用自己的记事本,记录下客户的号码,偏好等信息。
这些记事本就是我们的“客户数据库”。
这些数据都记录在记事本上,会有一个问题,如里同一个客户,每个客服小姐姐都记录一次。是不是很费时费力,还重复记录,浪费资源。
怎么办?
还是跟之前一样,拆分!垂直拆分。
再拆分一组,就叫:客户信息记录组。
如果客户小姐姐要记录客户信息,就把信息写在纸条上,然后直接扔给:客户信息记录组,让这个小组自行处理:去除重复,更新信息。
当然,我们的客户信息记录组,可以用execl把客户信息上记录下来。这样,也方便数据处理。
现在我们的业务架构是这样的:
有同学说,这个架构图好像跟我们的IT软件架构图很像。
没错。其实,所有的IT软件架构,遵从从业务架构设计的。
技术只是工具,业务才是核心。
回到我们的客户信息记录组。这个组也有多个小姐姐记录,如果大家都各自用自己的excel,怎么保证大家的信息没有重复,都是一致的呢?
这个时候,我们就要上数据库系统了。什么是数据库系统,简单来说,就是记录数据的仓库。
好,我们买了一台电脑,招了一个程序员,下载了个mysql,写了一个简单程序,给客户信息记录组的姐姐用。
刚开始,数据不大,问题不大。
当数据越来越多时,一台数据库明显支持不下。怎么办?
很简单,多买几台数据库。能用钱解决的问题,就不是问题。
那现在问题又来了,这些数据库怎么保持数据一致性?
这个就是分布式数据库要解决的问题。什么是分布式数据库?
简单来说,它就是用多台数据库组成一个“整体”,给外界提供数据库服务的数据仓库系统。
有同学会说了,你要很大很大的数据量才能用分布式数据库。你一家小公司,用这个是不是浪费了?
有道理!一般情况下,小公司是用不上分布式。但我们做为有梦想的企业家,一定要提前规划,站在未来看现在!我们才有机会成功!
马云说过:梦想还是要有的,万一实现了呢?
所以,叫那个程序员开始干活!
首先我们要分析一下业务。
客户小姐姐大部分情况下,都 是查询客户信息的比较多,占了80%。新增,和更新信息的情况比较少,占了20%。
如果查询和记录都在一个数据库,经常会造成冲突,造成“锁表”。这会造成严重的性能问题,会造成对客户体验严重的损害!
很自然,我们可以想到,那是不是可以分开两个库,一个用来记录,一个用来查询。
这就是读写分离,读写分离是很重要的设计原则。可以极大地提高查询的效率。如下:
尽管采取了读写分离的方式,但随着数据库的压力继续增加,数据库的瓶颈越来越突出。怎么办?
我们分别对读写库的表进行水平拆分,也就是分表。
比如,可以按表中的唯一ID的hash值来分,如果hash值是偶数,就放在“偶数表”,如果hash值是奇数,就放在奇数表。
如下图:
讲到这里,我们基本上就建立了分布式数据库系统。
明天继续讲分布式架构的演进。