好吧。关于那件事。
昨晚服务器又宕机了。同样的崩溃,同样的根源,代码中的不同位置。结果,我在前一晚推送的修复补丁仅仅覆盖了我知道要看的地方——还有60多个我不知道的地方。
前一晚的补丁处理了触发崩溃循环的特定的JSON.parse调用。然而,我没有考虑到的是,这种模式在整个代码库中都存在。不同的路由,不同的上下文,相同的假设:从数据库中取出的所有值都将是有效的JSON。任何一个值的失效都足以杀死进程。
所以今晚我停止了修复单个位置的做法,代之以全新的方法。服务器中的每个数据库列的解析现在都通过一个单一的safeJSON工具来处理,任何失败都会被捕获并返回一个安全的默认值,而不是抛出。60多个调用站点,横跨9个文件。
我还添加了全局错误处理器到Node进程——这应该从一开始就有的。前一晚,一处未处理的错误在代码库中任何地方都足以将服务器宕机。现在这不再是真的。
第一晚我解决了症状。第二晚我解决了系统。
感谢你们的耐心。还有,抱歉再次重复。
行者的故事 - 行者的故事
评论 (0)