優(yōu)惠活動(dòng) - 12周年慶本月新客福利
                                      優(yōu)惠活動(dòng) - 12周年慶本月新客福利
                                      優(yōu)惠活動(dòng) - 12周年慶本月新客福利

                                      不要立即檢查剛做過(guò)的工作

                                      不要立即檢查剛做過(guò)的事情,也不要立即讀剛寫(xiě)過(guò)的數據。絕對不要為了驗證而立即讀剛寫(xiě)過(guò)的數據。為了近期內的運維需要,可以把數據存儲在本地或分布式的緩存中。驗證工作相對于不太可能出現的故障來(lái)說(shuō)成本更高。這種活動(dòng)有悖于有效擴展的需求。

                                      絕對不要為了驗證數據而立即讀剛寫(xiě)入的數據,而要讀并處理與寫(xiě)操作相關(guān)的錯誤。把數據存儲在本地可以避免對剛剛寫(xiě)入的數據的其他讀操作。

                                      木匠有句名言:“量?jì)纱?,鋸一次?rdquo;你可能從中學(xué)的木工老師那里聽(tīng)過(guò)這句話(huà)一他可能還缺了根手指。拋開(kāi)少手指這事不說(shuō),這句名言還是很有道理的,正所謂實(shí)踐出真知。最好在切割前驗證測量的準確度,因為錯誤的測量結果會(huì )導致生產(chǎn)浪費,例如切出一塊大小不對的木板。我們當然不會(huì )那么做。然而,我們所要強調的是怎樣減少另一種浪費,即立即驗證剛寫(xiě)入的數據。



                                      在過(guò)去的幾年中,我們發(fā)現自己常常會(huì )問(wèn)客戶(hù):“讀并驗證剛寫(xiě)人的數據,你認為這真的有意義嗎?”這種問(wèn)題出的率令我們吃驚。有時(shí),客戶(hù)的理由很充分,但沒(méi)有一條是我們認同的。通常,客戶(hù)看起來(lái)就像是那種被當場(chǎng)抓住的知道自己做了不該做的事的孩子。那些對回答經(jīng)過(guò)深思熟慮(雖然在我們看來(lái)是破壞了價(jià)值)的客戶(hù)聲稱(chēng),他們的應用需要絕對確保數據不只是被寫(xiě)入了,還要寫(xiě)得正確。但要記住,我們絕大多數客戶(hù)都有SaS或商務(wù)平臺,他們不是在運行核電站,也不是要把人類(lèi)送往太空,更不是在控制幾千架客機的起落或治療癌癥。對于寫(xiě)錯或者計算錯數據的恐懼,一直都是耗費開(kāi)發(fā)者額外時(shí)間的主因。這種恐懼在計算的早期發(fā)展階段可能還算合理,Tanden和 Stratus公司分別在20世紀70年代末期和80年代初期設計容錯計算機就與這種恐懼有著(zhù)定的關(guān)系。這種系統的主要意圖是減少系統的平均故障時(shí)間(MTTF),采用的方法是“冗余一切”,即包括CPU、存儲、內存、內存路徑和存儲路徑等在內的所有設備都有冗余。這種模型必須對并行計算和存儲的系統的結果進(jìn)行對比,才能驗證系統在正確運行。本書(shū)的一位作者曾經(jīng)為一臺年代久遠的 Stratus小型計算機開(kāi)發(fā)過(guò)應用,在他為此工作的兩年中,該系統從來(lái)沒(méi)有出現過(guò)兩個(gè)處理器間的計算錯誤,也沒(méi)有出現過(guò)寫(xiě)內存或硬盤(pán)的錯誤。

                                      現在,這種恐懼已經(jīng)比20世紀70年代末期和80年代初期少多了。事實(shí)上,對那些剛寫(xiě)入數據就要執行讀操作的客戶(hù),當我們問(wèn)起他們通常是多長(cháng)時(shí)間會(huì )發(fā)現一次錯誤時(shí),他們回答得都相當一致,都說(shuō)從來(lái)沒(méi)有發(fā)現過(guò)。問(wèn)題是,除非對由于寫(xiě)操作產(chǎn)生的錯誤數據進(jìn)行操作時(shí)發(fā)生了問(wèn)題,否則他們絕對不會(huì )發(fā)現錯誤。當然,數據損壞也常常發(fā)生,但是大多數情況下,只有在真正的寫(xiě)操作時(shí)才能發(fā)現這種數據損壞。與其投入兩倍的工作量,從而讓存儲、數據庫和系統事務(wù)減半,不如看看操作返回的錯誤代碼,進(jìn)行適當的處理。這里補充說(shuō)明一下,數據損壞的最佳保護措施是正確地做到高可用性,在備用數據庫或復制存儲設備上保存多個(gè)數據副本。最理想的情況是最終實(shí)現多個(gè)實(shí)時(shí)站點(diǎn)。

                                      當然,并非所有的“寫(xiě)后立即讀”的操作都是由于過(guò)分仔細的程序員為了驗證剛寫(xiě)入的數據而產(chǎn)生的。有時(shí),也可能是最終用戶(hù)請求了剛寫(xiě)人的數據。這里,我們不禁要問(wèn):為什么這些客戶(hù)不把常用的(包括已寫(xiě)入的)數據保存在本地呢?如果剛寫(xiě)入某些數據,而且很可能會(huì )再用到這些數據,那么最好把它保存在本地。這種情況一個(gè)常見(jiàn)的例子是許多產(chǎn)品中的注冊流程。通常,在把用戶(hù)數據保存為永久注冊記錄之前,有一個(gè)階段會(huì )把這些數據呈現給用戶(hù)。另一個(gè)例子,是許多電子商務(wù)站點(diǎn)利用購物車(chē)實(shí)現的購買(mǎi)流程。無(wú)論哪哪種情況,如果你在寫(xiě)入的數據將來(lái)還會(huì )被用到,那么最好把它們在本地保留一份。關(guān)于如何進(jìn)行緩存以及緩存哪些數據。

                                      前面論述的重點(diǎn)是要得到一個(gè)結論,即重復操作會(huì )降低有效擴展的能力。事實(shí)上,它會(huì )造成事務(wù)成本加倍。因此,如果你的解決方案要規避由錯誤的寫(xiě)操作帶來(lái)的幾百萬(wàn)美金的損失,那可能需要幾千萬(wàn)的額外基礎設施作保障。根據我們的經(jīng)驗,即使在編程時(shí)間和基礎設施上投資了,也沒(méi)辦法完全避免這種風(fēng)險。在大多數情況下,寫(xiě)后即讀的操作都是不好的,因為它不只讓成本翻倍,限制了擴展性,而且還不能降低風(fēng)險,從而使成本與收益不相稱(chēng)。毫無(wú)疑問(wèn),也許會(huì )有需要這種操作的地方,但是相比眾多技術(shù)團隊和公司驗證過(guò)的最佳實(shí)踐來(lái)說(shuō),這種情況少之又少。

                                      細心的讀者可能已經(jīng)發(fā)現,我們的原則中存在沖突。需要本地存儲的信息代表狀態(tài),肯定需要跟服務(wù)器保持一致才有用。從宏觀(guān)角度說(shuō),我們同意這種說(shuō)法,如果一定要做個(gè)選擇,那么我們會(huì )只開(kāi)發(fā)無(wú)狀態(tài)的應用,以確保不會(huì )出現寫(xiě)后即讀的操作。這說(shuō)明,我們的原則是常規的,是“通常如此”的,而不是特定的或“唯一正確”的。絕對不要重復你的工作,絕對要維護大型的無(wú)狀態(tài)應用。這兩種說(shuō)法有沖突嗎?是的。那么沖突可以解決嗎?當然要想解決這一原則沖突,就要站在很高的角度來(lái)看。我們既想讓系統不浪費資源(如寫(xiě)后即讀讀),想讓系統是無(wú)狀態(tài)的。要實(shí)現這一點(diǎn),我們決定絕對不會(huì )為了驗證而讀數據。我們也同意,有日時(shí)為了速度和擴展,我們也希望保持密切關(guān)系,而不去讀剛寫(xiě)人的數據。這意味著(zhù)需要維護一些狀態(tài)信息,但是我們可以把它限制在某些事務(wù)中,在這些事務(wù)中讀剛寫(xiě)入的數據是必要的。雖然這種方法有悖于我們介紹的原則,但是如果這種方法在有限的操作中引1人了狀態(tài),從而降低了成本,增加了擴展性,那么它也是可行的。

                                      與所有原則一樣,總有例外的情況。如果你存在于一個(gè)受控制的環(huán)境中,要求必須對10096的寫(xiě)入數據進(jìn)行驗證,然后加密、備份,你應該怎么做呢?我們不確定是否存在這樣的環(huán)境,但是如果它存在,就一定要滿(mǎn)足它的要求,例如不能阻止寫(xiě)后即讀的操作。為了減少寫(xiě)后即讀的操作且不阻止用戶(hù)交易,下面列出了一個(gè)問(wèn)題清單以及你能采用的步驟。
                                       
                                      管理要求/法律要求。這個(gè)動(dòng)作是管理要求或者法律要求的嗎?如果是,你確定自己理解得正確嗎?很少會(huì )有要求明確說(shuō)你要做的與用戶(hù)交易一致。即使這樣說(shuō)了,這樣的要求也很少(可能是絕對不)適用于所有操作的。

                                      競爭性差別。這個(gè)動(dòng)作具有競爭性差別嗎?請小心回答,如果答案是“是的”,那么這個(gè)答案太一般化了,而且通常是錯誤的??紤]到你所預計的錯誤發(fā)生的概率很小,你的競爭對手不進(jìn)行次檢查而造成的錯誤只占所有錯誤的0.001%,那么即使你正確規避了這些錯誤,也很難令人相信你能戰勝對手。

                                      異步完成。如果出于管理要求(雖然令人懷疑但仍是可能的)或競爭性差別(毫無(wú)疑問(wèn)不可能),必須寫(xiě)后即讀,那么可以考慮。

                                      在本地寫(xiě)入,不中斷交易。網(wǎng)站制作處理故障的方法很多,可以通過(guò)日志重建數據,然后再從處理隊列中重新執行,最糟糕的情況是要求用戶(hù)再輸入一次數據,這種情況發(fā)生的概率很小。如果故障發(fā)生在為了實(shí)現高可用性而向遠程數據備份復制數據的過(guò)程中,那么只需要重新申請那個(gè)記錄或交易即可。在任何情況下,都不要因為要向兩個(gè)數據源同步寫(xiě)入數據而中斷用戶(hù)交易。

                                      本文地址:http://www.havencoinwallet.com//article/3466.html
                                      相關(guān)文章:
                                      最新文章:
                                      国产免费丝袜调教视频爱剪辑|国产小受18asian|国产福利91精品一区二区三区|久久久青草大香|欧美丰满熟妇xxxx性