Cowsay开发日志

最后再纠结一下Tendermint。读了Informal Systems一篇分析它的小短文以及一些博客。 我最后在Tendermint文档里找到的提交后超时大概是一种工程优化,并不是协议保证一致性所必要的。在这之前我的理解基本是没错的。在主复制是好人的快速路径上,大家都没有超时,设计上也都差不多。在大家决定切换主复制的慢速路径上,PBFT是立刻交换大量信息,迅速将参与者都带到最新的视角;H...

低延迟字符串驻留(interning)

没有什么创新,就是读stringleton的介绍文章的时候在想把经典的低延迟技术用在字符串驻留上面,会不会还没人做过。 字符串驻留的接口一般是输入一个字符串,如果它已经被驻留过了(或者说,曾经有跟它完全一样的字符串被驻留过),就返回那个以前驻留的字符串地址;否则记录它的地址并原样返回。 显然,「如果它已经被驻留过」是一次读共享可变状态,「记录它的地址」是一次写共享可变状态,因此需要给状态...

基于文件内容隐式去重而不是显式约定存放规则的系统包管理器

依赖地狱。不同的包在摆放依赖的时候要遵守同一套规矩(即共享系统目录),所以它们的行为对对方是可见的可能产生冲突。 自持(self-contained)打包。Vendor(这怎么翻译)全部的依赖。极端做法如Go,全静态链接的编译。大部分厂商会以单独文件的形式存放在可执行入口的路径附近。造成很多重复的通用依赖(如Electron)。比消耗存储更糟糕的是消耗内存:操作系统无法获知不同软件的同一(...

又狂写了几天代码。还有文档。 这次的短期目标是很明确的:写出一个让自己满意的HotStuff。满意的定义可能有待商榷,但是一个在primary上都跑不满100%CPU的实现一定是不满意的。 至于我现在是不是做这个的时候,嘛我只能尽量让它是。比方说,把中期目标制定为「使各种各样的BFT协议可以支持PB级别状态大小的状态机」,那么先写出各种各样的BFT就是很有必要的了。 总之,被海量的工程...

狂写了几天PBFT。 虽然再写一遍PBFT是所有编程工作中最没意义的一种了,但是在当下这个很久没动手写过代码,也丧失了很多能写出代码的信心的节骨眼,写一个让自己满意的BFT协议实验平台大概是恢复信心最好的选择。 打破心魔还是有必要的,就算已经焦头烂额了。 不过我也不敢说这次写的代码就比以往所有设计都要好。这次的代码至今都没有什么大规模的范型,让我感到有点奇怪。但是我已经不会因为这个而怀...