分布式应用:从CAP理论到PACELC理论
1、CAP理论简介
CAP是分布式应用的基础理论,讨论的是分布式如何满足一致性、可用性、网络分区的问题。
C(Consistency):一致性,要求所有节点同一时刻保持数据一致。
A(Availability):可用性,要求应用在某些节点发生异常时,应用本身是可用的。
P(Partition Tolerance):网络分区容错,分布式应用会有多个节点,节点之间需要进行网络通信,有可能发生网络中断或超时。
2、CAP可以三选二?
CAP理论最大的误解就是三个因素是同等地位的,其实不然,分布式系统下,P(网络分区)是必然的,所以只能在AP之间权衡,所以,实际应用中,大多是支持CP或AP。CP追求一致性,牺牲了可用性,如zk。AP追求可用性,牺牲了一致性,比如主从复制。
为什么P是必选的?因为要保证高可用性必然会进行冗余,单机应用也谈不上A和P,冗余就会带来分区的问题,所以P是必然存在的,不能通过牺牲A或C换取P。
3、强一致性存在吗?
3.1节点通信需要时间
我们常说的CP是追求强一致性,可是强一致性真的存在吗?只要有P(网络分区)就会有节点之间的通信,假设节点之间通信正常,那么通信就需要时间。虽然计算机世界处理速度都是毫秒或微秒或纳秒级的,但处理再快这个时间也是个非0数字。
3.2唯一不变的是变化
信息世界一直在变化,即便此刻通信正常,下一刻就可能发生变化。比如消费者从CP注册中心获取到服务提供者可用列表,经过负载选出来一个地址发起调用。这时依然存在这个地址对应的节点已经挂掉的可能。所以,此刻看到的信息可能是下一刻过时的信息。
4、PACELC理论
根据上面的讨论,其实完全的强一致性是不存在的,也就是节点之间同步会存在延迟,所以有了PACELC理论。PAC还是上述的CAP,E是else,L是latency延迟,C还是Consistency。简单理解就是当发生网络分区异常时,需要在A和C之间做权衡,当没有出现网络分区异常时,需要在L和C之间做权衡。
5、典型案例
5.1 mysql主从复制
mysql主从复制带来了高可用,但即使在网络通信正常的情况下,主从同步还是存在延迟,所以此时就需要权衡是否可以接受延迟,如果不接受可以直接去读主库。当然,主从同步发生异常时,并不影响从库数据的读取,即从库是可用的。
5.2 zk分布式锁
使用zk的临时节点可以实现分布式锁,zk和客户端通过heartbeat保持live连接,如连接失效,则自动删除临时节点从而释放锁。但是这个连接保持就存在很多情况,如果因为网络超时或应用假死,那么就会存在两个进程获取到锁,导致分布式锁失效,redis分布式锁也存在类似的问题,所以使用分布式锁一定要小心。
小记:
在构建分布式应用时应该全局着眼,细节着手。通常在满足AP的条件下,根据实际情况做好C的把控,才能构建出鲁棒的应用。
相关文章
- LibreOffice 7.5 发布:漂亮的新应用图标和酷炫功能
- elementary OS 7 发布
- Windows 应用兼容层 Wine 8.1 发布:默认启用“Windows 10”前缀
- 微软正测试新功能:当 Windows 11 有新的小组件可用时会提醒通知
- 解析分布式存储选型和应用九个典型问题
- ClickHouse在自助行为分析场景的实践应用
- Chrome DevTools 远程调试安卓网页的原理
- Uni-app + Vue3 页面如何跳转及传参?
- 微软证实系统还原点会损坏 Windows 11 22H2 版本应用程序
- 巧用 Transition 实现短视频 APP 点赞动画
- 初学者试试,HarmonyOS应用开发者基础认证
- 媒体实测微软 Windows 开发工具包 2023:存在不兼容 HDR 显示器、某些应用无法运行等问题
- 快速了解Navigator API SetAppBadge
- 微软 Windows 11 Dev 预览版 Build 25276 发布,应用兼容问题对话框 UI 改进
- 基于Next.js、Prisma、Postgres和Fastfy构建全栈APP
- 开始菜单搜索框变圆角,微软 Windows 11 Beta 预览版 22621.1095 和 22623.1095 发布
- 2022-2023 十大应用开发趋势
- 观远数据发布业内首部《移动BI白皮书》,深入业务数字化场景重新定义移动BI
- Windows 10 学院:不借助第三方工具如何卸载 Windows 10 预装应用
- 正处高质量发展期,我国大数据产业突破1.3万亿元