精华内容
下载资源
问答
  • 个天平和8个球,7个的重量一样,有其他的重量不一致(并不知道比其他7个重还是轻),求需要称多少次才能找到重量不一致的球? 解答: 首先得明确知道那个重量不一致的球并不知道是过重还是过轻!!! 解决...

    逻辑题:

    有一个天平和8个球,7个的重量一样,有一个与其他的重量不一致(并不知道比其他7个重还是轻),求需要称多少次才能找到重量不一致的球?

    解答:
    首先得明确知道那个重量不一致的球并不知道是过重还是过轻!!!
    解决方法采用排除法!!!

    假设给八个球进行编号,分别为:12345678;

    第一次称:
    将八个球每两两进行分组,分为4个组,假设12为A组、34为B组、56为C组、78为D组;
    将A组放在天平左盘,B组放在右盘,如果不平衡,可以判断出不一致的球在AB两组中,即在1234这四个球中,且5678四个球重量是一样的球;
                                    如果平衡,可以判断不一致的球在CD两组中,即在5678四个球中,且1234四个球重量是一样的球;

    第二次称:
    假设不一致的球在AB两组(在CD两组也可一样)中,即在1234四个球中;
    方法一:
    将A组放在左盘,C组(或D组)放在右盘(此时右盘放的球已经知道为重量一样的),
                   如果不平衡,可知不一致的球在A组,即在12这连个球中,且34球为重量一样的球;
                   如果平衡,则可以推断出不一致的球在B组,即在34这两个球中,且12球为重量一样的球;

    方法二:
    将1球放在左盘,2球放在右盘,如果不平衡,可知不一致的球在12这两个球中;
                                如果平衡,则可推断出不一致的球在34这两个球中;

    第三次称:
    假设不一致的球在A组,即在12两个球中;
    将1球放在左盘,3(45678任一个都可以)放在右盘,如果不平衡,可判断出不一致的球为1球;
                                                 如果平衡,可推断出不一致的球为2球;

     

    展开全文
  • 只要用缓存,就可能会涉及到缓存数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题? 面试题剖析 一般来说,如果允许缓存可以稍微的跟数据库偶尔有不一致的情况,也就是说...

    只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题?

    面试题剖析

    一般来说,如果允许缓存可以稍微的跟数据库偶尔有不一致的情况,也就是说如果你的系统不是严格要求 “缓存+数据库” 必须保持一致性的话,最好不要做这个方案,即:读请求和写请求串行化,串到一个内存队列里去。

    串行化可以保证一定不会出现不一致的情况,但是它也会导致系统的吞吐量大幅度降低,用比正常情况下多几倍的机器去支撑线上请求。

    Cache Aside Pattern

    最经典的缓存+数据库读写的模式,就是 Cache Aside Pattern。

    读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。

    更新的时候,先更新数据库,然后再删除缓存。

    为什么是删除缓存,而不是更新缓存?

    原因很简单,很多时候,在复杂点的缓存场景,缓存不单单是数据库中直接取出来的值。

    比如可能更新了某个表的一个字段,然后其对应的缓存,是需要查询另外两个表的数据并进行运算,才能计算出缓存最新的值的。

    另外更新缓存的代价有时候是很高的。是不是说,每次修改数据库的时候,都一定要将其对应的缓存更新一份?也许有的场景是这样,但是对于比较复杂的缓存数据计算的场景,就不是这样了。如果你频繁修改一个缓存涉及的多个表,缓存也频繁更新。但是问题在于,这个缓存到底会不会被频繁访问到?

    举个栗子,一个缓存涉及的表的字段,在 1 分钟内就修改了 20 次,或者是 100 次,那么缓存更新 20 次、100 次;但是这个缓存在 1 分钟内只被读取了 1 次,有大量的冷数据。实际上,如果你只是删除缓存的话,那么在 1 分钟内,这个缓存不过就重新计算一次而已,开销大幅度降低,用到缓存才去算缓存。

    其实删除缓存,而不是更新缓存,就是一个 lazy 计算的思想,不要每次都重新做复杂的计算,不管它会不会用到,而是让它到需要被使用的时候再重新计算。像 mybatis,hibernate,都有懒加载思想。查询一个部门,部门带了一个员工的 list,没有必要说每次查询部门,都里面的 1000 个员工的数据也同时查出来啊。80% 的情况,查这个部门,就只是要访问这个部门的信息就可以了。先查部门,同时要访问里面的员工,那么这个时候只有在你要访问里面的员工的时候,才会去数据库里面查询 1000 个员工。

    最初级的缓存不一致问题及解决方案

    问题:先修改数据库,再删除缓存。如果删除缓存失败了,那么会导致数据库中是新数据,缓存中是旧数据,数据就出现了不一致。

    解决思路:先删除缓存,再修改数据库。如果数据库修改失败了,那么数据库中是旧数据,缓存中是空的,那么数据不会不一致。因为读的时候缓存没有,则读数据库中旧数据,然后更新到缓存中。

    比较复杂的数据不一致问题分析

    数据发生了变更,先删除了缓存,然后要去修改数据库,此时还没修改。一个请求过来,去读缓存,发现缓存空了,去查询数据库,查到了修改前的旧数据,放到了缓存中。随后数据变更的程序完成了数据库的修改。

    完了,数据库和缓存中的数据不一样了。。。

    为什么上亿流量高并发场景下,缓存会出现这个问题?

    只有在对一个数据在并发的进行读写的时候,才可能会出现这种问题。其实如果说你的并发量很低的话,特别是读并发很低,每天访问量就 1 万次,那么很少的情况下,会出现刚才描述的那种不一致的场景。但是问题是,如果每天的是上亿的流量,每秒并发读是几万,每秒只要有数据更新的请求,就可能会出现上述的数据库+缓存不一致的情况。

    解决方案如下:

    更新数据的时候,根据数据的唯一标识,将操作路由之后,发送到一个 jvm 内部队列中。读取数据的时候,如果发现数据不在缓存中,那么将重新读取数据+更新缓存的操作,根据唯一标识路由之后,也发送同一个 jvm 内部队列中。

    一个队列对应一个工作线程,每个工作线程串行拿到对应的操作,然后一条一条的执行。这样的话,一个数据变更的操作,先删除缓存,然后再去更新数据库,但是还没完成更新。此时如果一个读请求过来,读到了空的缓存,那么可以先将缓存更新的请求发送到队列中,此时会在队列中积压,然后同步等待缓存更新完成。

    这里有一个优化点,一个队列中,其实多个更新缓存请求串在一起是没意义的,因此可以做过滤,如果发现队列中已经有一个更新缓存的请求了,那么就不用再放个更新请求操作进去了,直接等待前面的更新操作请求完成即可。

    待那个队列对应的工作线程完成了上一个操作的数据库的修改之后,才会去执行下一个操作,也就是缓存更新的操作,此时会从数据库中读取最新的值,然后写入缓存中。

    如果请求还在等待时间范围内,不断轮询发现可以取到值了,那么就直接返回;如果请求等待的时间超过一定时长,那么这一次直接从数据库中读取当前的旧值。

    高并发的场景下,该解决方案要注意的问题:

    1、读请求长时阻塞

    由于读请求进行了非常轻度的异步化,所以一定要注意读超时的问题,每个读请求必须在超时时间范围内返回。

    该解决方案,最大的风险点在于说,可能数据更新很频繁,导致队列中积压了大量更新操作在里面,然后读请求会发生大量的超时,最后导致大量的请求直接走数据库。务必通过一些模拟真实的测试,看看更新数据的频率是怎样的。

    另外一点,因为一个队列中,可能会积压针对多个数据项的更新操作,因此需要根据自己的业务情况进行测试,可能需要部署多个服务,每个服务分摊一些数据的更新操作。如果一个内存队列里居然会挤压 100 个商品的库存修改操作,每隔库存修改操作要耗费 10ms 去完成,那么最后一个商品的读请求,可能等待 10 * 100 = 1000ms = 1s 后,才能得到数据,这个时候就导致读请求的长时阻塞。

    一定要做根据实际业务系统的运行情况,去进行一些压力测试,和模拟线上环境,去看看最繁忙的时候,内存队列可能会挤压多少更新操作,可能会导致最后一个更新操作对应的读请求,会 hang 多少时间,如果读请求在 200ms 返回,如果你计算过后,哪怕是最繁忙的时候,积压 10 个更新操作,最多等待 200ms,那还可以的。

    如果一个内存队列中可能积压的更新操作特别多,那么你就要加机器,让每个机器上部署的服务实例处理更少的数据,那么每个内存队列中积压的更新操作就会越少。

    其实根据之前的项目经验,一般来说,数据的写频率是很低的,因此实际上正常来说,在队列中积压的更新操作应该是很少的。像这种针对读高并发、读缓存架构的项目,一般来说写请求是非常少的,每秒的 QPS 能到几百就不错了。

    实际粗略测算一下,如果一秒有 500 的写操作,如果分成 5 个时间片,每 200ms 就 100 个写操作,放到 20 个内存队列中,每个内存队列,可能就积压 5 个写操作。每个写操作性能测试后,一般是在 20ms 左右就完成,那么针对每个内存队列的数据的读请求,也就最多 hang 一会儿,200ms 以内肯定能返回了。

    经过刚才简单的测算,我们知道,单机支撑的写 QPS 在几百是没问题的,如果写 QPS 扩大了 10 倍,那么就扩容机器,扩容 10 倍的机器,每个机器 20 个队列。

    2、读请求并发量过高

    这里还必须做好压力测试,确保恰巧碰上上述情况的时候,还有一个风险,就是突然间大量读请求会在几十毫秒的延时 hang 在服务上,看服务能不能扛的住,需要多少机器才能扛住最大的极限情况的峰值。

    但是因为并不是所有的数据都在同一时间更新,缓存也不会同一时间失效,所以每次可能也就是少数数据的缓存失效了,然后那些数据对应的读请求过来,并发量应该也不会特别大。

    3、多服务实例部署的请求路由

    可能这个服务部署了多个实例,那么必须保证说,执行数据更新操作,以及执行缓存更新操作的请求,都通过 Nginx 服务器路由到相同的服务实例上。

    比如说,对同一个商品的读写请求,全部路由到同一台机器上。可以自己去做服务间的按照某个请求参数的 hash 路由,也可以用 Nginx 的 hash 路由功能等等。

    4、热点商品的路由问题,导致请求的倾斜

    万一某个商品的读写请求特别高,全部打到相同的机器的相同的队列里面去了,可能会造成某台机器的压力过大。就是说,因为只有在商品数据更新的时候才会清空缓存,然后才会导致读写并发,所以其实要根据业务系统去看,如果更新频率不是太高的话,这个问题的影响并不是特别大,但是的确可能某些机器的负载会高一些。

     

    来源:Java 极客技术

    展开全文
  • 多副本一致性 主从同步方式 主从异步方式 Oracle中的应用 CAP理论 ...多副本一致性 ...这是分布式一致性算法的个典型应用场景... 那么,如何在个可能出现各种故障的异步分布式系统中保证同一数据的多个副本的一致...


    多副本一致性

    这是分布式一致性算法的一个典型应用场景。在分布式存储系统中经常使用多副本的方式实现容错,这样部分副本的失效不会导致数据的丢失。当然,前提是每次更新操作都需要更新数据的所有副本,使多个副本的数据保持一致。

    那么,如何在一个可能出现各种故障的异步分布式系统中保证同一数据的多个副本的一致性 (Consistency) 呢?


    两副本的例子

    以最简单的两副本为例,说明两种方式:

    1. 主从同步方式

    这里写图片描述

    写请求首先发送给主副本,主副本同步更新到其它副本后返回,4之后写请求执行成功。

    • 优点:这种方式可以保证副本之间数据的强一致性,写请求执行成功之后从任意副本读到的数据都是一致的。

    • 缺点:可用性很差,只要任意一个副本写失败,写请求将执行失败。主从同步的弱可用性:
      这里写图片描述


    2. 主从异步方式

    这里写图片描述

    如果采用异步复制的方式,主副本写成功后立即返回,然后在后台异步的更新其它副本。

    • 优点:这种方式可用性较好,只要主副本写成功,写请求就执行成功。

    • 缺点:不能保证副本之间数据的强一致性,写成功返回之后从各个副本读取到的数据不保证一致,只有主副本上是最新的数据,其它副本上的数据落后,只能提供最终一致性。可能出现以下两种失效的情况:
      1)异步复制失败。如果出现断网导致后台异步复制失败,则主副本和其它副本将长时间不一致,其它副本上的数据一直无法更新,直到网络重新连通:
      这里写图片描述
      2)主副本写成功后立即宕机。如果主副本在写请求成功返回之后和更新其它副本之前宕机失效,则会造成成功写入的数据丢失,一致性被破坏:
      这里写图片描述


    Oracle中的应用

    熟悉Oracle的朋友应该对上述同步方式非常熟悉,上述同步和异步复制方式分别对应Oracle Data Guard的一种数据保护模式。

    1. 同步复制为最高保护模式 (Maximum Protection)
    2. 异步复制为最高性能模式 (Maximum Performance)
    3. 介于两者之间的为最高可用性模式 (Maximum Availability) :在正常情况下,它和最高保护模式一样,一旦同步出现故障,立即切换成最高性能模式。

    CAP理论

    主从同步和主从异步方式均无法同时保证数据的一致性和可用性,此问题是典型的分布式系统中一致性和可用性不可兼得的例子,分布式系统中著名的CAP理论从理论上证明了这个问题。
    参见:《分布式基础理论–CAP》

    Paxos、Raft等分布式一致性算法则可在一致性和可用性之间取得很好的平衡,在保证一定的可用性的同时,能够对外提供强一致性,因此Paxos、Raft等分布式一致性算法被广泛的用于管理副本的一致性,提供高可用性。

    展开全文
  • arcgis添加图层时,显示“个或多个已经添加图层的范围关联空间参考不一致”,或者将数据导出shp文件,然后将该shp文件添加图层时提示“Arcmap不能绘制个或者多个图层”。针对这两个问题的解决方案。

    arcgis添加图层时,显示“一个或多个已经添加图层的范围与关联空间参考不一致”,或者将数据导出shp文件,然后将该shp文件添加至图层时提示“Arcmap不能绘制一个或者多个图层”。

    出现这种问题,最容易想到的就是某个图层的坐标系和其他图层的坐标系不一致,那就一个个查看,找出不一样的那个,借助ArcToolBox工具箱的“数据管理工具->投影和变换->定义投影”将其坐标系修正过来。


    但是,很多时候在修正过坐标系后,还是会出现这种问题。这个就是图层本身的数据有问题了。比如,我今天将一个有经纬度信息的excel表导入arcmap,并将其导出shp文件,再将这个shp文件重新加载进图层时,老是报错,而且也无法在界面进行可视化。后来通过查看该shp文件的属性表发现属性表中多了两行,而且这两行的属性值都为0。不过原始excel表中看不出多了两行,在shp文件属性表中也删不掉这两行,最后只好在原始excel表中将数据下方的表格进行删除,再重新导入导出,终于把问题解决了。

    后来,还掌握了一个技巧:先将有坐标系的shp文件加载进地图中,那么后面再加载的文件自动关联上第一个shp文件的坐标系。


    展开全文
  • 函数列函数项级数——(一致收敛性

    万次阅读 多人点赞 2019-05-28 18:53:42
    .函数列及其一致收敛性 设是列定义在同一数集E上的函数,称为...设函数列函数f定义在同一数集D上,当n>N时,有则称函数列在D上一致收敛于f,记作 函数列在D上一致收敛,必在D上每一点都收敛;反之,在D...
  •  由于俩个service在不同事物中,出现问题时不能一致回滚,失去了数据一致性。   三.主要思路:  在需要同时插入多条数据时,这其中可能是同个表的多条记录,也可能是多个不同表之间的数据同时更新。对此,...
  • 在足球比赛里,个球员在场比赛中进三个球,称之...一致性(Consistency) 可用性(Availability) 分区容忍性(Partition tolerance) CAP原理指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。因此在进行...
  • 总线矩阵:业务过程和维度的交点; 一致性维度:同一集市的维度表,内容相同或包含; 一致性事实:不同集市的同一事实,需保证口径一致,单位统一。
  • C# List.Sort() 出现报错无法排序,原因是 IComparer....个值本身比较不相等,或者个值另外个值重复比较生成不同的结果[img=https://img-bbs.csdn.net/upload/202011/06/1604627786_61836.png][/img][img=...
  • 我们都了解分布式CAP原则,其中的C就是一致性。有关一致性,实践中又可以分为:强一致性、单调...在任何时刻所有的用户或者进程查询到的都是最近次成功更新的数据。强一致性是程度最高一致性要求,也是最难实现的...
  • 怎么停止DOMINO对个数据库进行一致性检查      SKIP_FIXUP=1    in the notes.ini and restart
  • Redis--Redis数据库的一致

    万次阅读 2020-04-16 22:02:35
    其他网址 双写一致性_数据库_Coffee的博客-CSDN博客 如何保证缓存数据库的双写一致性?_数据库_change的博客-CSDN博客
  • 不要千言万语,组漫画让你秒懂最终一致

    千次阅读 多人点赞 2019-06-14 18:02:37
    你要是不知道什么是最终一致性你可以看看下面的权威定义,当然了网上关于什么是最终一致性的帖子铺天盖地,也许你已经很明白了,即使这样你是不是依然为此图欢呼? 最终一致性是分布式理论中的重要,定义如下: ...
  • 第二个是:本地代码同步线上最新版本(会覆盖本地所有远程仓库上同名的文件); 第三个是:再更新次(其实也可以不用,第二步命令做过了其实) 备注: 命令连接符 && 的意思是 前条命令执行成功才执行后条...
  • Raft 是种为了管理复制日志的一致性算法。它提供了和 Paxos 算法相同的功能和性能,但是它的算法结构和 Paxos 不同,使得 Raft 算法更加容易理解并且更容易构建实际的系统。为了提升可理解性,Raft 将一致性算法...
  • 介绍内容转载自:http://www.blogjava.net/hello-yun/archive/2012/04/27/376744.html https://blog.csdn.net/c289054531/article/details/15337575CAP原理中,有三个要素:一致性(Consistency)可用性(Availability...
  • 步步学OpenGL 5】-《一致变量Uniform Variables》

    千次阅读 热门讨论 2016-09-13 16:23:17
    教程5:一致变量原文:...一致变量和普通属性的区别:普通变量所包含的数据是顶点具体化的,所以在每个着色器引入的时候它们将从顶点缓冲区加载个新的值;但是一致变量的值在整个draw call中
  • 一致性哈希算法Java实现

    万次阅读 多人点赞 2016-10-09 16:07:05
    一致性哈希算法Java实现 ======================================================== 一致性哈希算法是分布式系统中常用的算法。比如,个分布式的存储系统,要将数据存储到具体的节点上, 如果采用普通的...
  • 分布式一致共识算法

    万次阅读 2019-04-05 10:28:08
    分布式一致共识算法 UTXO 账户余额模型 区块链技术是近几年逐渐变得非常热门的技术,以比特币为首的密码货币其实已经被无数人所知晓,但是却很少有人会去研究它们的底层技术,也就是作为个分布式网络比特币...
  • 下面通过几个问题来说明kafka如何来保证消息可靠性与一致性 在kafka中ISR是什么? 在zk中会保存AR(Assigned Replicas)列表,其中包含了分区所有的副本,其中 AR = ISR+OSR ISR(in sync replica):是kafka动态...
  • 一致性、顺序一致性、弱一致性和共识

    万次阅读 多人点赞 2018-07-21 21:57:37
    可以分为强一致性、顺序一致一致性。 1.1 强一致性(Strict Consistency) 也称为: 原子一致性(Atomic Consistency) 线性一致性(Linearizability Consistency) 两个要求: 任何次读...
  • 层次分析与一致性检验

    千次阅读 2020-12-20 17:19:25
    目录1、层次分析法的基本步骤1.1、建立层次结构模型1.2、构造判断(成对比较)矩阵1.3、层次单排序及一致性检验1.4、 层次总排序及其一致性检验2、总结:层次分析法的4步3、实例:去哪儿旅游5、为什么层次分析法要进行...
  • 采用mysql存储持久化数据,redis缓存热门数据,遇到个问题,对于一些强实时性业务,我们需要先将数据写到mysql上,mysql写入成功后,再去更新redis,从而确保redis解决读的问题,同时保证了关键数据的一致性问题。...
  • 摘要:本篇文章是【区块链之技术进阶】的第七篇文章,在之前的文章中咱们多多少少提及了共识算法等相关知识,但是却没有具体地更加深入地了解,本文就为大家掰掰区块链共识机制分布式一致性算法,两者究竟有什么...
  • 要想同时满足上面三条,可以采用读请求和写请求串行化,串到个内存队列里去,这样就可以保证一定不会出现不一致的情况。但是,串行化之后,就会导致系统的吞吐量会大幅度的降低,要用比正常情况下多几倍的...
  • 一致性是个深刻而复杂的问题,这篇文章是我目前的粗浅理解,如果发现理解错误还会继续更新 目前这篇文章只是记录我自己的理解,并没有考虑文章的可读性 本文由giantpoplar发表于CSDN,未经允许不得转载。 ...
  • Redis数据库一致性问题分析

    万次阅读 多人点赞 2019-07-01 20:35:58
    缓存已经在项目中被广泛使用,在读取缓存方面,大家没啥疑问,都是...先做个说明,从理论上来说,给缓存设置过期时间,是保证最终一致性的解决方案。这种方案下,我们可以对存入缓存的数据设置过期时间,所有的写...
  • 随机生成四位数字验证码的代码,并验证输入的生成的是否一致

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,860,572
精华内容 1,144,228
关键字:

一至与一致