10分钟搞懂:亿级用户的分布式数据存储解决方案!

  • 时间:
  • 浏览:103
  • 来源:我爱搬资源网 - 专注共享唐朝博客活动

来源:IT进阶思维原创,转载请注明原出处

内容提供:李健康智慧,前阿里巴巴技术专家,《大型网站技术架构》作者

6月6日晚,林志玲与Akira宣布婚讯、徐蔡坤祝福高考同学超常发挥,粉丝们百万的转发和点赞造成微博短暂宕机。

分布式数据库和分布式存储是分布式系统中难度最大、挑战最大,也是最容易出问题报告 的地方。互联网公司只能防止分布式数据存储的问题报告 ,不让 支撑更多次亿级用户的涌入。

接下来,你将花费十分钟掌握以下三方面内容:

1、MySQL复制:包括主从复制和主主复制;

2、数据分片:数据分片的原理、分片的方案、分片数据库的扩容;

3、数据库分布式部署的几种方案。

一、MySQL复制

1.MySQL的主从复制

MySQL的主从复制,本来将MySQL主数据库中的数据复制到从数据库中去。

主要目的是实现数据库读写分离,写操作访问主数据库,读操作访问从数据库,从而使数据库具有更强大的访问负载能力,支撑更多的用户访问。       

它的主要的复制原理是:当应用守护进程客户端发送两根更新命令到数据库的随后 ,数据库会把这条更新命令同步记录到Binlog中,假使 由另外另一个多多多多多守护进程从Binlog中读取这条日志,假使 通过远程通讯的方法将它复制到从服务器后边去,从服务器获得这条更新日志后,将其加入到买车人的Relay log中,假使 由另外另一个多多多多多SQL执行守护进程从Relay log中读取这条新的日志,并把它在本地的数据库中重新执行一遍。

本来当客户端应用守护进程执行另一个多多多多多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的主主复制

假使 一主多从只不让 实现从服务器上的那些优点,当主数据库宕机不可用的随后 ,数据依然是只不让 写入的,不可能 数据只不让 写入到从服务器后边去,从服务器是只读的。

为了防止主服务器的可用性问题报告 ,亲戚亲戚有些人能只能使用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.数据分片介绍     

a.主要目标:将一张数据表切分成较小的片,不同的片存储到不同的服务器后边去,通过分片的方法使用多台服务器存储一张数据表,防止一台服务器记录存储防止整张数据表带来的存储及访问压力。

b.主要特点:数据库服务器之间互相独立,不共享任何信息,即使有每段服务器故障,本来影响整个系统的可用性。第好几个 特点是通过分片键定位分片,也本来说另一个多多多多多分片存储到哪个服务器后边去,到哪个服服务器后边去查找,是通过分片键进行路由分区算法计算出来的。在SQL话语后边,假使 含高分片键,就能只能访问特定的服务器,而不时要连接所有的服务器,跟有些的服务器进行通信。

c.主要原理:将数据以本身方法进行切分,通常本来用刚才提到的分片键的路由算法。通过分片键,根据本身路由算法进行计算,使每台服务器都只存储一每段数据。

2.硬编码实现数据分片

如图例子,通过应用守护进程硬编码的方法实现数据分片。假设亲戚亲戚有些人的数据库将数据表根据用户ID进行分片,分片的逻辑是用户ID为奇数的数据存储在服务器2中,用户ID为偶数的数据存储在服务器1中。这么,应用守护进程在编码的随后 ,就能只能直接通过用户ID进行哈希计算,通常是余数计算。不可能 余数为奇数就连接到服务器2上,不可能 余数为偶数,就连接到服务器1上,本来就实现了一张用户表分片在另一个多多多多多服务器上。

本身硬编码主要的缺点在于,数据库的分片逻辑是应用守护进程自身实现的,应用守护进程时要耦合数据库分片逻辑,不有有助于于应用守护进程的维护和扩展。另一个多多多多多简单的防止方法本来将映射关系存储在外面。

3.映射表內部存储       

应用守护进程在连接数据库进行SQL操作的随后 ,通过查找內部的数据存储查询买车人应该连接到哪台服务器后边去,假使 根据返回的服务器的编号,连接对应的服务器执行相应的操作。在本身例子中,用户ID=33查找服务器是2,用户ID=94查找服务器也是2,它们根据查找到的用户服务器的编号,连接对应的服务器,将数据写入到对应的服务器分片中。

