10分钟搞懂:亿级⽤户的分布式数据存储解决⽅案!
分布式数据库和分布式存储是分布式系统中难度最⼤、挑战最⼤,也是最容易出问题的地⽅。互联⽹公司只有解决分布式数据存储的问题,才能⽀撑更多次亿级⽤户的涌⼊。
接下来,你将花费⼗分钟掌握以下三⽅⾯内容:
顺丰快递单号查询号码查询物流1、MySQL复制:包括主从复制和主主复制;
2、数据分⽚:数据分⽚的原理、分⽚的⽅案、分⽚数据库的扩容;
3、数据库分布式部署的⼏种⽅案。
⼀、MySQL复制
1.MySQL的主从复制
MySQL的主从复制,就是将MySQL主数据库中的数据复制到从数据库中去。
世界上最矮的人主要⽬的是实现数据库读写分离,写操作访问主数据库,读操作访问从数据库,从⽽使数据库具有更强⼤的访问负载能⼒,⽀撑更多的⽤户访问。
它的主要的复制原理是:当应⽤程序客户端发送⼀条更新命令到数据库的时候,数据库会把这条更新命令同步记录到Binlog中,然后由另外⼀个线程从Binlog中读取这条⽇志,然后通过远程通讯的⽅式将它复制到从服务器上⾯去,从服务器获得这条更新⽇志后,将其加⼊到⾃⼰的Relay log中,然后由
另外⼀个SQL执⾏线程从Relay log中读取这条新的⽇志,并把它在本地的数据库中重新执⾏⼀遍。
2022年10月两会时间这样当客户端应⽤程序执⾏⼀个update命令的时候,这个命令会在主数据库和从数据库上同步执⾏,从⽽实现了主数据库向从数据库的复制,让从数据库和主数据库保持⼀样的数据。
2.MySQL的⼀主多从复制
MySQL的主从复制是⼀种数据同步机制,除了可以将⼀个主数据库中的数据同步复制到⼀个从数据库上,还可以将⼀个主数据库上的数据同步复制到多个从数据库上,也就是所谓的MySQL的⼀主多从复制。
多个从数据库关联到主数据库后,将主数据库上的Binlog⽇志同步地复制到了多个从数据库上。通过执⾏⽇志,让每个从数据库的数据都和主数据库上的数据保持了⼀致。这⾥⾯的数据更新操作表⽰的是所有数据库的更新操作,除了不包括SELECT之类的查询读操作,其他的INSERT、DELETE、UPDATE这样的DML写操作,以及CREATE TABLE、DROPT ABLE、ALTER TABLE等DDL操作也都可以同步复制到从数据库上去。
3.⼀主多从复制的优点
⼀主多从复制有四⼤优点,分别是分摊负载、专机专⽤、便于冷备和⾼可⽤。
a.分摊负载
将只读操作分布在多个从数据库上,从⽽将负载分摊到多台服务器上。
b.专机专⽤
可以针对不同类型的查询,使⽤不同的从服务器。
c.便于进⾏冷备
即使数据库进⾏了⼀主多从的复制,在⼀些极端的情况下。也可能会导致整个数据中⼼的数据服务器都丢失。所以通常说来很多公司会对数据做冷备,但是进⾏冷备的时候有⼀个困难点在于,数据库如果正在进⾏写操作,冷备的数据就可能不完整,数据⽂件可能处于损坏状态。使⽤⼀主多从的复制就就可以实现零停机时间的备份。只需要关闭数据的数据复制进程,⽂件就处于关闭状态了,然后进⾏数据⽂件拷贝,拷贝完成后再重新打开数据复制就可以了。
d.⾼可⽤
如果⼀台服务器宕机了,只要不发请求给这台服务器就不会出问题。当这台服务器恢复的时候,重新发请求到这台服务器。所以,在⼀主多从的情况下,某⼀台从服务器宕机不可⽤,对整个系统的影响是⾮常⼩的。
4.MySQL的主主复制
但是⼀主多从只能够实现从服务器上的这些优点,当主数据库宕机不可⽤的时候,数据依然是不能够写⼊的,因为数据不能够写⼊到从服务器上⾯去,从服务器是只读的。斗气王妃15岁
为了解决主服务器的可⽤性问题,我们可以使⽤MySQL的主主复制⽅案。所谓的主主复制⽅案是指两台服务器都当作主服务器,任何⼀台服务器上收到的写操作都会复制到另⼀台服务器上。
如上主主复制原理图,当客户端程序对主服务器A进⾏数据更新操作的时候,主服务器A会把更新操作写⼊到Binlog⽇志中。然后Binlog会将数据⽇志同步到主服务器B,写⼊到主服务器的Relay log中,然后执Relay log,获得Relay log中的更新⽇志,执⾏SQL操作写⼊到数据库服务器B的本地数据库中。B服务器上的更新也同样通过Binlog复制到了服务器A的Relay log中,然后通过Relay log将数据更新到服务器A中。冬奥奖牌
通过这种⽅式,服务器A或者B任何⼀台服务器收到了数据的写的操作都会同步更新到另⼀台服务器,实现了数据库主主复制。主主复制可以提⾼系统的写可⽤,实现写操作的⾼可⽤。
5.MySQL的主主失效恢复
使⽤MySQL服务器实现主主复制时,数据库服务器失效该如何应对?
正常情况下⽤户会写⼊到主服务器A中,然后数据从A复制到主服务器B上。当主服务器A失效的时候,写操作会被发送到主服务器B中去,数据从B服务器复制到A服务器。
主主失效的维护过程如下:
最开始的时候,所有的主服务器都可以正常使⽤,当主服务器A失效的时候,进⼊故障状态,应⽤程序检测到主服务器A失效,检测到这个失效可能需要⼏秒钟或者⼏分钟的时间,然后应⽤程序需要进
⾏失效转移,将写操作发送到备份主服务器B上⾯去,将读操作发送到B服务器对应的从服务器上⾯去。
⼀段时间后故障结束,A服务器需要重建失效期间丢失的数据,也就是把⾃⼰当作从服务器从B服务器上⾯去同步数据。同步完成后系统才能恢复正常。这个时候B服务器是⽤户的主要访问服务器,A服务器当作备份服务器。
5.MySQL复制注意事项
使⽤MySQL进⾏主主复制的时候需要注意的事项如下:
a.不要对两个数据库同时进⾏数据写操作,因为这种情况会导致数据冲突。
b.复制只是增加了数据的读并发处理能⼒,并没有增加写并发的能⼒和系统存储能⼒。
c.更新数据表的结构会导致巨⼤的同步延迟。
需要更新表结构的操作,不要写⼊到到Binlog中,要关闭更新表结构的Binlog。如果要对表结构进⾏更新,应该由运维⼯程师DBA对所有主从数据库分别⼿⼯进⾏数据表结构的更新操作。
⼆、数据分⽚
数据复制只能提⾼数据读并发操作能⼒,并不能提⾼数据写操作并发的能⼒以及数据整个的存储容量,也就是并不能提⾼数据库总存储记录数。如果我们数据库的写操作也有⼤量的并发请求需要满⾜,或者是我们的数据表特别⼤,单⼀的服务器甚⾄连⼀张表都⽆法存储。解决⽅案就是数据分⽚。
1.数据分⽚介绍
cf鼠标灵敏度a.主要⽬标:将⼀张数据表切分成较⼩的⽚,不同的⽚存储到不同的服务器上⾯去,通过分⽚的⽅式使⽤多台服务器存储⼀张数据表,避免⼀台服务器记录存储处理整张数据表带来的存储及访问压⼒。
b.主要特点:数据库服务器之间互相独⽴,不共享任何信息,即使有部分服务器故障,也不影响整个系统的可⽤性。第⼆个特点是通过分⽚键定位分⽚,也就是说⼀个分⽚存储到哪个服务器上⾯去,到哪个服服务器上⾯去查,是通过分⽚键进⾏路由分区算法计算出来的。在SQL语句⾥⾯,只要包含分⽚键,就可以访问特定的服务器,⽽不需要连接所有的服务器,跟其他的服务器进⾏通信。
c.主要原理:将数据以某种⽅式进⾏切分,通常就是⽤刚才提到的分⽚键的路由算法。通过分⽚键,根据某种路由算法进⾏计算,使每台服务器都只存储⼀部分数据。
2.硬编码实现数据分⽚
如图例⼦,通过应⽤程序硬编码的⽅式实现数据分⽚。假设我们的数据库将数据表根据⽤户ID进⾏分⽚,分⽚的逻辑是⽤户ID为奇数的数据存储在服务器2中,⽤户ID为偶数的数据存储在服务器1中。那么,应⽤程序在编码的时候,就可以直接通过⽤户ID进⾏哈希计算,通常是余数计算。如果余数为奇数就连接到服务器2上,如果余数为偶数,就连接到服务器1上,这样就实现了⼀张⽤户表分⽚在两个服务器上。
这种硬编码主要的缺点在于,数据库的分⽚逻辑是应⽤程序⾃⾝实现的,应⽤程序需要耦合数据库分⽚逻辑,不利于应⽤程序的维护和扩展。⼀个简单的解决办法就是将映射关系存储在外⾯。
3.映射表外部存储
应⽤程序在连接数据库进⾏SQL操作的时候,通过查外部的数据存储查询⾃⼰应该连接到哪台服务器上⾯去,然后根据返回的服务器的编号,连接对应的服务器执⾏相应的操作。在这个例⼦中,⽤户ID=33查服务器是2,⽤户ID=94查服务器也是2,它们根据查到的⽤户服务器的编号,连接对应的服务器,将数据写⼊到对应的服务器分⽚中。
4.数据分⽚的挑战及解决⽅案
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论