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

当Erlang节点由于队列溢出而死亡时,找到原因所在是至关重要的。是流入槽中的水太多了吗?是下水道堵塞了吗?还是把管道设计得太细了? 要找到膨大的队列并不是件难事,这个信息可以从crash dump中获得。知道队列膨大的原因则要困难得多。根据进程的角色,或者做些运行时的检查,就可以找出一些可能的原因:消息泛滥,进程阻塞无法快速处理消息,等等。
决定如何修复是最困难的部分。由于对水的滥用导致水槽积水时,我们可以换一个大一些的水槽(程序中崩溃的部分,处于边缘)。接着,发现水槽出水口太小,优化它。再接着发现管道太细,优化它。负载一直被推向系统的下游,直到下水道无法承受。此时,我们可能会试着增加水槽或者增加浴室来缓解这个全局性的输入问题38。
不过,事情总会发展到无法在浴室层面解决的地步。发出的日志过多,要保持一致性的数据库成为了瓶颈,或者只是因为公司没有解决问题所需的知识或者人力。
只有到了此时,我们才找到了系统的真正瓶颈所在,前面所做的优化虽然都不错(并且成本也不低),不过可能没啥用。 我们需要更聪明一些,退后一步,在上游解决问题。可以对进入系统的信息做些处理,让它更轻量一些(可以通过压缩,用更好的算法和数据表示,缓存等等)。 即使这样,还是会出现系统负载过大的情况,此时我们不得不在限制系统输入,丢弃输入,或者接受系统在崩溃前会持续降低服务质量之间做出艰难的选择。这些机制隶属于两种大的策略:反压(back-pressure)和减载(load-shedding)。
erl_0015 《硝烟中的erlang》 读书笔记002 “为过载做计划”的更多相关文章
- erl_0019《硝烟中的erlang》 读书笔记005 “进程信息"
对一个运行中的Erlang系统来说,进程绝对是重要的组成部分.正因为进程是所有运行实体的基础,因此会想去了解它们的更多信息.幸运的是,VM提供了大量的可用信息,其中有些可以安全使用,有些在生产环境中使 ...
- erl_0016 《硝烟中的erlang》 读书笔记003 “error_logger 爆炸”
error_logger 爆炸 具有讽刺意味的是,负责错误日志的进程竟然是最为脆弱的之一.在Erlang的缺省安装中,error_logger39负责记录日志(写入磁盘或者发送到网络上),它的速度要比 ...
- erl_0014 《硝烟中的erlang》 读书笔记001 “绪论”
1.大家听说Erlang,往往是因为其对高并发的良好支持.其实,Erlang的核心特征是容错,从某种程度上讲,并发只是容错这个约束下的一个副产品.容错是Erlang语言的DNA,也是和其他所有编程语言 ...
- erl_0017 《硝烟中的erlang》 读书笔记004 “锁和阻塞”
如果某个进程需要持续地接收新任务,那么其在执行耗时过长的锁或者阻塞操作时,就会出现问题. 最为常见的例子之一就是:某个进程使用了TCP socket,阻塞在了接收新的连接或者等待消息上面.在执行此类阻 ...
- .Net中的AOP读书笔记系列之AOP介绍
返回<.Net中的AOP>系列学习总目录 本篇目录 AOP是什么? Hello,World! 小结 本系列的源码本人已托管于Coding上:点击查看,想要注册Coding的可以点击该连接注 ...
- 硝烟中的scrum学习笔记 - 怎样制定Sprint计划(Plan Meeting)
1. 如何估算我们这个sprint能做多少个故事点 1) 本能反应 2) 生产率计算 估算生产率/实际生产率 看看团队的历史,看看他们在过去几个sprint里的生产率是多少 然后假定在下一个sp ...
- 《软件测试52讲》读书笔记 —— API测试怎么做
前言 文章中还介绍了测试工具,比如cURL.postman,单API如何测试:但这些都是偏基础的东西,且网上教程各式各样,就不再赘述了:这里主要讲的就是关于复杂场景的API测试要如何应对 API测试的 ...
- 重构(Refactoring)技巧读书笔记(General Refactoring Tips)
重构(Refactoring)技巧读书笔记 之一 General Refactoring Tips, Part 1 本文简要整理重构方法的读书笔记及个人在做Code Review过程中,对程序代码常用 ...
- ITEYE中的读书笔记:重构其实就是持续改进
原文地址:http://hawkon.iteye.com/blog/2093338#bc2355877 前段时间同事参加ITEYE的试读有奖, 没想到得了个奖,拿到一本书.由于同事的推荐我也认真读了一 ...
随机推荐
- SSH 登录时出现如下错误:Host key verification failed
注意:本文相关 Linux 配置及说明已在 CentOS 6.5 64 位操作系统中进行过测试.其它类型及版本操作系统配置可能有所差异,具体情况请参阅相应操作系统官方文档. 问题描述 使用 SS ...
- Spring boot 外部资源配置
tomcat配置访问图片路径映射到磁盘路径 首先,我在调试页面的时候发现,图片路径为: 1 /webapps/pic_son/img/1234565456.jpg 但是,tomcat中webapp ...
- R语言系列:自定义function
在用R语言做各种事物时,用户自定义函数是不可或缺的.这期来讲讲如何自定义R的function.首先要介绍的是function的基本框架: myfunction <- function(arg1, ...
- 【Python】 \uxxxx转中文
背景 写Python接口自动化过程中,使用到邮件发送测试结果详情,邮件呈现出来的内容为 \uxxxx ,不是中文 接收到的邮件内容: 成功: 110 失败: 1 失败的用例如下 : [(u'\u752 ...
- 【转】Scikit-learn技巧(拓展)总结
最近看了<Python数据挖掘入门与实战>,网上有说翻译地不好的,但是说实话,我觉得这本书还是相当不错的.作者Robert Layton是sklearn的开发者之一,书中介绍了很多skle ...
- HDU5521-最短路-建图
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- nyoj151——中国剩余定理
生理周期 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 142220 Accepted: 45744 Descripti ...
- 【Error】:10061由于目标计算机积极拒绝,无法连接
之前Windows上连接mongodb的时候首先用mongod.exe启动程序之后,用mongo.exe来连接数据库.但是在连接的时候,出现如下错误: error:10061 由于目标计算机积极拒绝, ...
- Shell test 命令,Shell 输入/输出重定向
一.Shell test 命令 Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值.字符和文件三个方面的测试. 数值测试 参数 说明 -eq 等于则为真 -ne 不等于则为真 -g ...
- BZOJ2259 [Oibh]新型计算机
话说hzwer你在坑爹?... 我按照你的建图交了上去,发现WA. 开始检查= =...过了好久,突然觉得画风不对...hzwer您建图错了啊!!! 后来看了看zky的终于知道了怎么回事>_&l ...