DFINITY|ICPunks空投导致DFINITY网络堵塞事件回顾
事件时间线
2021-09-02 00:00 - 第一波NFT领取和倒计时开始。
2021-09-02 00:15 - 在查询调用中观察到边界节点的速率限制,这种模式随着空投开启事件的临近而继续增加。
2021-09-02 3:00 - 第二波NFT领取导致流量进一步增加,但由于参与者数量有限,因此更新量仍然很低。
2021-09-02 4:00 - NTF空投开启流量急剧增加,以38k req/s达到边界节点的峰值。子网pjljw最终完成率降至0.3块/秒
2021-09-02 4:05 - 观察到ICA仪表板在此期间无法加载。
2021-09-02 4:40 - 随着活动结束和项目展示售罄,流量逐渐减少。流量下降到 10k req/s,并随着时间的推移继续下降。
2021-09-02 4:45 - ICA仪表板恢复正常运行。
2021-09-02 4:45 - 子网pjljw恢复正常完成率。
概括
2021年9月2日星期四凌晨4点,ICPunks开启NFT空投,大量用户涌入领取,导致DFINITY网络堵塞。较早的高峰在2021-09-02 00:00 UTC 和 2021-09-02 3:00 UTC。2号零点第一波流量开始增加到子网pjljw 。
此流量稳步增加并开始达到边界节点上配置的速率限制。边界节点开始限制对子网上容器的请求。
这对项目的容器造成了影响(负责绝大多数的流量):
以及子网上的其他容器:
这样做的有效影响是,许多用户无法在网页上加载应用程序或与容器交互,因为这段时间内的大多数消息要么受到速率限制,要么被副本拒绝。许多用户反馈无法完全加载应用程序和领取他们的NFT。
在开启NFT空投的凌晨4:00,流量急剧增加,峰值超过38k 请求/秒。
在早期的波次中,副本和子网表现正常。在高峰期,大量更新流量涌入子网,从平时每秒18次到高峰时每秒超过1k次。
这导致最终确定率从大约 1 块/秒下降到略高于0.3 块/秒。
在此期间,观察到严重的入口消息节流,达到超过50条消息/秒的水平。
执行指令超过18亿次,执行需要大约 2.5 秒(有大量异常值)。
在高峰期,客户端(浏览器控制台日志)访问项目的资产容器,直接从DFINITY提供服务,显示从边界节点.ic0.app返回的大量错误代码500。它的前端需要加载许多资产才能完全发挥作用:这解释了为什么这么多用户除了不断重新加载页面之外什么都做不了。
问题原因
几个容器的高查询负载导致速率限制。高更新负载导致子网性能随后下降。这两个因素导致许多用户无法访问该项目的应用程序以及子网上的其他容器。
IC副本并未在接近理论最大速率的任何地方为实际用户流量提供服务。
不过子网pjljw继续处理查询和更新,尽管流量很高,但没有失败。边界节点也继续成功地为流量提供服务。速率限制保护运行良好,保护子网免受大量流量的影响,未经过滤的流量可能会导致子网副本的更多中断。
后续改进
•改进有关如何在IC上扩展去中心化应用程序的文档。
• 在边界节点上启用(符合标准)HTTP缓存并向开发人员传达最佳实践。
• 在块间隔内评估副本上的查询 API 调用结果缓存。
• 使用更多线程进行执行(目前我们使用 64 个内核中的1个进行单线程)。
• 负载测试并根据更现实的流量负载调整速率限制。
添加微信&加入社群&获取ICP一手资讯和资源
【我们的定位】 : 专注于原创价值内容输出的区块链自媒体平台 ;
【我们的准则】 :实时 价值 持续 分享;
【我们的内容】 : DFINITY生态资讯、小白工具大全、每日精选资讯、NFT热门游戏、Beta日记 等