Bandwidth Limit Exceeded
如果你从未听说过见证人,也不知道见证人在STEEMIT网络中起到什么作用,那么可以看一下我的这篇文章:
假设你已经对见证人有了一些了解,那么你可能会有疑问,见证人和猫有啥关系?
这要从之前几天频繁发送的一个错误说起, 那就是Bandwidth Limit Exceeded
对于这个错误,我曾经写过两篇分析文章:
第一篇文章所立的层次不够高远,完全从用户的角度分析,因为我觉得,系统相关的信息我们改变不了,我们改变的只能是我们自己。于是得出的结论是: 增加vshares占比 (买买买), 或 减小你的平均带宽占用(等、减)。先不说第二种方式减少操作次数,减少文本长度等带来的诸多不爽,方式一岂不是让STEEM变成一个金钱至上的网络了? (难道不是吗? 😲)
第二篇文章中,我才知道原来Bandwidth Limit Exceeded是由一个BUG所引起,这个BUG叫做溢出(Overflow),这个BUG导致max_virtual_bandwidth 变得非常之少,进而导致用户正常操作受限。
如何处理BUG
那么既然有BUG了,我们修复了BUG,再升级到新版,就好了呗?
事情并非那么简单。
以我N年码农的经验,我是没少干过修复旧BUG引进新BUG的事情,尤其是对一个复杂的系统而言。有个词汇叫做牵一发而动全身,如果贸然升级就可能陷入修复BUG->升级->产生新BUG->修复BUG->升级->产生新BUG的怪圈。
@gtg 今天更新的 Witness log
其中有一句话很有意思: We’ve got trouble, we’ve made it double
他的文章中,提及了当Bandwidth Limit Exceeded 问题发生,见证人之一提出了将maximum_block_size修改为: 131072, 达到提升max_virtual_bandwidth 目的:
dgp.max_virtual_bandwidth = (dgp.maximum_block_size dgp.current_reserve_ratio STEEMIT_BANDWIDTH_PRECISION * STEEMIT_BANDWIDTH_AVERAGE_WINDOW_SECONDS) / STEEMIT_BLOCK_INTERVAL;
从上边公式来看,貌似没有问题。
然而,大家响应号召并修改maximum_block_size后,发现问题依然(或者变得更加严重)
然后,发现是溢出问题,大家又纷纷把maximum_block_size改回为: 65,536
那么如果使用官方释出的新代码升级呢? 这当然是方案之一,但是若有新BUG引入,就没来回改maximum_block_size参数这么简单了。
猫咪战队也参战
说了这么多,你可能会问,这和猫咪有啥关系呢?是呢,怎么看也和猫咪产生不了关联。
事实上是见证人之一@abit 提出并实施了一种非常有意思的方案,即解决(避免)了Overflow 的问题,又无需急于升级节点,岂不是美哉?
这个方案的思路就是通过在溢出即将发生的时候,往steem上发送一些超长内容,拉高average_block_size。而在0.19.0及以前版本中,average_block_size 的变化会作用到current_reserve_ratio,代码中说明如下:
所以超长内容,拉高average_block_size, 让其大于50% maximum_block_size 就会降低 current_reserve_ratio, 让其回归, 进而避免引起Overflow
说了这么多,🐱 猫在哪里呢?
其实就是 @abit 的超长回复里用了各种猫图。
比如说来自以下来源的:
http://www.ascii-art.de/ascii/c/cat.txt
https://github.com/melaniecebula/cat-ascii-faces
http://textart.io/art/tag/cat/1
比如这货(STEEMIT行高的问题,胖猫变高了,但依然很胖):
. .
:"-. .-";
|:`.`.__..__.'.';|
|| :-" "-; ||
:; :;
/ .==. .==. \
: _.--._ ;
; .--.' `--' `.--. :
: __;` ':__ ;
; ' '-._:;_.-' ' :
'. `--' .'
."-._ _.-".
.' ""------"" `.
/`- -'\
/`- -'\
:`- .' `. -';
; / \ :
: : ; ;
; ; : :
':_:.' '.;_;'
:_ _;
; "-._ -" :`-. _.._
:_ () _; "--::__. `.
\"- -"/`._ :
.-"-. -"-. ""--..____.'
/ .__ __. \
: / , / "" \ . \ ; bug
"-:___..--" "--..___;-"
为什么用猫图
其实我也不清楚为何用猫图
或者是因为: “不管黑猫白猫,能抓住 BUG 的就是好猫?”耗子
总结
- Bandwidth Limit Exceeded 的问题困扰好多新老用户
- STEEMIT官方以及诸多见证人纷纷行动起来
- @abit 凭借对代码的深刻理解,用猫咪们避免了溢出(Overflow)问题
本来是很精彩的事情,写完后发现即没能展现出来精彩,也没能把相关的技术问题解释清楚,实在是能力有限。但我依然决定发出来,让大家了解在STEEM平稳运行的背后,见证人们所做的付出。 这就是见证人们,让我们一起向他们致敬吧!
Image source: 1
This page is synchronized from the post: “不管黑猫白猫,能抓住BUG的就是好猫”, 从Bandwidth Limit Exceeded说起