一不小心又把應用發掛了,覆盤一下這十幾分鐘的黑暗時刻

晚上日常發佈,無奈將應用發掛十幾分鍾,覆盤一下,聊聊一下一些感悟。

晚上發佈是一個渠道應用,主要作用爲是去支付機構端進行銀行卡扣款。

由於這個過程需要報文信息需啊喲在互聯網中傳輸,所以需要進行相應的加簽處理。

這裏的銀行卡等敏感信息需要採用 AES 加密,由於用於加密的私鑰長度大於128位,JDK 自帶的加密類將會拋出

java.security.InvalidKeyException: Illegal key size

從而導致加密失敗。

加密工具類內部吃掉該異常,返回一個空字符串。然後我們上送給支付機構後,對方返回解密失敗,從而導致此次交易失敗。

解決辦法很簡單,更換如下目錄的這兩個 jar 包 local_policy.jar, US_export_policy.jar 。

${java_home}/jre/lib/security

解決辦法

上面說過只要更換這兩個 jar 包就可以就解決問題,但是生產環境技術人員是沒有權限,只能通過郵件審批,才能讓運維人員去替換。

這個過程中涉及人員溝通,操作,快一點可能也要半小時。這讓應用掛半小時,明天肯定得背個黑鍋,肯定不行,得另想一個辦法。

馬上回滾應用,那也沒辦法,問題不是出在發佈的應用上,而是 JDK 上。

有了,我們機器 Java 命令調用的是 JDK8 的路徑,那我只要寫死 java 命令絕對路徑,就可以使用 JDK7 的路徑,這樣交易就可以正常進行。

想到了辦法,立刻開幹,替換了啓動腳本的中 java 命令,成功將應用啓動,交易運行也一切正常。

這時我們就可以慢慢來了,發送申請郵件,讓運維人員替換 jar 包,然後再重新將之前寫死絕對路徑改回來,重新啓動。

聊聊感想

這個問題其實在之前上線之處已經注意到了,當時我們使用 JDK1.7 ,上線之前已經更換了這兩個包。但是前一段時間我們更換默認了 JDK,更換成 JDK8,該 JDK 沒有更換這兩個包,於是就炸了。

覆盤一下今天的問題,現在回想,測試過程中,其實碰到過這個問題。但是當時我並沒有引起重視,因爲上次測試環境也更換過 JDK7 這兩個 jar 包。所以我片面的認爲該問題是公司鑰配置的問題,所以就沒有細查,最終導致該問題被帶到了生產。

所以測試過程中,發生小問題,一定要引起重視,也不要過分自信認爲都是小事,沒什麼影響。

剛發生這個問題的時候,說實話內心很慌,畢竟所有交易都會被阻塞。幸好這個問題也不是第一次碰到,很快就能想到解決辦法。

但是如果是第一次碰到這類問題,根本沒有經驗,短時間內想不到解決辦法咋辦?

當然馬上求助周圍的同事,並跟自己的 Leader 反饋下這個問題。大家一起集思廣益,解決這個問題。

不要想着自己死扛這個問題,自己一個人沒思路的解決問題,很耽誤時間的。

之前有個同事,生產出現問題,就喜歡一個人解決。但是如果你有辦法解決,那也沒問題。怕就怕這個同事不反饋,一個人夯吃夯吃在解決,到頭來還是沒解決。

這樣就有拖延問題,很有可能就會小問題就會升級爲大問題。說實話,這樣說不準會讓你的 Leader 反感。

好了,不知不覺,就寫 1000 多字,希望大家有一些幫助。

一不小心又把應用發掛了,覆盤一下這十幾分鐘的黑暗時刻




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章