架构师训练营 1 期 -- 第六周笔记
架构师训练营第六周,这周类容比较多。
首先讲了分布式数据库服务器,最简单的分部署数据库服务器是主从复制,一主多从,主写从读。主从复制的原理是,主数据库将数据写入数据库的同时,还把写入日志写到一个bin log中,从服务器通过拉取bin log到本地,然后将数据写入,达到和主服务器数据一致的目的。主从复制中,从服务器可以有多台,分别用作不同用途,如数据读取,数据分析,数据备份等。
主从复制会有一个问题,那就是主服务器的单点问题,一旦主服务器宕机,写操作就无法使用了。为了解决这个问题,可以采用主主复制。主主复制是同时启用两台主服务器,主主复制的原理和主从复制一样。当一台主服务器宕机时,另一台主服务器就会接替写操作。主主复制同时只有一台服务器承担写操作,其目的是保证写服务器的高可用,本身并不能提高写得并发能力以及数据库的存储能力。
如果要解决数据库写的高并发以及存储能力,那么就需要使用数据分片。数据分片是将数据分别存储在不同的数据库服务器上,比如讲10亿条数据分别存储到100台服务器上,每台服务器存储1000W,那么整合数据库集群的存储能力以及写入能力都得到了增强。分片可以通过ID硬编码以及数据表映射的方式将数据存储到不同的数据库服务器上,但是这种方式会带来很大的额外开发,也是编码变得复杂,实际应用中,我们往往使用一些数据库中间件来实现。
数据库中间件是将自己伪装成一个数据库服务器,对客户端提供服务器,它自己负责接收解析SQL,并将SQL路由到不同的服务器上去执行,同时对返回结果进行合并。这样客户端就感觉不到后端数据库集群的存在,感觉就像和一台数据库服务器通一样。
使用数据库中间件通常会面临一个扩容问题,当增加服务器时,新的数据库服务器上没有数据,并且原来的路由映射也会改变,比如原来两台服务器,单数ID写入到第一台服务器,双数服务器写入到第二台。如果增加第三台服务器,就对3取模将数据写入到对应的服务器上,那么很多数据都需要做迁移。解决办法是刚开始的时候计算好需要的服务器,对一个较大的数据进行取模。比如可以对100取模,建100个实例放在两台服务器上,在扩容在,选择一部分实例数据复制到新服务器上,并修改迁移后的数据库实例的地址。
在分布式系统中,一个重要概念是CAP原理,CAP定义是说,在一个分布式系统中,分区容错性,可用性和一致性,只能满足三个中的两个。
分区容错性是指当网络分区发生时,系统依然可用。
可用性是说对一个系统进行系统,总能返回一个合理的结果。
一致性是指系统不会出现数据不一致的情况。
而在分布式系统中,网络总会出故障,所以分区容错性必须得到保证,那么一个分布式系统同时只可能满足CP或者AP。
满足CP的例子是,如果我们的数据要写两份,那么必须两份都写入成功,写入操作才能成功。如果其中一个节点不可达,那么写入失败,这样可以保证CP,但无法保证AP。
满足AP的列子是数据库主从复制,当主从数据库网络通信失败时,想主数据库服务器写入成功,但是从服务器却无法同步数据,但是从服务器依然是可用的,只是可能读到了不正确的结果。此时满足AP,却无法满足CP。
在NOSQL数据库中,还有一个BASE理论,BASE是Basically Available,Soft State以及Eventually Consistent的缩写,意思是当系统发生故障时,允许部分不可用,同时接受数据存在中间状态,只要数据达到最终一致性即可。
评论