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