4.数据分片的挑战及防止方案  

数据库分片面临如图的挑战:    

现在有有些专门的分布式数据库后边件来防止上述那些问题报告 ,比较知名的有Mycat。Mycat是另一个多多多多多专门的分布式数据库后边件,应用守护进程像连接数据库一样的连接Mycat,而数据分片的操作全版交给了Mycat去完成。

如下本身例子中,有好几个 分片数据库服务器,数据库服务器dn1、dn2和dn3,它们的分片规则是根据prov字段进行分片。这么,当亲戚亲戚有些人执行另一个多多多多多查询操作”select * from orders where prov=’wuhan’“的随后 ,Mycat会根据分片规则将这条SQL操作路由到dn1本身服务器节点上。dn1执行数据查询操作返回结果后,Mycat再返回给应用守护进程。通过使用Mycat本来的分布式数据库后边件,应用守护进程能只能透明的无感知的使用分片数据库。一起去,Mycat还一定程度上支持分片数据库的联合join查询以及数据库事务。

5.分片数据库扩容伸缩

一刚开始,数据量还也有这么来不多,另一个多多多多多数据库服务器就够了。假使 随着数据的不断增长,不可能 时要增加第另一个多多多多多第好几个 第好几个 甚至更多的服务器。在增加服务器的过程中,分片规则时要改变。分片规则改变后,随后 写入到本来的数据库中的数据,根据新的分片规则,不可能 要访问新的服务器,这么来不多这么来不多还时要进行数据迁移。

不管是更改分片的路由算法规则,还是进行数据迁移,也有有些比较麻烦和复杂化的事情。假使 在实践中通常的做法是数据分片使用逻辑数据库,也本来说一刚开始我觉得只时要另一个多多多多多服务器就能只能完成数据分片存储,假使 依然在逻辑上把它切分成多个逻辑数据库。具体的操作方法,本文不让大篇幅进行阐述了。

三、数据库部署方案

1.单一服务和单一数据库      

这是最简单的部署方案。应用服务器不可能 有多个,假使 它们完成的功能是单一的功能。多个完成单一功能的服务器,通过负载均衡对外提供服务。它们只连一台单一数据库服务器,这是应用系统早期用户量比较低的随后 的本身架构方法。

2.主从复制实现伸缩              

不可能 对系统的可用性和对数据库的访问性能提出更高要求的随后 ,就能只能通过数据库的主从复制进行初步的伸缩。通过主从复制,实现一主多从。应用服务器的写操作连接主数据库,读操作从从服务器上进行读取。

3.另一个多多多多多Web服务及另一个多多多多多数据库            

随着业务更加复杂化,为了提供更高的数据库防止能力,能只能进行数据的业务分库。数据的业务分库是本身逻辑上的,是基于功能的本身分割,将不同用途的数据表存储在不同的物理数据库后边去。

在本身例子中,有产品类目服务和用户服务,另一个多多多多多应用服务器集群,对应的也将数据库也拆分成另一个多多多多多,另一个多多多多多叫做类目数据库,另一个多多多多多叫做用户数据库。每个数据库依然使用主从复制。通过业务分库的方法,在同另一个多多多多多系统中,提供了更多的数据库存储,一起去也就提供了更强大的数据访问能力,一起去也使系统变得更加简单,系统的耦合变得更低。

4.综合部署方案              

根据不同数据的访问特点,使用不同的防止方案进行应对。比如说类目数据库,你说歌词 通过主从复制就不让 满足所有的访问要求。假使 不可能 用户量不多怎样大,进行主从复制或主主复制,还是只不让 满足数据存储以及写操作的访问压力,这随后 就就能只能对用户数据库进行数据分片存储了。一起去每个分片数据库也使用主从复制的方法进行部署。

以上为分布式数据库的部署方案,不可能 你的应用也有只能使用关系数据库话语,你还能只能确定NoSQL数据库,NoSQL数据库会提供更强大的数据存储能力和并发读写能力。假使 NoSQL数据库不可能 CAP原理的约束不可能 会遇到数据不一致的问题报告 。防止数据不一致的问题报告 ,能只能通过时间戳合并、客户端判断以及投票本来的几种机制防止,实现最终一致性。

本文由

转载

发布在

ITPUB

,转载此文请保持文章全版性,并请附上文章来源(ITPUB)及本页链接。

原文链接:http://www.itpub.net/2019/06/28/210006/