说到微服务,先给大家提一下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. composer安装学习

    Packagist 镜像 网站地址 http://www.phpcomposer.com/ 请各位使用本镜像的同学注意: 本镜像已经依照 composer 官方的数据源安全策略完全升级并支持 http ...

  2. php的三个常用判断函数

    <?phperror_reporting(E_ERROR);$a;$b = false;$c = '';$d = 0;$e = null;$f = array(); echo 'empty', ...

  3. Centos7虚拟机根分区扩展

    线上的kvm虚拟机,原来只规划了8G,后来发现硬盘动不动就被日志塞满了,需要进行扩容. 扩容步骤如下: 1.先把kvm虚拟机关机 2.在宿主机上进行kvm虚拟机的磁盘扩容 qemu-img resiz ...

  4. (十五)连接网络adb,android模拟器打开

    第一步:Android开发板连接usb和网线 adb shell setprop service.adb.tcp.port 5555 adb shell stop adbdadb shell star ...

  5. 如何将html页面导出word格式?

    近期做的项目也是奇葩,页面上需要导出excel,pdf,还有导出图片等...,刚把前几个怂好,还有下载成word文件,如何处理? function getOutword (id, fileName) ...

  6. redis + boost.asio

    redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...

  7. R的数据结构--数组

    数组:可以认为数组是矩阵的扩展,它将矩阵扩展到2维以上.如果给定的数组是1维的则相当于向量,2维的相当于矩阵. R语言中的数组元素的类型也是单一的,可以是数值型,逻辑型,字符型或复数型 参数解释 ar ...

  8. SparkStreaming使用checkpoint存在的问题及解决方案

    sparkstreaming关于偏移量的管理 在 Direct DStream初始化的时候,需要指定一个包含每个topic的每个分区的offset用于让Direct DStream从指定位置读取数据. ...

  9. mongodb的安装与使用(二)之 增删改查与索引

    0.MongoDB数据库和集合创建与删除 MongoDB 创建数据库 语法: use DATABASE_NAME note:查看所有数据库使用show dbs 创建的空数据库 test并不在数据库的列 ...

  10. C# ado.net 使用task和await(四)

    class Program { private static string constr = "server=.;database=northwnd;integrated security= ...