我们的项目用的iris框架, 在接口里面开启go程后如果go程 panic 了, 则整个服务都会挂掉, 能不能写一个全局的 recover来监听go程的 panic
1.人要是不要脸了非要死磕就没办法了。
2.loadbalance就是用来解决服务器的高可用性的,不管其中一台除了什么问题,panic也好 OOM也好,网络不通也好,马上能有其他服务器能接管流量,这个是recover能解决的?
3.我是真不知道你在recover中还能释放数据库锁,不妨演示一下看看,怎么获取当前的数据库锁链接然后去unlock,别只贴别人的代码,还有什么wiki, 什么某某大神,k8s。请帖你自己的。
4.你说的对,panic是软件调用的,就像经典的dos中的软中断int 21h,但panic就是出现了不能继续运行下去的异常才会调用强行终止流程,如果能继续下去那应该使用error正常返回,请解释一下为啥不适用 error,而非要使用不那么优雅的panic. 然后再去找recover恢复,这种在性能上也是有损失的
5.panic触发的不稳定,是因为软件质量中存在隐患或者因为硬件故障,这种如果很容易触发出来那么loadbalance的确没什么鸟用,换一台机器也是一个德性。但是事实上能panic的事件基本上都是需要人为介入处理的而且有些是软件自身问题是不那么容易重现出来的(如果之前详细测试过业务流程有很好的覆盖率)。
6.你扯的2,3业务问题都可以用用error正常流程解决而不是使用panic+recover,1是严重错误这种正是我说的需要人工介入的panic.不管你是不是recover去打印什么log, 都无法解决。loadbalance解决的是难以发现的隐患导致的崩溃切换服务器,而不是你这样明显能查到的问题。
#32
更多评论
<a href="/user/polaris" title="@polaris">@polaris</a> 如果不考虑go程的话可以监听, 但是go程里面不知道咋监听...
#2