精华内容
下载资源
问答
  • session + redis 实现session 共享原理和原因

    万次阅读 多人点赞 2019-06-14 10:16:58
    要用 session + redis 共享session的原因: 先进的企业级或者大型的网站平台,都是分布式结构,分布式的好处是通过nginx分发请求,让多个服务器各自处理请求,来减少单一服务器的压力,并且提高执行效率。 在这个...

    要用  session  + redis 共享session的原因:

    先进的企业级或者大型的网站平台,都是分布式结构,分布式的好处是通过nginx分发请求,让多个服务器各自处理请求,来减少单一服务器的压力,并且提高执行效率。

    在这个分布式结构下,如果不用共享session的话,就会出现问题。当一个客户端发送一个请求(无session),通过nginx将第一次请求分发给服务器1,服务器判断无session,就让那个客户进行登录操作,并得到响应,此时客户端会存储一个来自服务器1响应的session,并存储在客户端。

    当客户端发送第二次请求的时候,此时本次请求已经携带了session(跳过登录),nginx却将请求分发给服务器2,因为服务器2中没有session,所以无法与客户端session进行对应。所以程序会出现异常或是报错,无法正常响应。

     

     

    解决方法 : session  +  redis 实现session 共享

      session  +  redis 实现session 共享原理:

    为了避免上面session 在服务器直接不共享的问题,就将 session 放入 redis 中。

    当客户端第一次发送请求后,nginx将请求分发给服务器1 ,然后将服务器1 产生的session 放入redis中,这样的话 客户端、服务器1 和redis中都会有一个相同的session,当客户端发送第二次请求的时候,nginx将请求分发给服务器2 (已知服务器2 中无session),因为客户端自己携带了一个session,那么服务器2 就可以拿着客户端带来的session中的session ID去redis中获取session,只要拿到这个session,就能执行之后的操作。

     

     

     

     

    展开全文
  • 要用session+ redis 共享session的原因: 先进的企业级或者大型的网站平台,都是分布式结构,分布式的好处是通过nginx分发请求,让多个服务器各自处理请求,来减少单一服务器的压力,并且提高执行效率。 ...
    要用  session  + redis 共享session的原因:

    先进的企业级或者大型的网站平台,都是分布式结构,分布式的好处是通过nginx分发请求,让多个服务器各自处理请求,来减少单一服务器的压力,并且提高执行效率。

    在这个分布式结构下,如果不用共享session的话,就会出现问题。当一个客户端发送一个请求(无session),通过nginx将第一次请求分发给服务器1,服务器判断无session,就让那个客户进行登录操作,并得到响应,此时客户端会存储一个来自服务器1响应的session,并存储在客户端。

    当客户端发送第二次请求的时候,此时本次请求已经携带了session(跳过登录),nginx却将请求分发给服务器2,因为服务器2中没有session,所以无法与客户端session进行对应。所以程序会出现异常或是报错,无法正常响应。


    解决方法 : session  +  redis 实现session 共享

      session  +  redis 实现session 共享原理:

    为了避免上面session 在服务器直接不共享的问题,就将 session 放入 redis 中。

    当客户端第一次发送请求后,nginx将请求分发给服务器1 ,然后将服务器1 产生的session 放入redis中,这样的话 客户端、服务器1 和redis中都会有一个相同的session,当客户端发送第二次请求的时候,nginx将请求分发给服务器2 (已知服务器2 中无session),因为客户端自己携带了一个session,那么服务器2 就可以拿着客户端带来的session中的session ID去redis中获取session,只要拿到这个session,就能执行之后的操作。

     

    1.png (24.83 KB, 下载次数: 0)

     

    1.png

    2.png (23.08 KB, 下载次数: 1)

     

    2.png

    展开全文
  • 单片机的外部晶振稳定,受温度,湿度等环境因素影响比内部振荡器小,精度比较高。... ”晶振/时钟被旁路“ 是指将芯片内部的用于外部晶体起振功率驱动等的部分电路XTAL_OUT引脚断开,这时使用的外部时钟是有...

      单片机的外部晶振稳定,受温度,湿度等环境因素影响比内部振荡器小,精度比较高。而且当设计需要降低功耗时,比如说便携式仪表等,就需要外设晶振,因为内部振荡器不能根据需要停止,而外部晶振可以适时停止,从而进入休眠状态,降低功耗。

      

    外部晶体振荡器被旁路的原理和原因

     

      晶振被旁路原理

      ”晶振/时钟被旁路“ 是指将芯片内部的用于外部晶体起振和功率驱动等的部分电路和XTAL_OUT引脚断开,这时使用的外部时钟是有源时钟或者其他STM32提供的CCO输出等时钟信号,直接单线从XTAL_IN输入,这样即使外部有晶体也震荡不起来了

      只有在使用外部时钟的时候是被旁路,注意不是晶体振荡器,也就是说当使用外部提供的时钟时(如使用有源振荡器),必须设置这个控制位旁路上述内置振荡器;可以理解把内部时钟关闭,打开外部时钟。

      HSE模式配置(旁路模式)

      外部时钟源(HSE旁路)

      

    外部晶体振荡器被旁路的原理和原因

     

      在这个模式里,必须提供外部时钟。它的频率最高可达25MHz。用户可通过设置在时钟控制寄存器中的HSEBYP和HSEON位来选择这一模式。外部时钟信号(50%占空比的方波、正弦波或三角波)必须连到SOC_IN引脚,同时保证OSC_OUT引脚悬空

      该模式下必须提供外部时钟。用户通过设置时钟控制寄存器中的HSEBYP和HSEON位来选择这一模式。外部时钟信号(50%占空比的方波、正弦波或三角波)必须连到SOC_IN引脚,此时OSC_OUT引脚对外呈高阻态。

      所谓HSE旁路模式,是指无需上面提到的使用外部晶体时所需的芯片内部时钟驱动组件,直接从外界导入时钟信号。犹如芯片内部的驱动组件被旁路了。

      不过,在使用该模式时,经常有人出现配置错误,即使用跟HSE晶体模式一样的配置。这点在STM8/STM32应用中都有人发生。 所幸的是使用这个旁路模式的情形不像使用外部晶体模式那么多,不然可能更多人在这里遇到麻烦。

      关注微信公众号“凯利讯半导体商场”更多内容等您来看哦!!!

      最新文章:光敏电阻的工作原理、参数、分类及应用电路

    展开全文
  • 为了提高系统效率,可以设置mapreduce.reduce.shuffle.merge.percent 为0.5,commit内存到0.5的时候,则启动merge,这时fetcher申请内存时冲突的机会降低。即便 Reduce为2G内存,则merge时的数据量最少为: 2G * ...

    错误异常:Error: org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in fetcher

    Redue Shuffle过程及参数:

    先附上一个MR整个过程的大图:

    过程:

    1.EventFetcher 负责向MRAppMaster获取已经运行完的Map信息,这些信息包括Map编号和运行Map的服务器。
    2.ShuffleScheduler负责调度Shuffle任务。
    3.各Fetcher线程从ShuffleScheduler取任务,进行实际Map数据获取。默认5个Fetcher线程 。
     

    参数:

        mapreduce.reduce.shuffle.input.buffer.percent:
              shuffle使用的内存比例,默认是0.7。Shuffle内存为总内存 * 0.7。
        mapreduce.reduce.shuffle.memory.limit.percent: 
            单个shuffle任务能使用的内存限额,默认是0.25,即为 Shuffle内存 * 0.25。
            低于此值可以输出到内存,否则输出到磁盘。
       mapreduce.reduce.shuffle.merge.percent:默认值为0.9。
           shuffle的数据量到Shuffle内存 * 0.9的时候,启动合并。

    他的过程是最多5个Fetcher线程取拿取maptask输出的数据,Fetcher 线程获取Map的ShuffleHead信息后,通过调用merger.reserve(mapId, decompressedLength, id); 。merge返回InMemoryMapOutput或者是OnDiskMapOutput对象, 如果返回null``,则再从ShuffleScheduler取新的任务。

    Fetcher线程取到数据后,进行mapOutput的commit操作,说明信息读结束,这个mapOutput可以和其他的mapOutput进行合并。内存空间分给Fetcher后,状态变为allocated,commit后变为committed,只有commit状态的内存可以merge,

    如果前4个Fetcher已经使用了全部的shuffle内存的99%,第5个Fetcher取的数据接近单个shuffle任务能使用的内存限额。没有fetcher commit。这时会为第5个fetcher分配25%的内存。使分配内存达到shuffle内存的124%,内存溢出。
    前面的4个fetcher已经使用shuffle内存的89,并已经commit。这时Merge不会启动。最后一个Fetcher的数据量接近单个shuffle任务能使用的内存限额。这时总shuffle使用量为114%,内存溢出。

    MergeManager的reserve的处理如下:

    public synchronized MapOutput<K,V> reserve(TaskAttemptID mapId, 
                                                 long requestedSize,
                                                 int fetcher
                                                 ) throws IOException {
        if (requestedSize > maxSingleShuffleLimit) {
          return new OnDiskMapOutput<K,V>(mapId, reduceId, this, requestedSize,
                                          jobConf, mapOutputFile, fetcher, true);
        }
        
        if (usedMemory > memoryLimit) {
          return null;
        }
       
        return unconditionalReserve(mapId, requestedSize, true);
      }

    unconditionalReserve方法如下: 增加usedMemory,返回InMemoryMapOutput对象。

     private synchronized InMemoryMapOutput<K, V> unconditionalReserve(
          TaskAttemptID mapId, long requestedSize, boolean primaryMapOutput) {
        usedMemory += requestedSize;
        return new InMemoryMapOutput<K,V>(jobConf, mapId, this, (int)requestedSize,
                                          codec, primaryMapOutput);
      }
    此代码问题如下:

    如果前4个Fetcher已经使用了全部的shuffle内存的99%,第5个Fetcher取的数据接近单个shuffle任务能使用的内存限额。没有fetcher commit。这时会为第5个fetcher分配25%的内存。使分配内存达到shuffle内存的124%,内存溢出。
    前面的4个fetcher已经使用shuffle内存的89,并已经commit。这时Merge不会启动。最后一个Fetcher的数据量接近单个shuffle任务能使用的内存限额。这时总shuffle使用量为114%,内存溢出。
    为了解决此问题,需要进行调整。目标是Shuffle内存占用总内存的比例不能超过70%,否则会出现OutOfMemoryError


    方案一
    保持shuffle内存0.7不变,则commit内存改为 0.75。同时修改reserve程序。
    在reserve方法,如果usedMemory 小于Shuffle内存的75%总是能分配成功。
    当大于75%的时候,则可能成功,也可能失败。但是当已经分配75%的时候,当这些Fetcher的任务结束commit 内存时,总能触发merge操作。merge后会释放内存。
    为了提高系统效率,可以设置mapreduce.reduce.shuffle.merge.percent 为0.5,commit内存到0.5的时候,则启动merge,这时和fetcher申请内存时冲突的机会降低。即便 Reduce为2G内存,则merge时的数据量最少为: 2G * 0.7 * 0.5 为700MB。如果 Reduce 增大,则一次Merge的数量量更多。

        mapreduce.reduce.shuffle.input.buffer.percent:
              shuffle使用的内存比例,设置为0.7。
        mapreduce.reduce.shuffle.memory.limit.percent: 
            单个shuffle任务能使用的内存限额,设置为0.25,即为 Shuffle内存 * 0.25。
            低于此值可以输出到内存,否则输出到磁盘。
       mapreduce.reduce.shuffle.merge.percent:设置为0.75。
           shuffle的数据量到Shuffle内存 ** 0.75的时候,启动合并。


    reserve方法改为

        if (usedMemory  + requestedSize > memoryLimit) {   // 原来为  if (usedMemory  > memoryLimit) {
          return null;
        }

    方案二
    shuffle内存 比例0.6,单个shuffle最大为0.15, 则merge的内存比例不用改,reserve方法不用改. 这种方案shuffle内存分配到接近100%时,最多可以分配15%的shuffle内存。总得Shuffle内存不超过0.6 + 0.6 * 0.15 = 0.69。
    在reserve方法,如果usedMemory 小于Shuffle内存的100%总是能分配成功,否则失败。但是当已经分配100%的时候,当这些Fetcher的任务结束commit 内存时,总能触发merge操作。merge后会释放内存。

        mapreduce.reduce.shuffle.input.buffer.percent:
              shuffle使用的内存比例0.6。
        mapreduce.reduce.shuffle.memory.limit.percent: 
            单个shuffle任务能使用的内存限额,设置为0.15,即为 Shuffle内存 * 0.15。
            低于此值可以输出到内存,否则输出到磁盘。
       mapreduce.reduce.shuffle.merge.percent:设置为0.9。
           shuffle的数据量到Shuffle内存 ** 0.9的时候,启动合并。
     

    展开全文
  • http://www.cnblogs.com/linjiqin/p/5130559.html
  • Redis之所以执行速度很快,主要依赖于以下几个原因: (一)纯内存操作,避免大量访问数据库,减少直接读取磁盘数据,redis 将数据储存在内存里面,读写数据的时候都不会受到硬盘 I/O 速度的限制,所以速度快; (二)单...
  • DNS劫持的原因和原理

    2019-09-22 22:23:19
     DNS劫持一般用作钓鱼网站,诱导用户跳转到劫持人预设的欺骗性网站,假网站会用户要访问的网站在外观上做的基本一模一样,不细心观察就很容易被骗过去,如果用户警觉性不高,输入相关网站的账号密码,则就会...
  • 原因: ANR,即application not responding,程序未响应 在主线程执行了比如数据库或者网络的耗时操作 其他进程占用了CPU导致本进程得不到CPU时间片,例如其他进程频繁读写 细分: 耗时网络操作 大量数据读写 ...
  • 关于mysql索引失效的几种情况,网上有很多文章,但是大多我感觉都是抄来抄去的,也有少数附上了自己的实验结果,但是并没有剖析背后的原理,所以今天自己亲自做套实验,分析一下。 准备数据 CREATE TABLE `test` ...
  • 为什么要进行hivehbase的整合?  hive是高延迟、结构化面向分析的;  hbase是低延迟、非结构化面向编程的。 Hive集成Hbase就是为了使用hbase的一些特性。或者说是中和它们的特性。 Hive与HBase的整合...
  • 请求显示原理 H5页面卡顿原因分析:  1.动画太多:渲染重绘占用GPU  2.页面操作导致重绘频繁  3.页面元素复杂:资源类标签太多(图像/视频/dom树太长)  4.内置webview性能太差  5.3类似,iOS...
  • js文件压缩原因和压缩原理

    万次阅读 2014-05-05 10:45:56
    Javascript 压缩器是一个在线压缩混淆 Javascript 代码的开发辅助工具,能够帮助开发人员减小 JS 文件大小、避免网站上的 Javascript 源代码被他人窥视窃取。 压缩:删除 Javascript 代码中所有注释、跳格...
  • 原因是勒索病毒作者,1.使用本地RSA算法将AES密钥加密;2.使用RSA等非对称加密算法,将受害者本地生成的RSA私钥进行了加密。通过这两步,只有作者使用自己私钥解密受害者RSA私钥后,受害者才能还原到本地AES密钥,...
  • 一、进程、线程?进程是具有一定独立功能的...程序 本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令数据)的真正运行实例。若干进程有可能与同一个程序相关系,且每个进程皆可以同步(循 序)或异...
  • 介绍了超声波测距的原理和,分析产生误差的原因和减小误差的方法。 超声波是机械波的一种,它波长短,指向性强, 能量消耗慢,在介质中传播的距离较远.特别是频 率为40 kHz的超声波在空气中传播效率最佳,因 此常...
  • 1.操作系统环境 操作系统:CentOS6.5 / 64bit 用户:root 2.RabbitMQ编译安装 ...RabbitMQ是使用Erlang开发...2.1.获取ErlangRabbitMQ的源文件 http://erlang.org/download/下查找最新的源文件,我选择的是版本17
  • Servlet运行原理及常见报错代码。
  • 问题原因: 后启动的消费者的TAG覆盖了前一个启动的消费者的TAG,因为在同一个组中 解决方案: 各个消费者分组 原理解析: (1) 首先TAG的作用是在消费者中作过滤 (2) 在processCallBack方法中,判断消费者的tag的...
  • 超外差接收机原理和二次变频原因

    万次阅读 2017-02-23 11:36:22
    接收机一级变频与多级变频的差别: 一级变频,容易受干扰。多次变频在不同频率的中频放大器中有多组中频滤波器。提高了单一信号的选择性。即提高了抗干扰能力。...一次变频二次变频区别是接收机的
  • 说到粘性布局,我们最常见的就算在app tab选项卡随页面滚动到顶部后悬停在那,看效果 要实现这个效果,最简单...vue 的van-sticky组件实现粘性的原理就是通过添加position:sticky实现的,但是如果你使用了position...
  • TCP/IP TIME_WAIT状态原理 (原文地址 http://elf8848.iteye.com/blog/1739571) ...TIME_WAIT状态原理 ---------------------------- 通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态。 客户端主
  • 它本质上是一个封装了线程池Handler的异步框架;它内部使用一个线程池,串行执行每一个线程,线程生命周期不用开发者管理,用来执行异步任务,通过Handler来进行回调更新UI,这一套业务也可以使用Thread来做,但是...
  • 广播风暴的产生原因和原理是什么?

    千次阅读 2013-01-18 17:31:00
    广播风暴的产生原因和原理是什么?  网吧行业竞争的加剧,出现了一些规模比较大的网吧。目前在网吧行业内,百台以上的网吧已经随处可见了。由于网吧在进行网络建设时,缺乏专业的网络技术支持,使得网吧的网络故障...
  • STP原理和配置

    2020-11-02 10:12:19
    STP原理和配置 STP即生成树协议 产生的原因 基本原理 简单配置 环路引起的问题 广播风暴 MAC地址表不稳定 STP产生的原因:打破/消除环路,链接备份 STP的各种选举是通过交换BPDU报文来实现的,BPDU是直接封装在...
  • matlab原理和工程应用

    2018-06-04 21:48:37
    matlab原理和工程应用分享给大家。 • 您上传的资源如果因版权、使用、内容完整度 等原因被举报并通过官方审核,将扣除通过该资源获得的全部积分
  • 关于线程死锁的产生、原因和原理

    千次阅读 2015-06-04 22:23:51
    下面示例演示了线程的死锁,只有明白了死锁是如何产生的,才能在项目中有效的避免死锁的发生 /* * 死锁: * 如下程序在运行时就会造成死锁的状态 * * static使用的锁为:该类的字节码文件对象 ...
  •  对于周期性报文发送原理: 比如周期为 20ms,协议栈有个调度函数Com_MainFunctionTx,每隔10ms(可配置修改)调用一次,没调用一次会-- 当为0时会发送数据。  在不考虑外部因素的前提下(比如,can线的长度,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,170
精华内容 4,468
关键字:

原理和原因