为过载做计划

到目前为止,我在实际工作中所碰到最常见的错误,基本上都是节点内存耗尽。而且通常都和过长的消息队列有关37。解决这类问题的方法有很多,不过只有在深入、全面的理解系统后,才能做出正确的选择。    基本上,我从事的所有项目都可以简化类比成一个非常大的浴室水槽。用户请求和数据从龙头流入。Erlang系统则是水槽和管道,可以把水流出的地方(数据库,外部API或者服务,等等)看作是下水道系统。

  当Erlang节点由于队列溢出而死亡时,找到原因所在是至关重要的。是流入槽中的水太多了吗?是下水道堵塞了吗?还是把管道设计得太细了? 要找到膨大的队列并不是件难事,这个信息可以从crash dump中获得。知道队列膨大的原因则要困难得多。根据进程的角色,或者做些运行时的检查,就可以找出一些可能的原因:消息泛滥,进程阻塞无法快速处理消息,等等。

  决定如何修复是最困难的部分。由于对水的滥用导致水槽积水时,我们可以换一个大一些的水槽(程序中崩溃的部分,处于边缘)。接着,发现水槽出水口太小,优化它。再接着发现管道太细,优化它。负载一直被推向系统的下游,直到下水道无法承受。此时,我们可能会试着增加水槽或者增加浴室来缓解这个全局性的输入问题38。

  不过,事情总会发展到无法在浴室层面解决的地步。发出的日志过多,要保持一致性的数据库成为了瓶颈,或者只是因为公司没有解决问题所需的知识或者人力。

  只有到了此时,我们才找到了系统的真正瓶颈所在,前面所做的优化虽然都不错(并且成本也不低),不过可能没啥用。    我们需要更聪明一些,退后一步,在上游解决问题。可以对进入系统的信息做些处理,让它更轻量一些(可以通过压缩,用更好的算法和数据表示,缓存等等)。 即使这样,还是会出现系统负载过大的情况,此时我们不得不在限制系统输入,丢弃输入,或者接受系统在崩溃前会持续降低服务质量之间做出艰难的选择。这些机制隶属于两种大的策略:反压(back-pressure)和减载(load-shedding)

转载于:https://www.cnblogs.com/rsblog/p/4347439.html

erl_0015 《硝烟中的erlang》 读书笔记002 “为过载做计划”相关推荐

  1. 硝烟中的Scrum——读书笔记

    产品的Story产出需求池中的BackLog,产品的BackLog有两种表现形式: Excel表格 :详细记录并且留存 索引卡 :用作互动,展开演示(在计划会议上) 每个BackLog由三个维度组成: ...

  2. 读书笔记002:托尼.巴赞之快速阅读

    读书笔记002:托尼.巴赞之快速阅读 托尼.巴赞是放射性思维与思维导图的提倡者.读完他的<快速阅读>之后,我们就可以可以快速提高阅读速度,保持并改善理解嗯嗯管理,通过增进了解眼睛和大脑功能 ...

  3. mozart-oz中有限域编程读书笔记

    mozart-oz自带文档: <Finite Domain Constraint Programming in Oz. A Tutorial.>读书笔记 http://www.mozart ...

  4. erl_0016 《硝烟中的erlang》 读书笔记003 “error_logger 爆炸”

    error_logger 爆炸 具有讽刺意味的是,负责错误日志的进程竟然是最为脆弱的之一.在Erlang的缺省安装中,error_logger39负责记录日志(写入磁盘或者发送到网络上),它的速度要比 ...

  5. Erlang读书笔记

    Erlang的交互式环境 安装:下载并安装Erlang,在OS的环境变量中添加pathErlangHOME/bin目录 启动:linux 环境:erl,windows: 开始-程序-erlang图标启 ...

  6. 读书笔记002:《伤寒论》-十二经络

    走向:手三阳,从手至头:手三阴,从脏至手:足三阳,从头至足,足三阴,从足至腹.太阳.少阴行身之后,阳明.太阴行身之前,少阳.厥阴行身之侧. 起止:经始太阴,而厥阴最后,穴先中府,而终则期门.原夫肺脉, ...

  7. 《NLTK基础教程》读书笔记 002期

    今天上来的第一个坑出现在使用nltk的tokensize,终端报出了如下错误 LookupError: ************************************************ ...

  8. 《Natural Language Processing with Python》读书笔记 002期

    第二章一开始核心就是再讲nltk里面内置的各种语料库,但是个人觉得这个并不是这张的重点,重点在于后面如何自己构造自己的语料库,毕竟如果一般训练的话,都肯定是拿自己手头的data来搞. 这个地方其实也没 ...

  9. 读书笔记:《一生的计划》

    2012年读的第一本书,读此书的初衷是想制定一个切实可行的2012年计划,从网上查来查去就发现这本书了,本书不长,80多页,打印下来后很快就读完了. 书的作者是一个虔诚的基督徒,书中充满了<圣经 ...

最新文章

  1. 我的jquery之路
  2. Windows PowerShell in Action
  3. ios 自动打包命令_【实践】iOS使用Jenkins实现自动化打包并上传蒲公英
  4. VUE第三篇 入门后续
  5. 生产消费是什么设计模式_快速消费品的完整形式是什么?
  6. CSS之flex需要知道的一切(二)
  7. 语言4位bcd码怎么加加_S7300400如何使用SCL语言调用SFC1(READ_CLK)读取日期和时间?...
  8. 熊猫站群1.0 开发完结
  9. 《用户网络行为画像》读书笔记(二)
  10. DButils入门及结果处理器选择
  11. 查看 mysql端口 和进程_mysql 端口号(怎么查看mysql的端口号)
  12. 最新好用的服装零售进销存软件排行榜
  13. 兽药销售终端如何摆脱客情困局
  14. 大数据统计分析、驾驶舱页面,拥有20个例子
  15. Netbeans使用问题整理
  16. 鸢尾花决策树分类及可视化
  17. MOOC微信小程序开发从入门到实践~笔记
  18. 申请专利费用可以减免吗
  19. 修改了svn服务器配置,配置http方式访问svn服务器
  20. 建立数据地图,让数据资产“活”起来

热门文章

  1. php中未定义的变量使用技巧
  2. 鼠标悬停在li标签上时显示一个弹框_HTML标签——列表标签
  3. python中shift函数rolling_Pandas Shift函数的基础入门学习笔记
  4. 基于java的打砖块游戏_cocos creator 制作的打砖块游戏
  5. java方法中与参数怎么调用_与Java方法调用中的类型参数有关的问题
  6. python比赛评分计算_python3:(可输入评委人数和参赛人数)模拟决赛现场最终成绩计算过程...
  7. python图形化进度条代码_Python实现进度条和时间预估的示例代码
  8. telnet 超时_python3从零学习-5.10.10、telnetlib—Telnet 客户端
  9. Android第一个程序截图,java – 在Android上截取屏幕截图
  10. uniapp 底部菜单_uniapp 原生导航栏