热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

分布式数据库集群中间件------分布式系统特性_MySQL

分布式系统特性:CAP上一节我们通过原始村落村民的例子来说明分布式系统中的三个要素的概念。本节,我将介绍分布式系统中应该解决的几个特性。CAP1Consistency(一致性)2Availability(可用性)3
分布式系统特性:CAP

上一节我们通过原始村落村民的例子来说明分布式系统中的三个要素的概念。本节,我将介绍分布式系统中应该解决的几个特性。

CAP

1. Consistency(一致性)

2. Availability(可用性)

3. Partition tolarance (分区容错性)

一致性是说,需要两个或者多个节点共同完成一个业务逻辑,这个业务逻辑不可以将中间状态存储成永久的状态。换句话说,这个业务逻辑应该要么在每个节点都成功,要么在每个节点都不成功。举个例子,媒婆想促成一对姻缘,就先要到男女双方家里去做工作。只要双方有一家不同意这门亲事,整件事情就需要都作废。如果都同意这门亲事,媒婆的才能够成功的促成这个姻缘。假设,男方家里同意了,但是媒婆还没有问过女方,媒婆一定不会告诉男方说,”你现在就布置新房吧“,而是会说“我再去女方家里问问这个事”。等到了女方家里问这个事,若是女方家里同意,则媒婆就会让双方准备结婚。如果女方不同意,那么媒婆就还需要到男方家里把这个事说了,放弃这门婚事。

可用性是说,不管遇到了什么样的状况,当我发送给你一条消息,你是否能够给我回复一条,不管是成功或者失败。这就像你给别人写信,若是收信人有个好习惯,每一封信件都回复给你,你就会觉得这样的人很靠谱,系统也是一样。

分区容错性是说,系统能够继续工作,即使是数据丢失或者是部分失败。每个节点都有属于自己的元数据信息或者集群的需要持久化的信息,但是系统是存在风险的,每一个节点都可能会因为特殊的情形而造成数据的丢失,那么当某一个节点数据丢失,集群能否正确的将数据恢复,并且正常提供服务就是分区容错性。(这里要有一个思考,那就是如果有两个节点同时出错呢,如果有三个呢,如果有n个呢)。

曾经有外国大牛证明过,说过上述三者不能同时兼备,怎么取舍,怎么权衡是我们需要重视的。

以下为翻译文章,主要讲述CAP之间的组合以及适宜的场景

http://robertgreiner.com/2014/08/cap-theorem-revisited/

\

Consistency:读请求能够保证返回最新的数据。

Availability:一个没有挂掉的节点能够在有限的时间内返回一个合理的结果。

Partition Tolerance:当节点之间的网络分裂,系统依然能够提供服务。(The system will continue to function when network partitions occur)

在进一步解释之前,我们需要将一件事情先说明。面向对象编程!=网络编程。在编程的时候,我们假设的共享内存的几个程序,很可能在网络不稳定的情况下被分割成一个或者多个区域,也就是这几个程序可能数据不一致。在分布式计算中,最不应该的事情是认为网络是可靠的。网络绝不是可靠的。网络经常的会不可用,拥塞。网络问题经常在你不经意之间就会出错。由于网络的不稳定性,在分布式系统中你必须要分区可容错。下面就介绍在分区分裂的情况下,你的选择是更加偏向Availability还是更加偏向Consistency。

CP:Consistency/Partition Tolerance- 在等待一个节点返回信息的时候,有可能会出错。系统当然可以返回错误,也可以不返回错误,到另外一个副本工作。这时候需要根据业务逻辑来判断,是需要选择Availability还是Consistency。如果系统一定需要显示的数据需要是最新的已经提交的数据,那么就选择Consistency模式。这时,就需要报错而不是切换到副本。如下所示:

\

AP:Availability/Partition Tolerance - 在这种模式下,你返回的最新的数据很可能对于用户来说也是陈旧的,选择Availability而不是Consistency取决于你的业务需求,你的业务需要是更加注重于稳定,能够容忍少量的不一致。系统希望的是运行,而不是一味的报错。如下图所示:

\

推荐阅读
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 在当前金融科技 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • Python开源库和第三方包的常用框架及库
    本文介绍了Python开源库和第三方包中常用的框架和库,包括Django、CubicWeb等。同时还整理了GitHub中最受欢迎的15个Python开源框架,涵盖了事件I/O、OLAP、Web开发、高性能网络通信、测试和爬虫等领域。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
  • 分布式系统一致性专题:3PC协议的优化和问题
    本文介绍了分布式系统一致性专题中的3PC协议,该协议是对2PC协议的优化和改进。文章详细解释了3PC协议的三个阶段:CanCommit、PreCommit和DoCommit,并分析了每个阶段可能出现的情况和处理方式。同时,文章也指出了3PC协议存在的问题,如参与者超时机制可能导致数据不一致等。总体来说,3PC协议在优化和改进方面取得了一定效果,但仍需继续努力解决数据不一致问题。 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
author-avatar
陈政德169384
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有