1% 慢请求优化
1个客户端同时向服务器发出100个请求,等待所有的请求都返回才算成功。
99%的请求10ms返回,1%的请求1000ms返回.
假设慢请求的概率是 \(p = 0.01\) ,请求总数是 \(n = 100\). 能快速(10ms)返回的概率有多少?如何优化?
所有请求都能在10ms内返回的概率只有 36%:
第1个请求能在10ms内返回的概率是: \(1 - p = 0.99\)
第1个请求和第2个请求都能在10ms内返回的概率是: \(( 1 - p )^2 = 0.99 \times 0.99\)
…
所有请求都在10ms内返回的概率是: \((1-p)^n = 0.99^{100} \approx 0.36%\)
通过重试提高成功率
但如果假设可以重试多次,情况会好得多.
对每1个请求,如果第1次没有在10ms内返回,则立即中断,立即发起1次重试. 则两次都超时的概率是: \(p^2 = 0.0001\) .
因此,对每个请求,重试两次,成功的概率是: \(1 - p^2 = 0.9999\) .
所有请求都允许最多重试2次,则全部都成功的概率是: \((1-p^2)^n \approx 99.00 \%\) . 总耗时20ms.
如果允许重试3次,成功率是: \((1-p^3)^n \approx 99.99 \%\) . 总耗时30ms.
重试次数与请求成功率的关系
重试次数 | 请求耗时 | 成功率 |
1 | 10ms | 36% |
2 | 20ms | 99.00% |
3 | 30ms | 99.99% |
Archive
- 15 Nov 2020 slimarray: gzip的压缩率, 即时访问
- 28 Oct 2020 200行代码实现基于paxos的kv存储
- 18 Oct 2020 后分布式时代: 多数派读写的'少数派'实现
- 20 Dec 2019 Art of Pull Requests(翻译)
- 21 Nov 2019 掐指算算: 你的CDN多花了几百万?
- 19 Nov 2019 一年的素描练习
- 30 Oct 2019 互联网中对象访问频率的91分布
- 09 Jan 2019 哄好面试官系列-1: 比较2个python dict(多级)是否相同
- 04 Nov 2018 存储中的文件合并策略优化
- 27 Sep 2018 软件工程是个面包机
- 26 Aug 2018 程序员必须知道的事情, 一般人我不告诉他
- 16 Aug 2018 cgexec 无法继承 LD_PRELOAD 环境变量
- 04 Aug 2018 mysql group replication实践记录: 步骤, 问题和注意事项
- 13 Feb 2018 枚举所有整勾股数
- 03 Feb 2018 ansible中的include, include_tasks 和 import_tasks 的差别
- 20 Nov 2017 python 并发subprocess.Popen的坑
- 05 Aug 2017 程序员必读: 摸清hash表的脾性
- 06 May 2017 python 进程内存增长问题, 解决方法和工具
- 01 Feb 2017 xp的分布式系统系列教程之: Erasure-Code: 工作原理, 数学解释, 实践和分析.
- 01 Feb 2017 xp的分布式系统系列教程之: Erasure-Code: 工作原理, 数学解释, 实践和分析.
- 11 Nov 2015 可靠分布式系统基础 Paxos 的直观解释
- 28 Jul 2015 socket关闭: close()和shutdown()的差异
- 17 May 2015 随手改变世界之 git-auto-squash
- 17 Feb 2015 Numbers Programmers Should Know About Hash
- 11 Feb 2015 Vim-tabbar: Simple, stupid and fast tab-bar for VIM
- 24 Jul 2014 1% 慢请求优化
- 31 Jan 2014 Some useful resources
- 31 Jan 2014 jobq.py -- Queue processing engine