Golang应用程序应如何处理缺少的外部依赖项?当应用启动且找不到数据库时,应将数据持久保存在该数据库上,因为知道该状态下该应用无用,我应该对此应用感到恐慌吗?
否则,我可以无限地记录某些内容,打印到stderr或使用其他方法进行通知,但是我不确定何时选择每种方法。
无法访问外部网络服务的应用程序不应惊慌。这应该可以预期,因为网络往往会失败。我会包装错误并将其进一步传递。
请考虑以下情形。您有多个应用程序服务器连接到两个数据库服务器。您一次要升级一个数据库服务器。一台服务器关闭后,一半的应用程序服务器就会崩溃并崩溃。您升级第二台数据库服务器,现在每个应用程序服务器都消失了。相反,当数据库不可用时,只需通过发送HTTP状态500来报告错误,例如。如果您有负载均衡器,它将把请求传递给正在运行的应用程序服务器。当数据库服务器返回时,应用程序服务器将重新连接并继续工作。
在另一种情况下,您正在运行一个交互式应用程序,该应用程序处理数据库以创建报告。连接不可用。应用程序惊慌失事,崩溃了。从用户的角度来看,它看起来像一个错误。我希望收到一条消息,指出无法建立连接。
在标准库中,当内部资源不可用时,它会惊慌。参见template.Must。这意味着应用程序本身有问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句