JAVA分布式CAP原则

简介: JAVA分布式CAP原则

分布式CAP原则主要是使用SpringCloud框架的时候会涉及到该部分知识点

CAP原则指的是在一个分布式系统中,一致性,可用性,分区容错性

实际的项目开发中,这三者往往是不可兼顾的。


AP:牺牲一致性,保证可用性和分区容错性


CP:牺牲可用性,保证一致性和分区容错性


CA:放弃分区容错性,保证一致性和可用性


实现这些策略的方式有使用基于数据库的分布式方案属于AP型,使用缓存+数据库的方案,先更新数据库在进行缓存更新,可能出现短暂的不一致,但可以保证AP型  

对CAP的理解

假如有客户端在浏览器访问用户A,A部署了2台服务器,分别在2个同样的服务节点有S1,S2存放的数据都是V0,他们之间的网络是互通的,也就是相当于分布式系统的两个部分。

业务具体的操作流程:


1 客户端A更新了数据V1到S1


2 S1节点需要把这个消息告诉S2节点/想让S2更新数据/却发生网络故障,S2中保存的还是V0


3 客户端向S2请求数据,S2返回了V0数据


系统网络发送了故障,系统运行是正常的所以是具有容错性


客户端A访问节点S1的时候更新V0到V1,客户端A访问节点S2的时候是V1因此需要等待网络故障恢复,将S2节点同步更新


在网络恢复的这段时间,想要系统满足可用性是不可能的。因此可用性的要求随时随地访问系统都是正确有效的。这就出现了矛盾


项目中我们可以选择要么牺牲数据一致性,响应旧的数据V0给客户/或者牺牲可用性/组赛等待直到网络连接恢复。数据更新操作完成之后,再给用户响应最新的数据V1


所以说实际项目中,我们要有取舍策略


一般来说,分区容错无法避免,因此可以认为CAP的P是总会成立的,CAP定理告诉我们,剩下的C和A无法同时做到。


目录
相关文章
|
1月前
|
Java 数据库
在Java中使用Seata框架实现分布式事务的详细步骤
通过以上步骤,利用 Seata 框架可以实现较为简单的分布式事务处理。在实际应用中,还需要根据具体业务需求进行更详细的配置和处理。同时,要注意处理各种异常情况,以确保分布式事务的正确执行。
|
1月前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
1月前
|
存储 NoSQL Java
Java调度任务如何使用分布式锁保证相同任务在一个周期里只执行一次?
【10月更文挑战第29天】Java调度任务如何使用分布式锁保证相同任务在一个周期里只执行一次?
99 1
|
2月前
|
缓存 NoSQL Java
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
74 3
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
|
2月前
|
分布式计算 NoSQL Java
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
56 2
|
2月前
|
NoSQL Java 数据库
Java分布式锁
Java分布式锁
48 0
|
2月前
|
缓存 前端开发 Java
Java中的RESTful API原则
总结而言,遵循RESTful原则不仅能够提升API的互操作性,还便于维护和扩展,是构建现代Web服务的重要实践。通过精心设计的URI、利用HTTP协议特性以及采用成熟框架如Spring Boot,Java开发者能够高效地创建出既强大又易于使用的RESTful API。
59 0
|
1天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者
|
3天前
|
安全 Java Kotlin
Java多线程——synchronized、volatile 保障可见性
Java多线程中,`synchronized` 和 `volatile` 关键字用于保障可见性。`synchronized` 保证原子性、可见性和有序性,通过锁机制确保线程安全;`volatile` 仅保证可见性和有序性,不保证原子性。代码示例展示了如何使用 `synchronized` 和 `volatile` 解决主线程无法感知子线程修改共享变量的问题。总结:`volatile` 确保不同线程对共享变量操作的可见性,使一个线程修改后,其他线程能立即看到最新值。
|
3天前
|
消息中间件 缓存 安全
Java多线程是什么
Java多线程简介:本文介绍了Java中常见的线程池类型,包括`newCachedThreadPool`(适用于短期异步任务)、`newFixedThreadPool`(适用于固定数量的长期任务)、`newScheduledThreadPool`(支持定时和周期性任务)以及`newSingleThreadExecutor`(保证任务顺序执行)。同时,文章还讲解了Java中的锁机制,如`synchronized`关键字、CAS操作及其实现方式,并详细描述了可重入锁`ReentrantLock`和读写锁`ReadWriteLock`的工作原理与应用场景。