继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

如何让一个系统跑的稳定

xpbob
关注TA
已关注
手记 152
粉丝 1.6万
获赞 380

系统上线以后,运维的就是主要问题,我们无法保证程序一直是启动的,虽然现在大部分程序都是集群的,宕机一台并不影响系统运行。例如三副本的程序,宕机一台不影响,但是如果不能快速启动,等到第二台,第三台宕机。程序终有不可用的时候。以下几个点可以加固稳定系统。

自动拉起程序

自动拉起程序有多重实现方式,最简单的就是利用systemd去拉起进程,保证程序在宕机后可以快速被拉起,也可以利用k8s或者是定期的脚步扫描都可以。大概流程如下

  1. 检测进程是否存活/端口是否存活
  2. 如果程序不正常提供服务,直接调用脚步或者kill -9
  3. 调用start脚步启动服务
  4. 定时执行上面步骤

这里需要注意的是进程启动和程序可用是两回事,例如进程夯死的情况,进程的pid一直是在的,但是不能很好的提供服务。这种情况一般是自己编写脚步来定制的,例如定时执行一个轻量级的访问,如果能按时返回,证明程序服务是可用的,如果说超时了,需要告警等机制保障。

探活告警

在有自动拉起程序后,探活告警也是需要有的,针对一些特定的情况,例如物理机的损坏,还有端口被占用等等,我们需要人工快速排查错误。端口冲突是遇到的一个场景,本来有systemd保证程序死亡后被拉起,但是有次一直没启动成功,最终原因是物理机启动了多个服务,一个端口和已经建立的连接的端口冲突,导致端口被占用,程序启动失败,这种意外情况如果没有告警机制,很难及时被发现,这个可以说探活的告警是真个意外的观察者,如果没有这种机制,只能依靠人肉去运维,或者调用方发现,一般这种情况都是事故了。
探活告警不可以太敏感,需要有一定的持续性,例如遇到网络抖动,正好认为程序挂掉了。这种时候例如发出信息,调用人力排查,最终结果可能不是想要的,所以探活的情况必须有持续性,例如持续2分钟等。起码是多次探测都是人为宕机的情况,这种才是真正需要人工介入的时候。

拒绝策略

程序的拒绝策略是为了防止自己被压垮的好手段,一般是策略都包含以下内容。

  1. 使用内存限制
  2. 调用频率限制
  3. 单次调用使用资源的限制
  4. 调用时长限制

基本第三个和第四个是最常见的,最简单的场景就是sql查询,如果一个写的非常不好的sql,多个表联合查询,返回数据不限制,很容易导致程序oom的,所以在单次调用做时间限制和资源限制,是一个比较好的方式去推进调用方优化自己的业务,毕竟大部分都是场景不合理或者交互不合理导致的。

指标监控

指标监控主要是用来做服务运行探测的,最大的作用是用来事后复盘。虽然有拒绝策略,但是策略总不能完美拒绝到各种情况,虽然单次的限制了,总量限制的比较少,也会压死程序。指标监控在这个方面就有很多的作用

  1. 查看历史值合理规划资源
  2. 查看进程挂掉前的各种状态
  3. 查看最后调用的情况
    有了这些数据就可以更好的完善拒绝策略带来的影响。
    而且有了监控,可以很好的调整服务的参数,例如线程数,java的gc相关的部分,访问的并发量等等。这些都可以不断的改良。

小结

  1. 自动拉起程序可以减少人为运维
  2. 探活告警可以更好的应对,拉起失败情况
  3. 拒绝策略可保证程序的稳定,不被调用压垮
  4. 指标监控可以晚睡拒绝的策略
打开App,阅读手记
2人推荐
发表评论
随时随地看视频慕课网APP