架构师第六周作业及总结
话说天下大势,合久必分,分久必合。
各种技术之间没有优劣、高低之分,每种技术或技术之组合都有与之对应的最佳应用场景。没有哪一种技术是就是银弹,架构师的价值所在就是对症每一种业务场景应用不同的技术(组合)。业务和技术相辅相成,业务的症成了技术的就,技术的道解决了业务的痛。
分布式数据库架构-mysql
主从复制
级联复制
读写分离
MGR集群
PXC集群
主主复制(在生产环境中不建议此种架构模式,容易造成数据冲突和混乱)
MHA主高可用架构
基于zookeeper的主高可用
分布式的架构的理论基础-CAP定理
CAP定理,又被称为布鲁尔定理,由加州大学伯克利分校的计算机科学家埃里克.布鲁尔在2000年的ACM PODC上提出的一个猜想。2002年,麻省理工学院的赛斯.吉尔伯特和南希.林奇发表了布鲁尔猜想的证明,使之成为分布式计算领域公认的一个定理。
CAP:在一个分布式系统(指互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性(Consstence)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,另外一个必须被牺牲。
C(Consistence):对某个指定的客户端来说,读操作保证能够返回最新的写操作结果。
A(Availability):非故障节的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。
P(Partition Tolerance):当出现网络分区后,系统能够继续“履行职责”。
虽然CAP理论定义是三个要素中只能取两个,但放到分布式环境下来思考,我们会发现必须选择P(分区容错性)要素,因为网络本身无法做到100%可靠,有可能出现故障,那么分区是一个必须的现象。如果我们选择了CA而放弃了P,那么当分区现象发生时,为了保证C,系统需要禁止写入,当有写请求时,系统返回了error,这又和A冲突了,因为A要求返回no error和no timeout。因此,分布式系统理论上不可能选择CA架构,只能选择CP或AP架构。
CP-Consistence/Partition Tolerance
如上图所示,为了保证一致性,当发生分区现象后,N1节点上的数据已经被客户端1更新到X1后,但这时由于N1和N2节点之间的网格发生故障,造成复制通道中断,数据X1无法更新到节点N2上,节点N2上面的数据还是X。这时客户端2访问到了N2节点,这时N2节点需要返回ERROR,提示客户端“系统现在发生了错误”,这种处理方式违背了可用性A的要求,因此CAP三者只能满足CP。
AP-Availability/Partition Tolerance
如上图所示,为了保证可用性,当分区现象发生后,N1节点上的数据已经被客户端更新到了Y1状态,这时N1和N2节点之间发生了网络故障,复制通道中断,数据Y1无法复制到N2节点进行更新,节点N2上的数据是Y,这时客户端2向N2节点发起数据请求,N2节点将自已当前的数据Y返回给了客户端2。而实际上最新的数据应该是Y1,这就不满足一致性A的要求了,CAP三者只能满足AP。
CAP关注的粒度是数据,而不是整个系统。
CAP是忽略网络延迟的
正常运行情况下,不存在CP和AP的选择,可以同时满足CA
放弃并不等于什么都不做,需要为分区恢复后做准备
BASE理论
BASE是Basically Available(基本可用)、Soft State(软状态)、Eventually Consistency(最终一致性)三个短语的缩写,其核心思想是即使无法做到强一致性,但应用可以采用适合的方式达到最终一致性。
基本可用(Basically Available):分布式系统在出现故障时,允许损失部分可用性,即保证核心可用
软状态(Soft State):允许系统存在中间状态,而该中间状态不会影响系统整体可用性。
最终一致性(Eventually Consistency):系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。
BASE理论是CAP理论中AP方案的延伸。
ACID特性
ACID特指事务的四大特性:
原子性(Atomicity):事务包含的所有操作要么全部成功,要么全部失败回滚。因此,如果事务操作成功,则必须要全部应用到数据库中,如果事务操作失败,则不能对数据库有任何的影响
一致性(Consistency):事务必须使数据库从一种一致性状态变迁到另一种一致性状态,即一个事务执行之前和执行之后都必须处于一致性状态
隔离性(Isolation):当多个用户并发访问数据库同一对象时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相到隔离
持久性(Durability):事务一旦提交成功,那么它对数据库的改变将是永久性的。即使数据库系统发生重启或异常断电等状况,已经提交的事务也不会丢失
ACID特性是支持事务的关系型数据库所必须遵循的原则,事务的实现机制非常复杂,它使用回滚机制来实现事务的原子性,借助锁机制和MVCC机制来保证事务的并发性和隔离性,基于WAL、checkpoint、crash recovery等机制实现事务的持久性。从而保证整个数据库系统始终处于一致状态。
版权声明: 本文为 InfoQ 作者【傻傻的帅】的原创文章。
原文链接:【http://xie.infoq.cn/article/b081cd96e13b5ce5154981791】。文章转载请联系作者。
评论 (1 条评论)