说到微服务,先给大家提一下CAP分布式应用知识吧,无论你微服务使用的是阿里云开源的Dubbo还是基于Springboot的一整套实现微服务的Springcloud都必须遵循CAP定理不然你所实现的分布式是达不到高可用(一般指服务的冗余,一个服务挂了,可以自动切换到另外一个服务上,不影响整个服务的运行)高性能(服务响应时间快,特别是在高并发下响应时间不会急剧增加)的,而且还容易宕机

下面来说说什么是CAP:

CAP定理:
            指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可同时获得。

接下来我们来说说什么是一致性??

首先我们熟知在微服务中所有的模块都是一个服务, 从上图可以看出,上图进行了主从分离和主从复制,为什么这么做呢,因为我们微服务的模块中所有的信息数据都是要达到一致的(特殊功能除外),这么做就是为了防止用户浏览错误的信息,给用户造成不好的体验

但是同步是需要时间的,在机器数量特别多的情况下进行同步,会消耗很多时间  于是就有了:一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(所有节点在同一时间的数据完全一致,越多节点,数据同步越耗时)
接下来说说可用性??

看上图(1),正常情况下,负载量不高的情况下能正常的响应的读写客户端的请求,正常的进行运转,而在淘宝天猫当双十一,国庆节,年货的时候,商品的流量会非常的大,读写次数非常的频繁,看上图(2)在下单的人数数量多的情况下如果负载过高或者不当,就会产生迟缓,不能在正常的响应时间内进行数据的返回,严重时即使我们进行熔断后过段时间也连接不上此机器,影响用户体验 ,所以我们就在考虑,在高峰期的时候,是不是还能控制我们的响应时间呢?所以,可用性就诞生了!

注:qps(每秒访问量)

这就是  可用性(A):负载过大后,集群整体是否还能响应客户端的读写请求。(服务一直可用,而且是正常响应时间)

下面我们来说说分区容错性??

么分区容错性呢?我们在做小的项目的时候,不会部署太多的节点,就能保证正常的运行,但是当这个项目某几个节点出现了问题,那么我总共就五台机器,两个都出现了错误,这个项目还怎么运行呢??这只是举个比方,小的项目排查不需要太多的时间,找到错误并没有那么麻烦,那么,如果是一个特别大的电商项目,我只部署10个节点,那出问题就麻烦了,由于项目规模庞大,排查困难,而且如果我那10个节点3,4个都出了问题,那么我这个项目想正常运行时不可能的吧?那么怎么样在节点挂了几个的情况下保证服务的运行呢?这时候分区容错性就出现了!

分区容错性(P):分区容忍性,就是高可用性,一个节点崩了,并不影响其它的节点(100个节点,挂了几个,不影响服务,越多机器越好)所以在项目中部署多个节点是很有必要的

接下来我们说一下CAP的具体的三条定律吧

1.C A 满足的情况下,P不能满足的原因:
            数据同步(C)需要时间,也要正常的时间内响应(A),那么机器数量就要少,所以P就不满足
        
     2.   CP 满足的情况下,A不能满足的原因:
            数据同步(C)需要时间, 机器数量也多(P),但是同步数据需要时间,所以不能再正常时间内响应,所以A就不满足

3.   AP 满足的情况下,C不能满足的原因:
            机器数量也多(P),正常的时间内响应(A),那么数据就不能及时同步到其他节点,所以C不满足

CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡

