当前位置: 首页 > 后端技术 > PHP

架构思维的CAP原理

时间:2023-03-29 23:04:18 PHP

因为有一段时间负责后端设计,对一些设计思路和理论有所了解,但是最近被问到CAP是什么的时候,一头雾水。CAP架构的思想之前已经研究过一些题目,这里也把这个概念介绍给大家。大家可以有意识地理解和学习这个思路,帮助自己在后续的功能设计中有更好的借鉴意义。分布式领域的CAP理论,Consistency(一致性),一致的数据更新,所有的数据变化都是同步的Availability(可用性),良好的响应性能Partitiontolerance(分区容错)可靠性定理:任何分布式系统只能满足两点,有没有办法同时照顾这三个。忠告:架构师不应该把精力浪费在如何设计一个能够满足三者的完美分布式系统上,而应该做出取舍。关系型数据库的ACID模型,一致性+可用性高,难以分区:原子性:一个事务中的所有操作都必须完成或不完成。一致性一致性。在事务开始或结束时,数据库应该处于一致状态。隔离隔离层。事务会假设只有自己在操作数据库,彼此不知情。耐用性。一旦交易完成,就无法返回。跨数据库两阶段提交事务:2PC(two-phasecommit),2PC是反扩展模式(PatHelland)是一种反扩展模式,JavaEE中的JTA事务可以支持2PC。因为2PC是反模式,所以尽量不要使用2PC,使用BASE来避免。BASE模型反ACID模型与ACID模型完全不同,牺牲高一致性换取可用性或可靠性:BasicallyAvailable。支持分区失败(例如分片分片数据库)Softstate软状态状态可以在一段时间内不同步,异步。Eventuallyconsistent,最终的数据是一致的,并不总是高度一致的。BASE思想的主要实现是1.按功能划分数据库2.ShardingshardsBASE思想主要强调基础可用性。如果你需要高可用,也就是纯粹的高性能,那你就不得不牺牲一致性或者说容忍度。BASEthoughtscheme在性能方面还是有潜力可挖的。现在NOSQL运动丰富和扩展了BASE的思想,可以根据具体情况定制特殊的解决方案,比如忽略一致性,获得高可用等,NOSQL应该有以下两种流派:Key-Value存储,比如AmazeDynamo等,可以根据CAP三大原则灵活选择不同倾向的数据库产品。领域模型+分布式缓存+存储(Qi4j和NoSql运动),你可以根据CAP的三原则,结合自己的项目,定制一个灵活的分布式方案,难度较大。这两者的共同点是:它们都是关系数据库SQL的替代品。逻辑随数据一起分布,任何模型都可以自己持久化。数据处理和数据存储分离,读写分离。存储可以是异步的或同步的,这取决于所需的一致性程度。不同点:NOSQL等Key-value存储产品是满足关系型数据库的产品盒子。它们可以适用于PHPRUBY等非Java领域。它们是可以立即使用的产品。Domainmodel+distributedcache+Storage是一个复杂的架构解决方案,不是一个产品,但是这种方式更加灵活,架构师应该掌握。---作者:狮子二月