摘要:這是一個關(guān)于的故事前奏記錄移動設(shè)備在移動開發(fā)中應(yīng)該是很常見的操作,一般的流程是移動設(shè)備在應(yīng)用商店中下載后打開,這時客戶端程序會將獲取設(shè)備信息并提交到服務(wù)器端接口入庫。
這是一個關(guān)于mysql的故事
前奏:
記錄移動設(shè)備id在移動開發(fā)中應(yīng)該是很常見的操作,一般的流程是:移動設(shè)備在應(yīng)用商店中下載app后打開,這時客戶端程序會將獲取設(shè)備信息并提交到服務(wù)器端接口入庫。但是由于XX原因我們需要在這之前再加一個同樣的請求,也就是在這之前有可能已經(jīng)寫入數(shù)據(jù)庫了,但是還要再走一遍相同的邏輯。
癥狀:
當(dāng)我寫好程序交由客戶端同學(xué)去測試的時候,不可思議的事情發(fā)生了:有大概20%的概率會報錯“Duplicate entry XXX”(此處省去30字),然后客戶端同學(xué)還反映說如果兩個請求間隔1秒鐘就沒問題。
分析
我看完代碼后發(fā)現(xiàn)邏輯是這樣的:model文件里首先判斷設(shè)備id是否存在,不存在則寫入。結(jié)合之前的反饋我斷定:第一次寫入成功且第二次判斷時為空的時候,再寫入的時候數(shù)據(jù)庫里已經(jīng)有數(shù)據(jù)了。運維同學(xué)說服務(wù)器mysql是讀寫分離的,也就是說出現(xiàn)這種問題的原因是:第一次訪問服務(wù)器時如果設(shè)備id不存在(slave)則寫入master,這時master開始向slave同步,第二次訪問服務(wù)器時如果之前的同步完成了則不會二次寫入,如果同步?jīng)]有完成則會第二次寫入master,這時就報錯了。
解決
1.既然客戶端同學(xué)說延遲1秒就ok了淡然可以這樣干,但是這個時間其實和同步時間相關(guān)的,不一定是這個數(shù)字,有一定的風(fēng)險,所以不建議采納,但是救急是可以的。
2.我的方案是:第一次寫入的時候?qū)?dāng)前的設(shè)備id保存在memcache中,第二次訪問的時候直接判定memcache中是否存在,保存時間的話,設(shè)置個10秒鐘基本就夠了。
結(jié)語:
其實這種連續(xù)寫入同一數(shù)據(jù)到同一表中的需求不是很多,但是業(yè)務(wù)需求千奇百怪,熟悉業(yè)務(wù)的同時也要熟悉生產(chǎn)環(huán)境,這樣才能快速定位問題,解決問題。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/30250.html
摘要:只有當(dāng)超時故障扇區(qū)等明確故障項出現(xiàn)后,兩者關(guān)聯(lián)才確診硬盤故障,否則只是隔離觀察,不報修。如果存在進程住時間超過分鐘,我們認(rèn)為這個硬盤故障的影響面已擴大到了整機,需要進行重啟消除影響。 隨著阿里大數(shù)據(jù)產(chǎn)品業(yè)務(wù)的增長,服務(wù)器數(shù)量不斷增多,IT運維壓力也成比例增大。各種軟、硬件故障而造成的業(yè)務(wù)中斷,成為穩(wěn)定性影響的重要因素之一。本文詳細(xì)解讀阿里如何實現(xiàn)硬件故障預(yù)測、服務(wù)器自動下線、服務(wù)自愈以...
摘要:虛擬網(wǎng)卡與虛擬機的生命周期一致,無法進行分離,虛擬機被銷毀時,虛擬網(wǎng)卡即被銷毀。每塊虛擬網(wǎng)卡支持綁定一個安全組,提供網(wǎng)卡級別安全控制。平臺默認(rèn)提供塊虛擬網(wǎng)卡,若業(yè)務(wù)有塊以上網(wǎng)卡需求可通過綁定彈性網(wǎng)卡,為虛擬機提供多網(wǎng)絡(luò)服務(wù)。虛擬機是 UCloudStack 云平臺的核心服務(wù),提供可隨時擴展的計算能力服務(wù),包括 CPU 、內(nèi)存、操作系統(tǒng)等最基礎(chǔ)的計算組件,并與網(wǎng)絡(luò)、磁盤等服務(wù)結(jié)合提供完整的計算...
摘要:事實上,這種快捷的發(fā)布周期需要配合一系列流程工具甚至是管理文化,從而共同支撐起一套安全且可靠的云原生應(yīng)用程序運作機制。云原生框架云原生應(yīng)用程序的一大關(guān)鍵性特質(zhì)在于,其需要遵循一套設(shè)計契約以較大程度實現(xiàn)行為的可預(yù)測性。 擺脫臨時性自動化方案之定位,發(fā)揮優(yōu)勢以實現(xiàn)可預(yù)測功能。您能否以每周為單位向客戶發(fā)布各類新功能?甚至進一步達(dá)到以每天乃至每小時為單位?新晉開發(fā)人員能否在上班的第一天即進行代碼部署...
摘要:云原生路徑谷歌花了十幾年時間開發(fā)應(yīng)用和提煉云原生計算的原則。和云原生模式將通過滾動更新版本控制和新組件新功能的金絲雀部署來提高生命周期管理。此外,用戶將受益于可自我恢復(fù)的基礎(chǔ)設(shè)施,使更易于管理,對核心服務(wù)和單個計算節(jié)點的故障恢復(fù)更具有彈性。 Mirantis是OpenStack的主要貢獻者,今天他宣布將使用Kubernetes作為底層編排引擎重寫其私有云平臺。我們認(rèn)為這是推進OpenS...
閱讀 2365·2021-11-16 11:52
閱讀 2338·2021-11-11 16:55
閱讀 765·2021-09-02 15:41
閱讀 2997·2019-08-30 15:54
閱讀 3156·2019-08-30 15:54
閱讀 2265·2019-08-29 15:39
閱讀 1520·2019-08-29 15:18
閱讀 981·2019-08-29 13:00