时政
财经
科技
虚拟货币
其他
登录
#错误处理
关注
Yachen Liu
1周前
我看到不少人在指责 Cloudflare 使用 Rust 的 unwrap() 不合理,在我看来,这种说法并不成立。问题的实质在于:当输入数据超出开发者的预期时,怎样进行处理。路径无非以下三种: 1. 最糟糕的情况:使用了 C 这类 unsafe 语言,且缺乏必要的边界检查与防护,导致缓冲区溢出、内存被写脏,进而引发难以复现和排查的崩溃或未定义行为,最终可能需要花费大量时间才能定位根因。 2. 继续运行但吞掉错误:在检测到异常数据后选择忽略或降级处理,保持进程继续运行。这种方式是否可行,高度依赖于业务对该数据的正确性和完整性的依赖程度,并非普适解。 3. 显式上报并中止:在发现不符合预期的状态时,主动触发错误并终止进程(例如 Rust 中的 unwrap() 触发 panic,或其他语言中抛出未捕获异常),让问题以响亮的方式暴露出来,便于快速定位。 当系统遭遇此类异常时,可选策略其实就围绕这些模式,并不存在其他解法。因此,无论是 unwrap() 导致的 panic,还是其他语言中未捕获异常引发的崩溃,本质上都是进程终止这一结果,只是表现形式和可观测性不同。 (从系统架构层面,还可以实现配置自动回滚等辅助系统解决,但是这依然依赖于进程主动中止再去补救) 本次事件中,Cloudflare 真正暴露出的短板在于:对于这类关键服务上的 panic 级别错误,缺乏直接的告警与可观测能力。按理说,这种核心组件一旦发生 panic,应当立刻触发高优先级告警,并将完整调用栈和上下文第一时间推送到负责工程师面前,使其能够在数分钟内精准锁定问题代码路径。 然而,从事后披露的处理流程来看,他们在排查过程中先投入精力去确认是否遭遇攻击,再层层下钻才逐步接近真正根因。这说明在监控与告警体系上,对类似 panic 这种“程序自己已经明确喊出不正常”的信号,Cloudflare 并没有建立足够直接、可信、可操作的响应链路,而这才是这次事故中真正的设计缺失。
#CloudFlare
#Rust unwrap()
#错误处理
#panic告警缺失
#系统可观测性
分享
评论 0
0
干物纯今天吃什么
1周前
cf这里及时panic显然帮助定位问题了,行号一打就挂掉比强行容忍更好,既然约束了配置文件的规则,那规则不合法挂掉才是最简单的,不然会有处理不完的错误可能性。临时扩容如果OOM怎么办?忽略部分规则结果造成了大规模的网络攻击怎么办?返回Result不是万能的,上游拿到 Result 能怎么办?不还是5xx。 真正的问题是没有配置文件验证/发布/升级/异常回滚的自动化生命周期管理。 有人喷rust全是unwrap,访问越界unwrap,数值溢出unwrap。难道这些情况静默出错就会更好吗?其实这种全局定长数组越界访问的bug pattern在传统语言里比比皆是,不过常常以CVE的方式体现了😀
#配置管理
#错误处理
#Rust
#unwrap
#自动化生命周期管理
分享
评论 0
0
Mr Panda
4周前
当年我干后端的那点小心思 500: 卧槽,肯定是我后端服务异常了 —— 赶紧看日志、重启服务、开始自我怀疑。 502: 完蛋,不是服务器挂了就是内网断了,先把锅甩给运维 —— 群里刷“在吗?生产掉了”。 404: 都是前端的错 —— 要么路由写错、要么静态文件没部署、要么我点了错误的链接。 200: 天下大同 —— 一切正常,继续写代码、喝咖啡。 201: 干得漂亮,资源创建成功 —— 数据进库了,给自己点个赞。 301: 永久搬家了 —— URL 永久重定向,SEO 和老链接要跟着迁移。 302: 临时搬家 —— 临时重定向,别把它当成永久改变。 400: 请求哪壶不开提哪壶 —— 参数不对、JSON 格式错,前端先检验输入。 401: 你没登录吧? —— 授权失败,先拿 token 或去登录。 403: 不许动! —— 没权限,别想越权访问。 408: 等到花儿都谢了 —— 请求超时,网络或服务太慢,重试策略上线。 429: 你别刷了! —— 请求过多被限流,降频或加速器请上线。 503: 服务器请假中 —— 服务暂时不可用,可能在维护或被流量压垮。 504: 网关也累了 —— 下游没响应,检查慢查询或依赖服务。
#后端
#HTTP状态码
#服务器
#错误处理
#网络
分享
评论 0
0
ruanyf
1个月前
软件的错误处理有不同的方式。 Java、JavaScript 和 Python 是抛出异常,C 语言和 Go 语言是返回一个错误值。 我一直想知道,哪种方式更好? 前不久,我读到一篇多年前的文章,明确提出抛出异常好于返回状态码。 他的理由很有说服力,文章好像还没有中译,我就翻译出来了。
#编程
#错误处理
#异常
#状态码
#技术选型
分享
评论 0
0
九原客
1个月前
对的对的,我发现Claude Code 特别爱编写防御性代码。 而我是异常神教信徒,秉持不做异常处理,错误就要抛出的观点。 Error early Error fast
#Claude Code
#防御性代码
#异常神教
#错误处理
#Error early Error fast
分享
评论 0
0
Mr Panda
5个月前
想到本来这些代码应该由自己思考, 一字一字的敲出来, 现在都扔给ai 来搞定, 我就越来越懒了, 什么状态管理、路由设置、错误处理, 我已经没有任何心情自己写代码
#代码
#AI
#状态管理
#路由设置
#错误处理
#懒惰
分享
评论 0
0
个人主页
通知
我的投稿
我的关注
我的拉黑
我的评论
我的点赞