互联网架构设计漫谈 (10)-牢记这两个原理搞定分布式系统设计

架构设计的分表分库带来的结果是我们不得不考虑分布式事务,今天我们来看看分布式事务需要记住哪两个原理。

要点:

CAP

BASE

CAP

互联网应用大多会使用分表分库的操作,这个时候业务代码很可能会同时访问两个不同的数据库,做不同的操作。同时这两个操作有可能放在同一个事务中处理。

互联网架构设计漫谈 (10)-牢记这两个原理搞定分布式系统设计

这里引出分布式系统的CAP理论他包括以下三个属性:

一致性(Consistency):分布式系统中的所有数据,同一时刻有同样的值。业务代码往数据库01这个节点写入记录A,数据库01把A记录同步到数据库02,业务代码再从数据库02中读出的记录也是A。那么两个数据库存放的数据就是一致的。

互联网架构设计漫谈 (10)-牢记这两个原理搞定分布式系统设计

可用性(Availability):分布式系统中一部分节点出现故障,分布式系统仍旧可以响应用户的请求。假设数据库01 和02 同时存放记录A,由于数据库01挂掉了,业务代码不能从中获取数据。那么业务代码可以从数据库02中获取记录A。也就是在节点出现问题的时候,还保证的数据的可用性。

互联网架构设计漫谈 (10)-牢记这两个原理搞定分布式系统设计

分区容错性(Partition tolerance):假设两个数据库节点分别在两个区,而两个区的通讯发生了问题。就不能达成数据一致,这就是分区的情况,我就需要从C和A之间做出选择。是选择可用性(A),获取其中一个区的数据。还是选择一致性(C),等待两个区的数据同步了再去获取数据。

这种情况的前提是两个节点的通讯失败了,写入数据库01记录的时候,需要锁住数据库02记录不让其他的业务代码修改,直到数据库01记录完成修改。因此C和A在此刻是矛盾的。两者不能兼得。

互联网架构设计漫谈 (10)-牢记这两个原理搞定分布式系统设计

BASE

BASE原理广泛应用在数据量大,高并发的互联网场景。

基本可用(Basically Available): 不会因为某个节点出现问题就影响用户的请求。即使在流量激增的情况下,也会考虑通过限流降级的办法保证用户的请求是可用的。比如,电商系统在流量激增的时候,资源会向核心业务倾斜,其他的业务降级处理。

软状态( Soft State):一条数据如果存在多个副本,允许副本之间同步的延迟,在较短时间内能够容忍不一致。这个正在同步并且还没有完成同步的状态称为软状态。

互联网架构设计漫谈 (10)-牢记这两个原理搞定分布式系统设计

最终一致性( Eventual Consistency):最终一致性是相对于强一致性来说的,强一致性是要保证所有的数据都是一致的,是实时同步。而最终一致性会容忍一小段时间数据的不一致,但过了这段时间以后数据会保证一致。其包含以下几种一致性。

一. 因果一致性(Causal consistency)

如果有两个进程1和2都对变量X进行操作,进程1 写入变量X,进程2需要读取变量X然后用这个X来计算X+2。这里进程1和进程2 的操作就存在因果关系。进程2 的计算依赖于进程1写入的X,如果没有X的值进程2无法计算。

互联网架构设计漫谈 (10)-牢记这两个原理搞定分布式系统设计

二. 读己之所写(Read your writes)

进程1写入变量X之后,该进程可以获取自己写入的这个值。

互联网架构设计漫谈 (10)-牢记这两个原理搞定分布式系统设计

三. 会话一致性(Session consistency)

如果一个会话中实现来读己之所写。一旦数据更新,客户端只要在同一个会话中就可以看到这个更新的值。

互联网架构设计漫谈 (10)-牢记这两个原理搞定分布式系统设计

四. 单调写一致性(Monotoic write consistency)

进程1如果有三个操作分别是1,2,3。进程有两个操作分别是1,2。如果同时或者先后请求系统,系统会保证按照进程中操作的先后顺序来执行。

互联网架构设计漫谈 (10)-牢记这两个原理搞定分布式系统设计

总结:

介绍了为什么会遇到分布式事务的情况,以及CAP和BASE两个分布式系统的设计原理。

营运型手游开发、测试、正式的三阶段开发架构

在手机游戏的畅销排行榜上,可以看到大多数的游戏都是营运型的游戏。所谓的营运型游戏,指…的是游戏的开发并不是上架后就结束,而是需要持续的配合游戏营运的需求,进行游戏的更新、…内容调整以及后续内容的开发。这样的游戏虽然相对来说获利较佳,不过对于游戏开发团队来说

电商网站的商品详情页系统架构

数据库中存放了所有的商品信息,页面静态化系统,将数据填充进静态模板中,形成静态化页面,推入Nginx服务器。

web应用单点登录原理与简单实现

一、单系统登录机制1、http无状态协议web应用采用browser/server架构,http作为通信协议。

游戏编程开发《球球大作战》源码解析:服务器与客户端架构

鉴于agar.io类型游戏的火爆场面,一些公司纷纷效仿,一时间出现各种《大作战》类型的游戏。出于学习的目的,亦是做些技术和方案储备,接下来会有大概篇文章,分析下面这款使用nodejs编写的开源“球球大作战”。由于该游戏采用服务端运算、客户端显示的方式,服务

老公月入五万的程序员夫人,都过上贵妇的生活了么?

作者:程序人生https://blog.csdn.net/csdnsevenn/article/details/之前被一篇文章刷......夫人们要当贵妇,都只是一个梦,而已。架构师小秘圈聚集万架构师的小圈子长按二维码 ▲关注「架构师小秘圈」公众号谢谢老板,点个好看↓