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无法同时做到。


目录
相关文章
|
13天前
|
存储 NoSQL Java
Java调度任务如何使用分布式锁保证相同任务在一个周期里只执行一次?
【10月更文挑战第29天】Java调度任务如何使用分布式锁保证相同任务在一个周期里只执行一次?
36 1
|
1月前
|
缓存 NoSQL Java
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
57 3
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
|
1月前
|
分布式计算 NoSQL Java
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
43 2
|
1月前
|
NoSQL Java 数据库
Java分布式锁
Java分布式锁
37 0
|
1月前
|
缓存 前端开发 Java
Java中的RESTful API原则
总结而言,遵循RESTful原则不仅能够提升API的互操作性,还便于维护和扩展,是构建现代Web服务的重要实践。通过精心设计的URI、利用HTTP协议特性以及采用成熟框架如Spring Boot,Java开发者能够高效地创建出既强大又易于使用的RESTful API。
50 0
|
3月前
|
存储 NoSQL Java
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
|
8天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。
|
4天前
|
安全 Java 开发者
深入解读JAVA多线程:wait()、notify()、notifyAll()的奥秘
在Java多线程编程中,`wait()`、`notify()`和`notifyAll()`方法是实现线程间通信和同步的关键机制。这些方法定义在`java.lang.Object`类中,每个Java对象都可以作为线程间通信的媒介。本文将详细解析这三个方法的使用方法和最佳实践,帮助开发者更高效地进行多线程编程。 示例代码展示了如何在同步方法中使用这些方法,确保线程安全和高效的通信。
22 9
|
7天前
|
存储 安全 Java
Java多线程编程的艺术:从基础到实践####
本文深入探讨了Java多线程编程的核心概念、应用场景及其实现方式,旨在帮助开发者理解并掌握多线程编程的基本技能。文章首先概述了多线程的重要性和常见挑战,随后详细介绍了Java中创建和管理线程的两种主要方式:继承Thread类与实现Runnable接口。通过实例代码,本文展示了如何正确启动、运行及同步线程,以及如何处理线程间的通信与协作问题。最后,文章总结了多线程编程的最佳实践,为读者在实际项目中应用多线程技术提供了宝贵的参考。 ####

热门文章

最新文章