浅谈Nacos中的CAP

每天多学一点点~
话不多说,这就开始吧…

文章目录

  • 浅谈Nacos中的CAP
  • 1.前言
  • 2.CAP理论和BASE理论
  • 3.Nacos中的CAP
  • 4.Nacos中AP模式源码分析
  • 5.常见的面试题
  • 6.结语

1.前言

说起CAP原则,大家都不陌生。只要是个分布式系统,都应该满足。之前写过Zk的CAP,今天来谈谈nacos中是如何实现CAP的。

Zookeeper集群选举机制以及数据同步机制
Nacos源码环境搭建和源码流程图

2.CAP理论和BASE理论

CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。

分布式系统的CAP理论:理论首先把分布式系统中的三个特性进行了如下归纳:

  • 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
  • 可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
  • 分区容错性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。

一般分布式系统中,肯定是优先办证P,剩下的就是C和A的取舍。

BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写,BASE是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的结论,是基于CAP定理逐步演化而来的,其核心思想是即使无法做到强一致性(Strong consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。
简单来说BASE就是CAP的折中,C A P我三个都要,但不用100%保证每一次原则。

3.Nacos中的CAP

首先,nacos保证了P,官方推荐使用A,即AP,保证其高可用。而与之典型的几个注册中心

  • zookeeper(CP 集群leader挂了会重新选举,此时暂停对外服务)。
  • mysql(单机版CA)
  • eureka集群(AP)
  • eureka集群(AP)
  • redis集群(AP)

看过ribbon源码可知,如果发现连接失败,则会自动切换至其他的节点,只要有一台还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证一致性)

Eureka看明白了这一点,因此在设计时就优先保证可用性。Eureka各个节点都是平等的,几个节点挂掉不影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册时如果发现连接失败,则会自动切换至其他的节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证一致性)。除此之外,Eureka还有一种自我保护机制,如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,此时会出现以下几种情况:
1.Eureka不再从注册列表中移除因为长时间没有收到心跳而应该过期的服务
2.Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)
3.当前网络稳定时,当前实例新的注册信息会被同步到其它节点中 因此,Eureka可以很好的应对因网络故障导致节点失去联系的情况,而不会像zookeeper那样使整个注册服务瘫痪。

而nacos和eureka和类似,上文也说过,有服务健康检查和心跳机制,具体请看上一张源码流程图分析。

4.Nacos中AP模式源码分析

5.常见的面试题

  1. 什么是脑裂:
    集群(M-S的情况)通常是发生在节点通信不可达(分区)的情况下,集群会分裂成不同的小集群,小集群各自选举出多个master节点的情况。
  2. nacos和zookeeper是如何避免脑裂的?
    leader选举,要求节点的投票数量>总节点数量/2,即过半数,有这个选举原则保证了集群出现分区,无论如何最多只能有一个小集群选出leader。
  3. M-S 模式的集群节点个数为何推荐是奇数个?
    首先,偶数个节点的集群一旦出现对半分区(比如4个节点分区成两个节点和两个节点的情况),整个集群无法选举出leader,集群无法提供服务。
    其次,在容错能力相同的情况下,奇数节点比偶数节约资源。比如,5个节点挂了2个还能选出leader,而6个节点最多也只能挂2个节点才能保证选举出leader。

6.结语

世上无难事,只怕有心人,每天积累一点点,fighting!!!

浅谈Nacos中的CAP相关推荐

  1. java 中的单元测试_浅谈Java 中的单元测试

    单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...

  2. mybatis与php,浅谈mybatis中的#和$的区别

    浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...

  3. 浅谈CSS3中display属性的Flex布局,关于登陆页面属性框的设置

    声明:本文转发自三里屯柯南的浅谈CSS3中display属性的Flex布局http://www.cnblogs.com/xuyuntao/articles/6391728.html 基本概念 采用Fl ...

  4. python sys模块作用_浅谈Python中的模块

    模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件就称之为一个模块(Mod ...

  5. python生成器和迭代器作用_浅谈Python中的生成器和迭代器

    迭代器 迭代器协议 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么返回一个异常来终止本次迭代.(只能往前走,不能往后退!) 迭代器对象 遵循了(实现了)迭代器协议的对象.(对象内 ...

  6. oracle hash join outer,CSS_浅谈Oracle中的三种Join方法,基本概念 Nested loop join: Outer - phpStudy...

    浅谈Oracle中的三种Join方法 基本概念 Nested loop join: Outer table中的每一行与inner table中的相应记录join,类似一个嵌套的循环. Sort mer ...

  7. 浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别

    浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别 标签: caffe深度学习CaffeNet 2016-11-02 16:10 1203人阅读 评论(1) ...

  8. python中 是什么类型_浅谈python中的变量默认是什么类型

    浅谈python中的变量默认是什么类型 1.type(变量名),输出的结果就是变量的类型: 例如 >>> type(6) 2.在Python里面变量在声明时,不需要指定变量的类型,变 ...

  9. 浅谈Java中的Set、List、Map的区别

    就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操 ...

  10. 浅谈Linux中ldconfig和ldd的用法

    ldd 查看程序依赖库 ldd 作用:用来查看程式运行所需的共享库,常用来解决程式因缺少某个库文件而不能运行的一些问题. 示例:查看test程序运行所依赖的库: /opt/app/todeav1/te ...

最新文章

  1. Java项目:在线考试系统(java+springboot+vue+jsp+mysql+maven)
  2. 逻辑回归实例--乳腺癌肿瘤预测
  3. union all动态表_深入窥探动态链接
  4. 2017年第八届蓝桥杯 - 国赛 - C/C++大学B组 - A. 36进制
  5. 【Linux】一步一步学Linux——skill命令(143)
  6. Windows2008+sqlserver2008集群安装(图文并貌)
  7. 约三分之二的 DDoS 攻击指向通信服务提供商
  8. IBASE archive pre-processing report RIBARCHV
  9. 福州java培训哪里好_南通java培训哪家好
  10. C++:39---继承中构造函数、析构函数的关系
  11. mysql获取数据库名_mysql获取数据库名
  12. css图片上漂浮着文字效果
  13. php处理har,harviewer har解析工具
  14. 语音 AI 技术简介
  15. e430c参数 thinkpad,联想ThinkPad E430c的详细参数
  16. 电驴怎么显示服务器列表,(转)如何更新电驴服务器列表(eMule Server List)
  17. tp5 JWT生成token验证接口安全、防止高频请求
  18. 湖北民院OJ 最少美元付款
  19. linux、windows nginx启动 重启 关闭命令
  20. Jira中文包插件,更专业的中文Jira

热门文章

  1. 周志华----第5章神经网络(误差逆传播算法)
  2. postgreSQL / MySQL / 达梦 时间查询 ,获取近几天、一周、一月、季度、一年时间内的数据
  3. 【git】git的删除命令与如何删除仓库文件的方法
  4. mysql pk什么意思_数据库pk什么意思
  5. 电脑键盘部分按键失灵_笔记本键盘一部分失灵怎么办(笔记本个别键失灵的解决方法)...
  6. 看他如何做到4年2个博士学位,做研究、出书挣钱两不误。
  7. 关于晶圆介绍以及IGBT晶圆的应用
  8. 稻盛和夫:中国企业如何在萧条中实现大飞跃
  9. 中心极限定理 central limit theorem
  10. 用python的matplotlib和numpy库绘制股票K线均线和成交量的整合效果(含量化验证交易策略代码)