关于 cf 爆炸
今天晚上 (2025-11-18), 我本来还在打 osu, 但是在差不多晚上 7 点半的时候突然游戏就连不上去了, 转成了离线模式.
本来还以为是我节点的问题, 因为之前上网冲浪的时候, 某些网站的证书会被替换成某域名供应商的, 导致某些网站因证书错误加载失败. 最后查出来是代理节点的问题. 很吓人, 我的浏览器开了 DoH (DNS over HTTPS), DNS 请求通过 HTTPS 进行加密传输, 按理来说是几乎不可能被劫持 DNS 的, 莫非攻击者还能拿到 Cloudflare DNS 的 TLS 证书不成. (也有可能是系统被注入攻击者的 CA 证书了, 有些大公司为了监控员工可能就会这么做)
但是我更换另一个代理供应商之后这个问题就消失了. 如果说这都可以被随意更改的话, 那是否也可以理解成你的数据在别人眼里就是在裸奔?
这很恐怖, 我的朋友.
如果你使用 Firefox 系的浏览器的话, 你可以在设置里的 "隐私和安全" 选项里找到 DoH 的设置, 如下图: (需要注意的是, 某些地区会屏蔽 CF 的 DNS, 改了之后就上不了网了, 可以自己再选一个能用的供应商)

咳咳, 到哪了. 对, osu. 变成下面这样了, 第一次见到 osu 这么严重的崩溃.

跟他一起崩溃的还有 ChatGPT, 虽然我个人对于 AI 是没有什么偏见的 (但是 Anthropic 似乎对我们有偏见), 一般几个 AI 平台换着用, ChatGPT, Gemini, grok (说起 grok, 我总是把他打成 gork 然后进到某个奇奇怪怪的网页) 等. 但是有些问题不适合问某些 AI, 之前 Gemini 就经常拒绝回答我的问题. 于是到后面 ChatGPT 就用的比较多了.
说起 AI, 这个网站的 AI 搜索功能咕了已经不知道多久了, 主要还是不知道放在哪比较好. 进度的话, 还没开始 (不说的话还真没想起来).
说回 Cloudflare.
Cloudflare 崩溃的时间线可以在 cloudflarestatus.com 找到, 具体的原因在他的 Blog 里有写.
我也大致的看了一下, 主要的原因是数据库权限配置错误, 导致 "feature file" 文件大小翻倍.

但是代理服务的内存是预分配的, 最多只有 200 features. 并且, 在代码里并没有处理可能导致的错误, 直接使用 .unwrap() 来展开 Result.

在 Rust 中, 错误并没有像其他的一些语言一样, 有专门的错误传递通道, 比如说 Python, TypeScript 等使用 try ... catch ... 来处理错误, 函数的返回值与错误的传递通道相互分离. Rust 里没有这种通道, 所有的错误都需要和返回值一起向上传递, Result 就是一个枚举的包装, 你拆开这个包装, 他可能是你期望的函数返回值, 也可能是一个错误.
这就是 Rust 的错误处理机制, 强制要求你处理所有可能的错误, 但是如果我不想处理怎么办呢? 出于易用性考虑, Rust 也有放弃处理这个错误的方法, 直接展开 Result, 也就是上面图片里的那行 .unwrap(). 那么代价呢? 放弃处理错误的话, 也就意味着你不能让程序遇到可能出现错误的情况, 如果遇到了就会直接触发 "panic", 导致程序崩溃.
Rust 的这种错误处理机制个人觉得就是某些情况下的最优解 (好像是借鉴了一些函数式编程语言), 强制要求你处理所有可能的错误, 也就间接性的强制你处理了程序里所有可能的分支, 好处是什么? 几乎不会出现意料之外的情况 (为什么说几乎? 万一有电磁辐射影响导致内存中某个关键的电平被翻转了呢?). 写 Rust 乱用 .unwrap() 还不如不用 Rust, 虽然我也爱用. 但是某些时候是真的折磨, 比如说解析 JSON.
说起 panic, Linux kernel 也会 panic, 之前遇到过几次, 在 Linux 内核遇到不可恢复的错误的时候就会触发. 在 panic 之后才知道我还有驱动没装.
除开这个问题之外, 还有一个很重要的问题, DNS. 因为这次的崩溃太底层了, 导致 CF 的 dashboard 也崩溃了, 一般来说想要接入 CF 的服务, 需要先把自己域名的 DNS 接入 CF 才行, 但是这次的崩溃导致 dashboard 也没了, 就算你想要放弃 CF, 用自己的服务器, 但是 DNS 的修改权限还在 CF 那里, 登不上 dashboard 就连最简单的放弃 CF 都做不到了... 如果 dashboard 还活着的话, 情况至少也不会像现在这么严重. (代码耦合程度太高了?)
这么说呢, CF 出现这种问题确实不应该, 毕竟这么大的服务, CF 一崩, 几乎半个互联网就瘫痪了, 但是这次却直接崩了三个小时. 虽然感觉最近各家都在崩, 但是这么严重的崩溃也只有 CF 一个人了, CEO 还出来公开道歉, 不知道又要陪多少了. CF 要是陪倒了, 我还上哪去白嫖 啊, 不对, 享受这样高性价比的服务.

说起来, 之前 CF 还因为在 dashboard 里乱用 useEffect, 导致自己被打崩了. useEffect 可能关联到一个死循环了, 导致登录到 dash.cloudflare.com 的人"被迫" DDOS 了 CF 自己. 虽然我之前学 React 的时候用 useEffect 把自己的浏览器卡住了. 不知道是不是 CF 导致的, 现在 React 都不让随便用 useEffect 了, 那些代码检查规则在某些情况下看到你用 useEffect 会直接报错, 让你换个方式用...
最近比较忙, 更新频率可能会稍微降低一点, 别催, 催也没用.
想起我只是个 fw 一切问题也就迎刃而解了

趁着双十一, 买了条新的耳机, 猛猛听了几天, 现在戴着耳机的时候就能听到耳鸣的声音了, HiFi 的尽头果然是助听器. WHO (世界卫生组织) 的推荐是每周听音在 80dB 以上的时间最多 40 小时, 当然这也包括了你日常生活中的声音, 并且这是在不损失听力的情况下的最大建议 (极端情况). 并且听觉细胞是不会再生的, 聋了那就是真的聋了.
最后, 在吐槽一下水月雨的 aria2 耳机, 掉漆真的太严重了, 我的那条现在已经几乎不能看了. (当然, 换耳机的主要原因还是因为之前在清理耳机的时候, 顺带清理了一下导管里的调音滤纸, 然后他就偏音了 🫠)