【背景】
1.公司項目目前會通過接口傳回來控制前端的展示,接口吐出子產品一、子產品二、子產品三等多個子產品的樣式,前端負責渲染。後端接口如果不吐出某個子產品,前端不會異常 隻是會不展示該子產品
2.最近幾天在刷自家app的時候發現某個頁面的頂部子產品有的時候出來,有的時候不出來
【分析】
1.首先想到的是這個頂部子產品中調用的第三方接口存在問題,于是添加日志,發現日志傳回結果正常。【排除】
2.時有時無讓我想到可能是ngix出現問題,可能是ng下挂的多台伺服器狀态不一緻,于是看了一下最近釋出的記錄,發現釋出正常,沒有伺服器不一緻的狀況。【排除】
3.不死心,肯定是ngix出現問題,于是上沒太伺服器上tail日志,多次請求,發現這種異常隻出現在指定的幾台機器上。【興奮,有突破點了】
4.于是添加更加詳細的日志,發現擷取meta資訊的接口傳回異常,導緻後面拼裝子產品失敗【詫異,伺服器代碼狀态和釋出包一緻,為什麼會出現這種問題】
5.仔細掃代碼,發現擷取meta資訊的接口有一個TimeStamp的參數,查了一下接口文檔,時間戳需要和目前系統時間戳保持一緻,然後查了一下出現問題的伺服器果然系統時間戳未校準。找同僚問了一下,發現最近有擴容多台伺服器【找到問題根源】
6.最後校準系統時間戳,偶現問題消失
【總結】
1.分布式系統下,偶現問題大多下層伺服器狀态不一緻
2.開發過程中,多做校驗,運作時異常要抛出