找回密码
 立即注册

QQ登录

只需一步,快速开始

  • QQ空间
  • 回复
  • 收藏

go-ipfs 0.4.21发布

关键错误修复,实验性TLS1.3支持,减少内存使用,base32 CIDv1 CID等等!



亮点
我们很高兴宣布go-ipfs 0.4.21发布。此版本有一些关键的错误修复和一些新功能,因此每个用户都应升级。(本文由IPFS中国社区编译)
关键错误修复:
打开文件描述符太多/同行太多(#6237)。
同时添加多个文件不起作用(#6254)。
CPU利用率峰值然后保持在100%(#5613)。
主要特点:
实验性TLS1.3支持(最终取代secio)。
OpenSSL支持SECIO握手(性能改进)。
重要说明:此版本修复了我们的安全传输中可能会从通道中丢弃数据的错误。注意:对于第三方攻击者,这个问题既不影响隐私,也不影响数据的完整性。只有向我们发送数据的对等方才能触发此错误。
!所有用户必须升级。!我们打算在此版本中引入一个功能,不幸的是,它可靠地触发了这个bug。为了避免对网络进行分区,我们决定将此功能推迟一两个版本。
具体来说,我们将提供至少一个月的升级期。之后,我们将开始测试部署建议更改的影响。
如果您正在运行主线go-ipfs,请尽快升级。如果您正在构建单独的应用程序或使用分叉的go-ipfs,请确保将github.com/libp2p/go-libp2p-secio升级到至少v0.0.3。

错误修复和增强功能
此版本包含许多关键错误修复和性能/可靠性增强功能。
添加多个文件时出错
最后一个版本打破了简单命令ipfs add file1 file2。事实证明,我们只是缺少一个测试用例。现在已经解决了这两个问题(错误和缺少测试用例)。
SECIO
如上所述,我们修复了一个错误,该错误可能导致数据在读取时从SECIO连接中删除。具体来说,这发生在:
1.读缓冲区的容量大于长度。
2.远程对等体在单个secio“帧”中发送的长度超过了长度但小于容量。在这种情况下,我们将读取缓冲区填充到其容量而不是其长度。
打开文件太多,同行太多等
Go-ipfs在累积太多连接时自动关闭最不实用的连接。不幸的是,一些中继连接阻塞Close()了整个过程。
失控的CPU使用率
许多用户注意到此版本失控的CPU使用率。对于DHT如何处理提供者记录(记录哪些同伴拥有哪些内容的记录),这是一个长期存在的问题:
1.在提供者集完全清空之前,它不会删除内容的提供者记录。
2.每当我们更新提供者集时,它就会将每个提供者记录加载到内存中。
结合起来,这两个问题正在破坏提供者记录缓存,迫使DHT重复加载和丢弃提供者记录。
更可靠的连接管理
当ip-ipfs资源不足时,Go-ipfs有一个名为“连接管理器”的子系统来关闭最不实用的连接。
不幸的是,其他IPFS子系统可能会在连接管理器之前了解连接。以前,如果某个IPFS子系统在连接管理器了解连接之前尝试将连接标记为有用,则连接管理器将丢弃此信息。我们认为这导致#6271。它不再那样做了。
改进的Bitswap连接管理
Bitswap现在使用连接管理器将所有下载块的对等体标记为重要(下载时)。此前,它不仅标志着从同行它正在下载块。
减少内存使用量
此版本中最显著的内存减少来自修复连接关闭。但是,我们进行了一些额外的改进:
Bitswap的“工作队列”不再记得它无限期看到的每个同伴。
peertore现在实现协议名称。
每个对等的goroutine计数已减少。
DHT现在通过汇集缓冲的写入器并在不主动使用它们时将它们返回到池中,从而减少浪费空闲对等体上较少的内存。
增加文件描述符限制
默认文件描述符限制已提升到8192(从2048开始)。不太幸运的是,当go-ipfs用完文件描述符并且使用大量文件描述符时,它的行为很差。
幸运的是,大多数现代内核可以毫无困难地处理数千个文件描述符。
减少连接握手延迟
Libp2p现在通过在远程对等体响应初始握手消息之前开始协议协商来启动连接,从而减少了几次往返。
在最佳情况下(当目标对等体说出我们的首选协议时),这会将握手往返次数从6减少到4(包括TCP握手)。
命令
此版本不会带来任何新命令,但会引入一些更改、错误修正和增强功能。本节很难完成,但它列出了最显着的变化。
请注意:此版本还引入了一些重大更改。
[DEPRECATION] URLStore命令已弃用
ipfs urlstore现在不推荐使用实验命令。请ipfs add --nocopy URL改用。
[BREAKING] DHT命令Base64编码值
响应ipfs dht get命令时,守护程序现在使用base64对返回的值进行编码。该ipfs命令将在将该值返回给用户之前自动解码该值,因此此更改应仅影响直接使用HTTP API的那些值。
不幸的是,这种更改是必要的,因为DHT记录是任意二进制blob,不能直接存储在JSON字符串中。
[BREAKING] Base32编码的v1 CID默认情况下
js-ipfs和go-ipfs现在默认使用base32编码CIDv1 CID,而不是base58。不幸的是,base58区分大小写并且与浏览器不兼容(参见#4143)。
人类可读数字
ipfs bitswap stat和ipfs object stat命令现在支持--humanize与人类可读的单元(GIB,MIB等)格式的数字标记。
改进了错误
此版本改进了两种类型的错误:
1.采用路径/多路径的命令现在在错误消息解析时无法包含路径/ multiaddr。
2.ipfs swarm connect 现在返回一个详细的错误,描述了尝试了哪些地址以及拨号失败的原因。
Ping改进
ping命令已收到一些小的改进和修复:
1.现在,它在退出时以非零退出状态退出。
2.如果我们有一个僵尸但是没有功能连接到对等端被ping(#6298),它就不会成功ping成功。
3.它现在打印出取消时的平均延迟^C(如unix ping命令)。
改进的帮助文本
Go-ipfs现在可以智能地包装帮助文本,以便于阅读。在80字符宽的终端上,
之前







功能
此版本主要是一个错误修复版本,但它仍然包含libp2p的两个不错的功能。
实验性TLS1.3支持
Go-ipfs现在具有实验性的TLS1.3支持。目前,libp2p(IPFS的网络库)使用我们称为SECIO的自定义TLS协议。然而,关于定制安全传输的传统观点是“just don’t”,所以我们正在努力用TLS1.3替换它。
要默认选择此协议,请设置Experimental.PreferTLSconfig变量:
> ipfs config --bool Experimental.PreferTLS true
为什么TLS1.3而不是X(噪音等)?
1.Libp2p允许协商传输,因此没有理由不为libp2p添加噪声支持。
2.TLS具有广泛的语言支持,这使得为新语言实现libp2p变得更加简单。
OpenSSL支持
Go-ipfs现在(可选)可以使用OpenSSL支持构建,以便在建立连接时提高性能。这主要用于每秒接收多个入站连接的节点。
要启用openssl支持,请使用以下命令重建go-ipfs:
> make build GOFLAGS=-tags=openssl
CoreAPI
CoreAPI重构仍在进行中,我们在可用的ipfs-as-a-library构造函数方面取得了重大进展。具体来说,我们已经集成了fx依赖注入系统,现在正在努力清理我们的初始化逻辑。这样可以更容易地将新服务注入到go-ipfs进程中,而不会破坏核心内部。
构建:GOCC环境变量
构建系统现在使用GOCC环境变量,允许在构建期间使用特定的go版本。
非常感谢大家让这个版本成为可能
向参与此版本的所有贡献者致敬(包括对ipld,libp2p和多格式的贡献):



想要贡献?
您是否愿意为IPFS项目做出贡献而不知道如何做?好吧,有几个地方你可以开始:
检查go-ipfs repo中help wanted标签的问题
加入IPFS All Hands,自我介绍并告诉我们您想要贡献的地方-https://github.com/ipfs/team-mgmt/#weekly-ipfs-all-hands
用IPFS攻击并告诉我们你做了什么!All Hands电话也是演示的完美场所,加入并向我们展示您的建设
加入http://discuss.ipfs.io/的讨论,帮助用户找到答案。
加入Go Core开发团队每周同步并成为行动的一部分!
你有问题吗?
有关IPFS的问题、工作原理以及使用它可以做些什么的最好的地方是discuss.ipfs.io。我们也可以在#ipfsFreenode 的频道上找到。

本文由IPFS中国社区编译
作者:Molly Mackinlay
原文链接:https://blog.ipfs.io/93-go-ipfs-0.4.21

yo4zm0wkkp5.png

yo4zm0wkkp5.png
回复

使用道具 举报

说点什么

您需要登录后才可以回帖 登录 | 立即注册