CAP原理和数据高可用性

CAP原理和数据高可用性对网站而言,数据是最宝贵的资源,硬件可以购买,软件可以重构,但是数据(用户数据,交易数据,商品数据)一旦丢失,对网站的打击可以说是毁灭性的。数据高可用性数据高可用性包括如下几个方面的含义数据持久性保证数据可以持久存储,在各种情况下都不会出现数据丢失。为了实现数据持久性,不但在写入数据是需要写入持久性存储,还需要将数据备份到一个或多个副本,存放在不同的物理存储设备上,在某个存储故障发生是,数据不会丢失

大家好,又见面了,我是你们的朋友全栈君。

对网站而言,数据是最宝贵的资源,硬件可以购买,软件可以重构,但是数据(用户数据,交易数据,商品数据)一旦丢失,对网站的打击可以说是毁灭性的。

数据高可用性

数据高可用性包括如下几个方面的含义

数据持久性

保证数据可以持久存储,在各种情况下都不会出现数据丢失。为了实现数据持久性,不但在写入数据是需要写入持久性存储,还需要将数据备份到一个或多个副本,存放在不同的物理存储设备上,在某个存储故障发生是,数据不会丢失。

数据可访问性

在多份数据副本分别存放在不同存储设备的情况下,如果一个数据存储设备损坏,就需要将数据访问切换到另一个数据存储设备上,如果这个过程不能很快完成(终端用户几乎没有延迟感知),或者在完成过程中需要停止终端用户访问数据,那么这段时间数据是不可访问的。

数据一致性

在数据有多份副本的情况下,如果网络、服务器或者软件出现故障,会出现部分副本写入成功、部分副本写入失败,这也就造成了各个副本中的数据不一致,数据内容冲突。

具体来说,数据一致性又分为如下几点

数据强一致性
各个副本的数据在物理存储中总是一致的;数据更新操作结果和操作响应总是一致的,即操作相应通知更新失败,那么数据一定没有被更新,而不是处于不确定的状态(可能被更新,也可能没有被更新)。

数据用户一致
数据在物理存储中的哥哥副本的数据可能是不一致的,但是终端用户在访问时,通过纠错和校验机制,可以确定一个一致且正确的数据返回给用户。

数据最终一致
这是数据一致性中最弱的一种,即物理存储的数据可能是不一致的,终端用户访问的数据可能也是不一致的(同一用户连续访问,结果不同;或者不用用户通过是访问,结果不同),但系统经过一段时间的自我修复和修正,数据最终会达到一致。

由于难以满足数据强一致性,网站通常会综合成本、技术、业务场景等条件,结合应用服务和其他数据监控与纠错功能,是存储系统达到用户一致,保证用户访问数据的最终正确性。

CAP原理

CAP原理认为,提供数据服务的存储系统无法同时满足数据一致性(Consistency)、数据可用性(Availbility)、分区耐受性(Patition Tolerance,系统具有跨网络分区伸缩性)这三个条件,如图

这里写图片描述

在大型网站,数据规模总是急剧扩张的,因此可伸缩性即分区耐受性必不可少,规模变大以后,机器数量也会变得庞大,这时网络和服务器故障就会频繁出现,要想保证应用可用,就必须保证分布式处理系统的高可用性。所以在大型网站中,通常会选择强化分布式存储系统的可用性(A)和伸缩性(P),而在某种程度上放弃一致性(C)。一般来说,数据不一致通常出现在系统高并发或者集群状态不稳定(故障恢复、集群扩容…)的情况下,应用系统给需要分不是数据处理系统的数据不一致性有所了解并进行某种意义上的补偿和纠错,一笔I安出现系统数据不正确。

”双十一“期间,活动第一分钟就会出现千万级独立用户访问,这种极端的高并发场景对数据处理系统造成了巨大压力,较弱的数据一直想导致出现部分商品超卖现象(交易成功的商品数量>库存数量)
CAP原理对于可伸缩的分布式系统的设计具有重要意义,在系统设计开发过程中昂,不恰当地迎合各种需求,企图打造一个完美的产品,可能会使设计陷入两难境地,难以为继。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144636.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java全局变量的定义和声明_定义全局变量的方法

    java全局变量的定义和声明_定义全局变量的方法JAVA全局变量(或称成员变量)可分两种,一种是静态变量,另一种是实例变量,即在类体中定义的变量,有三点得注意:一、成员变量不能在类体中先声明(定义)后赋值,但静态变量可以先在类体中声明,然后在方法中赋值(当然实例变量是不行的);1)如以下程序会出问题:publicclassTest{staticinta;//在类体中声明整型静态变量a。intb;

    2022年8月21日
    10
  • 使用matplotlib给女朋友画一个爱心吧,这份满满的爱意,一定要记得收下

    使用matplotlib给女朋友画一个爱心吧,这份满满的爱意,一定要记得收下

    2022年2月20日
    109
  • kali的Ettercap(0.8.3.1)GUI界面中文化[通俗易懂]

    kali的Ettercap(0.8.3.1)GUI界面中文化[通俗易懂]前言:最近在学kali,学到了dns劫持,上的课老师也是讲了一部分功能,我在网上想找一下别的功能,却发现这个Ettercap居然是20年新版,并没有什么详细信息,我就心血来潮写这篇笔记,让自己以后在复习的时候可以更快的回顾,发出来也让大家一起进步。 启动方法 kali的终端中输入ettercap-G 启动界面 GUI界面 中间人攻击选项 其他选项 Targets Currenttargets Selecttargets

    2022年6月28日
    38
  • pycahrm激活码【在线破解激活】

    pycahrm激活码【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    47
  • 将CSV的数据发送到kafka(java版)

    将CSV的数据发送到kafka(java版)

    2020年11月19日
    163
  • ROC曲线的通俗理解

    ROC曲线的通俗理解在准备机器学习导论课程考试的过程中,发现自己根据西瓜书上的讲解总是也理解不上去ROC曲线的含义。于是在网络上寻求答案,发现一篇讲解得不错的博客【1】,说得比西瓜书好很多,通俗易懂。这里说一下自己的感想和理解对于已经有数据标签的训练样本,可以得到它们的评分: 其中class一栏表示真实值,p为正例,n为反例,这20个样本中有10个正例10个反例;score一栏则是分类器给出的分类评分。一…

    2022年5月16日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号