Debug龍爪手(3)

Yotlin
Parenting 數位研發
Jun 13, 2022

前端:

一定要先確認device和使用的browser,把你遇到的問題打在google上,很可能後面就會接safari出來。

通常可以在f12看到紅字,如果你很確定不是你的code的問題,要再往gtm或是其他第三方動態載入的js去找問題。

最好要用無痕或是手動清cookie也試試看。因為我們有走cloudflare,所以也有機會是cloudflare問題,可以上去看機器ip,去改一下本機etc/hosts ,直接指向機器,跳過cloudflare。

排除gtm方式:搜gpt,封鎖他

後端:

先去elk看log,如果沒有LOG,可以加一些debug參數,只有吃到某個參數的人會在頁面上輸出sesson或是data,還有設斷點,或是直接倒資料重現問題,就看哪個比較快,其他因為我們有用laravel和一些套件,有時候也要注意一下去改vendor的程式看看狀況,在vscode搜尋時,要記得把右下那個 — 拿掉,才會去搜git ingrone的檔案。

資料庫:

通常在ELK也會看到log,連線失敗,執行過久,都沒有的話要看看是不是有用到讀寫分離,要去看一下slave有沒有複寫延遲,也可以去問問看infra有沒有看到slowquery。

也可以自己查看

可以自己再篩選db

redis cache :

redis有機會掛掉,無法連線。平常更新程式時,也很容易忘記要清cache去測試,因為有機會你上完程式會正常,是因為還吃到前面的cache。另外就是cache有機會會滿,如果滿了,就算你是寫cache forever,也有機會被擠掉,一定要考慮到這種情境。

還有一個要注意的問題,cache失效時,或是cache的內容失效要重新寫入時,要小心可能會有多點觸發的問題,有可能會同時一堆人在做寫入cache,或是最終的cache不是最新的狀況,可以用cache lock來做補強 ex:重取會失效的token。

redis cache+資料庫:

在讀寫分離下,在write寫入資料,然後清除cache,但是卻從read補cache,會有機會踩到複寫延遲問題。

上面提到的cache多點觸發的案例,也會發生在db回補cache的情況上,假設sql無法瞬間完成,那很有機會一堆人衝進來同時再做db回補cache的動作,最終可能會整個塞車,無法消化,如果是這類型的cache,也可以用cache lock補強,或是要注意不該讓cache失效,透過排程來回補

cdn cache:

cloudflare的cdn有幾個東西要注意,如果是不存在的檔案,他會cache成空白內容(和設定有關)。

client cache:

靜態檔未換檔名,在不特別設定cache control的情況下有機會走到client cache,一般我們在開發時會開者no cache,很容易會忘了有clinet cache這件事,css js如果有更動,最好要換檔名或加上?版號,也要注意是不是上版號就有用,因為還有上面提到的cdn cache。

網路 :

重複請求是很平常的事。

確認一下你vpn狀況,vpn也是會壞的。

有時候在公司模擬不出狀況,可以試著用自己的4g網路看看有沒有新天地。

設備故障:

走雲端一樣有機會機器硬體故障,不過這邊還沒遇到。

結論:應該保持悲觀的心態,什麼都有可能壞,平常設計就要注意了。

--

--

Yotlin
Parenting 數位研發

22年以上 Web 全端工程師經驗,目前任職於親子天下數位研發中心技術部,帶領團隊共同成長