網站不可用,全棧思維來搞定,再也不用找運維和開發

本文主要分享運維時的一種結構化思維,幫助大家提升問題定位能力和效率。

前言

這裏主要列舉了網站不可用時,可能出問題的點。實際場景中,不同系統的架構、環境、業務重心有很多差異,需要多實踐一些後,才能真正提升問題處理能力。

  • 問題排查和定位是循序漸進的,需要抽絲剝繭。但有兩種方式可以加速這個過程:
    • 如果有必要的報警,可以快速暴露某個層次的問題(比如服務器內存問題,可以快速找到異常節點,確定是服務器自身問題,還是可能下一跳服務的請求異常導致堆積等等)
    • 如果對系統非常熟悉,應急經驗豐富,大部分情況也能快速定位到問題。
  • 處理是多維度的(隔離或降級異常,擴容)。
    • 有條件最好馬上隔離現場、集羣中下掉異常機器,恢復可用;
    • 其次調整轉發配置,走新的可用的配置,比如因爲bug或部分異常,可以提供新的可用集羣的情況;
    • 再次做降級,審覈部分請求或用戶導致問題,將他們隔離或降級,如果有細粒度的干預措施最好(自己開發的api管理),如果沒有可以嘗試dns線路、nginx攔截url或cookie標識、緩存服務器設置黑名單等;

前端

主要採用Chrome DevTools分析前端情況

前端的異常首先要定位是前端代碼問題,還是和後端交互問題。前者需從前端開發角度排查問題,後者需要從運維、後端開發角度排查。(當然全棧工程師這些都是自己搞定)

  • 空白或加載中:
    • 打開查看console有否關鍵報錯,如有需定位前端問題
    • 無報錯情況,查看網絡請求有否報錯或等待;如有需進一步排查前後端網絡交互問題
    • 無任何報錯、網絡交互無報錯,溝通前端工程師,必要操作是否因BUG未正常發起網絡交互或渲染動作;
  • HTTP錯誤狀態頁
    • 查看network中錯誤請求的詳情,包括錯誤信息、請求地址、上下文、狀態碼、服務器地址、Cookie中的狀態或集羣等標識

前後端網絡交互

客戶端網絡設備

個人電腦
路由器
寬帶到期
防火牆(本機和防火牆)

DNS解析

是否正常到服務端IP、有否污染、多線路解析(客戶和你不同)

中間人

運營商交換機
骨幹網絡
跨運營商問題
地域和翻牆
網絡劫持、植入代碼(HTTPS)

服務端網關

雲平臺出網端口、ping
運營商線路
流量限制
安全規則

應用服務器

代理層/應用網關

nginx配置錯誤
nginx worker process
文件句柄過多、日誌log太大
目錄權限
upstream集羣個別錯誤
SLB流量超限、配置錯誤、轉發錯誤、後端異常、超時配置與業務不符

Web服務器

ping服務器端口
測試某個請求能否正常
tomcat最大併發數
某個服務器的CPU和JVM內存(死循環、大量GC、或複雜任務、或內存使用問題導致內存異常升高/佔滿)
線程池
數據庫連接池

其他服務器角色

緩存如Redis

CPU、內存、連接數、請求數、命中率

文件服務

網絡流量、請求數、攻擊

消息隊列如RocketMQ

網絡流量、生產/消費速率、死信、生產者/消費者隊列及堆積情況

註冊中心

註冊中心存活節點、心跳、在線的服務節點數

數據庫

慢SQL(查詢、大事務、鎖等待、磁盤)
數據庫連接數

其他問題

硬件吞吐量或可用性如磁盤、網卡,網絡抖動,安全攻擊,人工誤操作

如果有成熟的APM工具,一般已經把請求全鏈路的信息採集到位,可以直接看到發生錯誤的環節、關鍵信息,大大提升效率。所以如果你的公司還沒有,盡力往這個方向發展;如果有了,好好用起來,學學底層是怎麼實現的。


以上。感謝您的閱讀。

持續更新中:

  • 補充更多細節、處理方法
  • 補充更多案例
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章