我們先說業務問題,該專案是乙個微服務專案,邏輯是a服務啟動後會把自己的乙個業務資料放到redis快取服務中,然後b服務的乙個介面就會去從redis快取服務去獲取這個資料然後和自己的資料庫業務資料關聯,處理返回給客戶端。
正常情況下我們的業務處理步驟。
## 連線redis伺服器獲取資料
## 開啟資料庫連線
## 查詢資料
## 關閉資料庫
## 記憶體業務處理
## 返回
但是當我們將我們加入工作單元然後將工作單元aop到介面層,我們的步驟就會改變。
## aop開啟資料庫連線
## 連線redis伺服器獲取資料
## 開啟資料庫連線
## 查詢資料
## 記憶體業務處理
## 返回
## aop關閉資料庫
這個時候如果我們的redis快取伺服器宕機了,好玩的事情就來了,我們批量設定的快取伺服器超時是5秒過期我們會從a服務的業務介面去拿資料,但是這個介面的業務併發量如果在每秒鐘2w,那麼從第乙個請求進來開啟資料庫連線,
到第乙個請求的資料庫連線被關閉,理想情況這裡要經過5+1+1,也就是14w個占用,但是資料庫連線是非常占用記憶體的,在還不到14w個連線的時候伺服器的記憶體和cpu就會被吃滿,滿了之後你的業務服務就會因為沒有資源使用而崩潰掉。
解決方案也比較簡單,正常我們使用的框架比如abp vnext,我們可以在介面定義預設不開啟工作單元,然後我們在業務部分手動去開。
那麼這個事情為什麼是細思極恐呢,因為我們正常微服務請求,採用aop開啟工作單元,我們業務部分請求多個串聯的伺服器介面,某一環節介面宕機,在加上我們的重試機制,這個業務時間是要超過7秒的,在高併發的請求下就會出問題
記一次線上快取問題
今天上線專案時,檢視乙個軟體列表,我的介面裡是findall,可是軟體列表裡沒有type欄位沒有出現,後來檢查發現 是線下softmodel裡type欄位沒更新過來,清完線下表快取,並用gii重新生成了下softmodel,然後再次上線。再次檢視線上該軟體列表,還是沒有type欄位,估計第一次檢視的...
記一次專案經驗 9
專案原計畫11月9日結項,期間專案團隊需要臨時支援現場問題,需要兩周。做了一次變革申請後在11月23日正常結項。專案團隊覆盤總結如下 研發管理 1 團隊成員齊心協力,有共同的明確的目標,團隊氛圍融洽,都很積極的參與討論優化需求及流程 2 本專案測試共測試四輪,僅出現28個bug,一方面是更加嚴格要求...
記一次專案經驗 6
專案進行第5周情況 1 專案成員之間的協作部分,專案經理需要嚴格安排好完成的時間節點,以及對接的時間節點,這樣大家有目的性的計畫。讓成員自己來考慮也是乙個解決方案,但專案經理需要跟蹤實際的效果。2 還沒有根據敏捷方式來做,沒有按照每天的站會來安排任務和計畫。目前只是安排周計畫,周計畫中有問題及時反饋...