微服务中的CAP定律的更多相关文章

  1. 微服务中的CAP原则

    CAP原则:指的是在一个分布式系统中,Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三个要素最多同时实现两点不可能同时实 ...

  2. 谈谈微服务中的 API 网关(API Gateway)

    前言 又是很久没写博客了,最近一段时间换了新工作,比较忙,所以没有抽出来太多的时间写给关注我的粉丝写一些干货了,就有人问我怎么最近没有更新博客了,在这里给大家抱歉. 那么,在本篇文章中,我们就一起来探 ...

  3. 微服务中的 API 网关(API Gateway)

    API 网关(API Gateway)提供高性能.高可用的 API 托管服务,帮助用户对外开放其部署在 ECS.容器服务等云产品上的应用,提供完整的 API 发布.管理.维护生命周期管理.用户只需进行 ...

  4. .NET CORE微服务中CONSUL的相关使用

    .NET CORE微服务中CONSUL的相关使用 1.consul在微服务中的作用 consul主要做三件事:1.提供服务到ip的注册 2.提供ip到服务地址的列表查询 3.对提供服务方做健康检查(定 ...

  5. Spring Cloud微服务中网关服务是如何实现的?(Zuul篇)

    导读 我们知道在基于Spring Cloud的微服务体系中,各个微服务除了在内部提供服务外,有些服务接口还需要直接提供给客户端,如Andirod.IOS.H5等等. 而一个很尴尬的境地是,如果直接将提 ...

  6. 在spring boot微服务中使用JWS发布webService

    发布时间:2018-11-22   技术:Java+spring+maven   概述 在springboot微服务中使用JWS发布webService,在服务启动时自动发布webservice接口. ...

  7. 微服务中的健康监测以及其在ASP.NET Core服务中实现运行状况检查

    1 .什么是健康检查? 健康检查几乎就是名称暗示的.它是一种检查您的应用程序是否健康的方法.随着越来越多的应用程序转向微服务式架构,健康检查变得尤其重要(Health Check).虽然微服务架构有很 ...

  8. Service Mesh——微服务中的流量管理中间件

    Service Mesh--微服务中的流量管理中间件 摘自-https://zhuanlan.zhihu.com/p/28794062 Service mesh 与 Cloud Native Kube ...

  9. 基于node.js构建微服务中的mock服务

    缘起 由于现在微服务越来越火了,越来越多的微服务融入到了日常开发当中.在开发微服务的时候,经常会遇到一个问题由于依赖于其他服务,导致你的进度受到阻碍.使你不得不先mock出你期望调用依赖服务的输出,来 ...

随机推荐

  1. UART串口简介

    通用异步收发传输器(Universal Asynchronous Receiver Transmitter) 原理 发送数据时,CPU将并行数据写入UART,UART按照一定的格式在一根电线上串行发出 ...

  2. validform 自定义校验

    validform虽然很强大,但是依然不能满足我们各种奇葩的校验,这是时候就需要我们自己去手写. vaildform 也是基于jq的,正常我们需要引入5个文件 supply 是我们自定义方法的js文件 ...

  3. 【SpringBoot】Web开发

    一.简介 1.1 引入SpringBoot模块 1.2 SpringBoot对静态资源的映射规则 二.模版引擎 2.1 简介 2.2 引入thymeleaf 2.3 Thymeleaf使用 一.简介 ...

  4. nginx+tomcat实现负载均衡以及双机热备

    还记得那些年吗? 还记得更新代码之后,服务器起不来被领导训斥吗?还记得更新代码,需要停机过多的时间被渠道部们埋怨吗?还记得更新代码,代码出错时自己吓个半死吗?于是我们聪明勤快的程序员,看着电影待到夜深 ...

  5. D. Connected Components Croc Champ 2013 - Round 1 (并查集+技巧)

    292D - Connected Components D. Connected Components time limit per test 2 seconds memory limit per t ...

  6. PHP判断是否有Get参数的方法

    PHP如何判断是否有Get参数,方法很简单,一个函数就可以搞定,需要的朋友可以参考下 if(is_array($_GET)&&count($_GET)>0)//判断是否有Get参 ...

  7. HAL库 TIM计数器及中断开启过程

    1.初始化TIM基本计数器参数 void MX_TIM2_Init(void) { TIM_ClockConfigTypeDef sClockSourceConfig = {}; TIM_Master ...

  8. MyBatis-07-分页

    7.分页 思考:为什么要分页? 减少数据的处理量 7.1.使用Limit分页 select * from user limit startIndex,pageSize 使用Mybatis实现分页,核心 ...

  9. BZOJ3887 [Usaco2015 Jan]Grass Cownoisseur[缩点]

    首先看得出缩点的套路.跑出DAG之后,考虑怎么用逆行条件.首先可以不用,这样只能待原地不动.用的话,考虑在DAG上向后走,必须得逆行到1号点缩点后所在点的前面,才能再走回去. 于是统计从1号点缩点所在 ...

  10. jquery实现ajax提交表单数据或json数据