如何理解和实践分布式系统的三大指标——CAP
计算资源、存储资源又不够了?
数据库存不下了?
了解一下分布式系统~
▲点击图片,了解分布式应用系统!
随着互联网技术的发展,分布式应用系统对具备高性能、高可用性、可扩展性和可维护性的架构的依赖度越来越高。
分布式系统的运用非常广泛,它的标准定义是:由一组通过网络进行通信,为了共同完成任务而协作的计算机节点组成的系统。
因为分布式系统的关键在于多节点和协作共同完成任务,所以分布式系统的出现就是为了解决资源(如计算、存储等)紧缺的问题,也就是说,利用更多的资源处理更多的任务。
分布式系统下常见三个指标为:
数据一致性(Consistency)
系统可用性(Availability)
系统连通性(分区容量性 Partition tolerance)
这三者无法同时实现,取其首字母称为CAP理论。
— 01 —
数据一致性C
数据的一致性问题是多分区场景下衍生出来的必然问题。
数据初始状态一致,当发生变更的时候,多分区场景下由于网络迟延,通信的失败有可能导致数据的不一致性,一致性的处理是常见的,只要在多分区场景下,例如数据库主从、数据库和缓存、多数据中心数据等都会存在。
通常来说,数据一致性的处理有多种方式:
● 数据串行化处理,例如使用消息队列的分区机制实现;
● 数据带标准化的时间戳来实现,数据无需有序,并发处理都可以,最终设置的时候只需要针对时间戳进行比较即可,按照最新的时间戳进行设置。
— 02 —
系统可用性A
可用性的含义是系统只要收到请求就必须响应,可以理解为7*24持续服务,它和系统可靠性需要区分,可靠性为系统的输出的正确性层面,例如我需要查询到深圳到广州的高铁票,你如果显示出长沙到广州的票在里面,就代表系统不可靠,所以总结来说:
● 系统可用性:7*24持续性服务,关注的是时间维度的可用。
● 系统可靠性:正确的指令得到正确的输出,关注的是信息的准确性。
例如系统的集群机制、反向代理机制、服务治理机制,系统降级机制,都是为了解决系统的可用性问题。
— 03 —
系统连通性P
上面讲到分区会衍生出数据一致性问题,而要解决一致性,首先就需要考虑分区的连通性问题,系统之间的各个节点不可能孤立的,需要通过网络通信进行连接,
但是网络质量及通信的可靠性是无法保障的,这是三者综合考虑的前提,也就是连通性一定要考虑到不可靠的情况,那么剩下的就是在可用性(Availability)和数据一致性(Consistency)之间进行选择。
— 04 —
CA
假设不考虑分区(P)的情况下,只有一个分区(副本),副本的一致性自不必说,自然是一致的;可用性方面,一个节点的写入不需要同步到其他节点,可以高效完成。
如果增加多个分区(提高分区容错性),数据的写入需要同步到多个节点(强一致性,所有节点同步成功后再返回用户),增加了同步时间和同步失败的可能性,降低了可用性;
如果采用弱一致性,即写入操作在主节点成功后即返回用户结果,再通过异步方式同步到多个分区,那么会增加同步失败和数据丢失的几率,降低了一致性。
— 05 —
CP
假设不考虑可用性(A)的情况下,多个分区之间可以采用强一致性的机制,保证数据的高度一致性(要么都成功要么都失败)。
比如某个分区出现了故障或者分隔,分区没有了响应,由于放弃了可用性,所以可以无限等待并不断重试直到网络恢复,分区可用后将副本数据同步到所有节点。
— 06 —
AP
假设不考虑一致性(C)的情况下,多个分区和副本可以提供高可用性。分区越多,用户越能就近访问,提供响应速度;
放弃了一致性后,副本的写入操作可以写入主节点成功后即可返回成功,获得搞可用性,然后通过异步的方式将副本同步到多个分区节点上。
由此可见,CAP三者确实不能同时满足,只能根据具体的分布式业务场景做取舍和折中。
很多提供互联网服务可以一定程度牺牲一致性来保障AP,因为互联网竞争激烈,追求的是用户体验和效率,希望用户随时随地能够高效获得服务,而一致性则通过一系列的措施做到最终一致性即可。
— 07 —
推荐书籍
想要了解更多关于分布式系统的相关知识,小异推荐阅读《分布式应用系统架构设计与实践》!
▲点击上图,即可购买本书
关于本书:
● 详细讲解分布式架构基础概念
● 深入介绍中间件机制及使用场景
● 梳理分析常见大型分布式系统架构
本书以理论与实践相结合的方式,对分布式应用系统的架构设计进行系统、全面的阐述。
本书分为3个部分,
第一部分是分布式系统架构概述,介绍一些分布式系统架构下常见的基础概念和架构设计的目标;
第二部分是核心理论及技术,介绍分布式应用系统下常见的技术中间件机制和使用场景,着重介绍分布式应用系统在高性能、高可用性、可扩展性和可维护性等方面常见的优化技术;
第三部分是架构实践案例,梳理几种常见的大型分布式应用系统的架构,并结合具体问题进行分析,使读者能够真正理解设计分布式应用系统架构所面临的问题及解决问题的思路。
本书主要面向初/中/高级程序员和架构师,但书中的部分内容也适合产品经理、项目经理阅读。此外,本书内容由浅入深且案例丰富,也适合作为培训教材。
谢文辉,阿里巴巴高级技术专家,曾在华为、魅族、深信服担任架构师及技术经理,具有10年以上的系统开发及架构设计经验。他目前在阿里巴巴东南亚电商平台Lazada负责业务风控架构相关工作。
他主导过多个双活机房的设计和构建工作,也主导过多个日均活跃用户数达千万级的应用系统的架构设计、改造及优化工作,对分布式应用系统的高性能、高可用性和高并发处理有较为丰富的经验。
他的个人兴趣在于大数据存储处理、大规模系统的高性能、高可用性及多机房架构的设计和构建。
4 月 23 日下午,谢文辉老师将做客Agora开发者创业讲堂,为大家分享高可用系统架构实践。
—END—
你认为创业初期如何进行技术选型与架构设计?
也欢迎加入异步书评群,不定时免费阅读异步新书。
异步书评群
后台回复【异步图书】参加活动~