Leader-based復制品要求所有的寫請求都經由某單一節點,但讀請求可以查詢任意復制品。這對于負載是大量讀請求而寫請求只占很小百分比的情況(網頁的一般情形),是很有吸引力的:創建很多的follower,并且把讀請求分散在這些follower間。這可以去除leader的負載,并且允許用就近的復制品為讀請求服務。
在這種讀請求擴展read-scaling的架構下,你可以簡單的通過增加更多的follower來提升只讀請求的能力。然而,這種方法只對于異步的復制品是實際可行的,如果你想對follower采用同步機制的話,一個節點的failure或者是網絡癱瘓就會使得整個系統不能再寫數據。并且,你有的節點越多,那么單個節點的宕機可能性就越大,因此,一個完全同步的配置是不現實的。
不幸的是,如果一個應用的讀來自一個已不的follower,如果這個follower的更新有所落后,那么應用看到的將是過時的信息。這會導致明顯的數據庫的不一致:
如果你在leader和follower那同時運行同樣的查詢,你會得到不一樣的結果,因為并不是所有的寫請求都已經反應到follower那。
這種不一致性就是一個臨時的狀態 - 如果你停下對數據的寫請求并且等一會,最終eventually follower會趕上并且和leader保持一致的。因為這個原因,這一影響被稱為evetual consistency。
術語“eventually最終”有一點故意的模糊性質:一般來說,對于復制品落后多少更新是沒有限制的。在正常操作下,一個發生在leader和反應到follower之間的寫請求的延遲,也叫拷貝延遲replication lag,可能不到一秒,在實際中不會被注意到。然而,如果系統的運行接近系統的最大容量或者網絡上有問題,那么這個lag就會很容易增加到幾秒或是幾分鐘。
當lag很大時,那么剛才被提及的不一致性就不是理論上的問題了,對于應用程序來說也是一個實際的問題。下面我們將討論,拷貝延遲發生時的3個問題以及解決它們的方法。
許多應用會讓用戶提交一些數據然后查看他們提交的內容。這可能是一個消費者數據庫中的一條記錄,或是對一條對討論主題的評論,或是其他的等等。當新數據被提交時,它必定會發送給leader,但是當用戶查看數據時,他可能會從follower那讀取。這對于數據頻繁被查看但偶爾被寫的用例特別合適。
使用異步拷貝時,會有如下圖展示的問題:如果用戶在寫數據后很快的查看數據,那么新的數據會還沒有到達復制品。對于用戶來說,看上就好像雖然數據提交了,但丟失了,所以他們是有理由不高興的。
在這樣的情況下,我們需要read-after-write consistency,也被稱為read-your-writes consitency。這是對用戶重載頁面后,他們總是能看到他們自己提交的數據一種保證。但對于其他用戶卻不能保證什么:其他用戶的更新也許是不可見的,直到一段時間之后。然而,它確保了用戶自己輸入已經被正確的存儲了。
那么我們應該怎么在leader-based的復制品中實現這種read-after-write consistency呢?有許多不同的技術可以實現。下面我們羅列一下:
當同一用戶從多個設備(例如臺式機Web瀏覽器和移動應用程序)訪問您的服務時,就會出現另一種復雜情況。在這種情況下,您可能希望提供跨設備cross-device的read-after-write consistency:如果用戶在一個設備上輸入了一些信息,然后在另一臺設備上查看了該信息,則他們應該看到剛剛輸入的信息。
在這種情況下,有一些額外的問題需要考慮:
異常的第二種情況可能是當動異步的follower那讀取數據時,用戶有可能看到一些時光倒流moveing backward in time的情形。
這可能發生在當用戶從幾個不同的復制品那讀取好幾次時。比方說,下圖展示了用戶2345執行了兩次一樣的查詢,第一次是和一個幾乎沒有lag的復制品,然后是和一個有很大lag的復制品(這種情形是很有可能的,當用戶刷新網頁時,每個請求都會路由到隨機的服務器)。第一次查詢會返回一個用戶1234添加的最新評論,但第二次查詢并沒有返回任何東西,因此滯后的follower還沒有看到那個寫的數據。也就是說,第二次查詢看到的系統,在時間上早于第一次看到的。如果第一次沒有返回任何東西,那其實并不糟糕,因為用戶2345本來就不會知道用戶1234最見增加了一條評論。然而,如果用戶2345在第一次看到了用戶1234的評論,但在之后又消失了,這會讓用戶很困惑。
Monotonic reads單調讀,可以保證這樣的異常不會發生。它比強一致性要弱一些,但比最終一致性要強。讀取數據時,您可能會看到一個舊值;單調讀取僅表示如果一個用戶依次進行幾次讀取,他們將看不到時間倒退-即,他們在先前讀取較新的數據之后將不會讀取到較舊的數據。
實現單調讀取的一種方法是確保每個用戶始終從同一副本進行讀?。ú煌挠脩艨梢詮牟煌北具M行讀?。@纾梢曰谟脩鬒D的哈希而不是隨機地選擇副本。但是,如果該副本失敗,則用戶的查詢將需要重新路由到另一個副本。
拷貝延遲異常的第三個問題是關于對因果關系的違反。讓我們想象如下Mr.Poon和Mrs.Cake的對話:
Mr.Poons: Mrs.Cake,你可以看見多遠的未來?
Mrs.Cake:通常10秒左右,Mr.Poons。
這兩個句子之間存在因果關系:Cake夫人聽到了Poons先生的問題并回答了。
現在想象第三個人通過follower監聽這個對話。也就是說,Cake夫人說的話機會沒有滯后的經過follower,而Poons先生的說的則會有一個更大的拷貝延遲。如下圖,所以對于觀察者來說,她聽到的對話是這樣的:
Mrs.Cake:通常10秒左右,Mr.Poons。
Mr.Poons: Mrs.Cake,你可以看見多遠的未來?
對于觀察者來說,Cake夫人在Poons先生問問題之前就回答了這個問題。這種精神力量令人印象深刻,但卻令人困惑。
防止這種異常需要另一種保證:一致的前綴閱讀consistent prefix reads。這種保證是說,如果一系列寫入是以一定順序發生,那么閱讀這些寫入的任何人都會看到它們以相同的順序出現。
這是分區(分片)數據庫中的一個特殊問題。如果數據庫始終以相同順序應用寫入,則讀取總是看到一致的前綴,因此不會發生此異常。但是,在許多分布式數據庫中,不同的分區是獨立運行的,因此沒有全局的寫入順序:當用戶從數據庫中讀取數據時,他們可能會看到數據庫的某些部分處于較舊的狀態,而某些部分處于較新的狀態。
一種解決方案是確保將因果相關的所有寫入均寫入同一分區,但是在某些應用程序中無法有效完成。還有一些算法可以明確跟蹤因果關系。
當在一個最終會一致的系統上工作時,考慮當拷貝延遲增加到幾分鐘或者幾小時,應用程序應該如何應為是很有價值的。如果答案是“沒問題”,那就太棒了。然而,如果結果導致了糟糕的用戶體驗,那么設計一個諸如read-after-write這樣更強的保證,是很重要的??截悓嶋H上是異步的,但假裝是同步的,這是解決問題的根源。
就像之前討論的,應用程序總有提供一個比底層數據庫更強的保證,比如,通過在leader上執行某些讀操作。然而,在應用程序中處理這些問題是很復雜的并且很容易出錯。
最好是應用開發人員不用擔心這些微妙的拷貝問題,并且相信數據庫會做正確的事情。這也就是為什么transactions事務存在的原因:它們是讓數據庫提供更強保證的方式以使應用更簡單。
單節點的事務已經存在了很久。然而,隨著分布式數據庫(拷貝或分區)的前行,許多系統都已經放棄了它們,聲稱對于性能和可用性來說開銷太大,并且斷言在可擴展系統中最終一致性是不可避免的。這些陳述中有一些是對的,但太簡單化。
DR5內存的延遲真的很高嗎?聽說DDR5內存延遲比較高,這是真的嗎?我進行了幾項測試,CPU是13700KF,內存頻率是DDR57千頻率,持續32393980,原生態是654頻率的內存條,超頻超到7000讀取10500,寫入94,000復制96,000延遲,55納秒,這個延遲數據非常不錯。
這個內存的持續頻率是我默認設置的,我沒有調整小參數。如果是極限超頻愛好者進行內存參數小參,還可以把延遲繼續降低。據說有人能將延遲控制在50或49這個樣子。
·首先是B760主板,DDR56,40032393980,讀取9萬寫入86,000復制85,000延遲63納秒。
·接下來換成DDR4內存,DDR43,200持續16202038,主板B660讀取4000寫入46,000復制46000,延遲62.8,CPU依然是1512490F。
·接下來更換了一套內存條,依然是DDR43,200頻率持續14161636,處理器依然是1512490F,讀取149,000寫入46,000復制48,000和前面那一套C16持續基本一致。但是延遲從六十二點幾降到了五十八點幾,確實下降了一些。對于玩吃雞和永劫無間的極限玩家來說,那多多少少是起到一些作用的。
·最后做個總結。
→第一個結論,DDR5建議選擇6000以上的,6000,0006都可以。內存持續建議C32,C34,延遲剛才大家看到了大概63納秒,而DDR4通過幾組測試我得出一些結論,DDR4的內存C16和DDR5的C27,延遲幾乎是一樣的。
→第三個結論就是DDR56,000頻率6000,400頻率效果確實是要比DDR4,3200頻率3600頻率要好,延遲一樣的情況下確實要好,讀取復制寫入內存速度就是比它快,毋庸置疑。
·至于網上宣傳DDR4延遲比DDR5要低,那就是因為人家超頻,超頻到了4000頻率,超到了4000頻率。然而內存延遲控制在c15,相比較而言這種效果比6000頻率6400頻率延遲要低。
但又話又說回來了,如果把內存頻率弄到6800,弄到7000頻率越高CPU越高,反而內存延遲會降低。就如視頻開頭6400的頻率超頻超到7000,CPU從i5變成i7,反而內存延遲從62納秒降低到55納秒,你怎么解釋?
天談一個大家都好奇地問題,為什么電腦越來越卡,相信大家都深有體會,好好的電腦剛買的時候像火箭,現在怎么就支棱不起來了呢,是老了么?
這個話題知乎大神都有自己的見解,其中就有一路大神舉個生動的例子:給一位小姐姐重裝了一臺電腦,然后給安排了一個360瀏覽器,然后360的各路親戚就慢慢地都來了,幾乎小姐姐的電腦被360的全家桶包圓了。
然后小姐姐又重新裝了系統,這回她聰明了,不下載360了,這回咱下載獵豹瀏覽器,但是還是重蹈覆轍,獵豹的朋友圈似乎也是不容小覷。其實并不是說安裝軟件多就會卡,這只是導致卡的因素之一。
電腦總是重裝系統并非長久之計,電腦從開始的流暢到后來的打開個Excel都有些吃力。
其實電腦越越卡可用蝴蝶效應來解釋,蝴蝶效應是指在一個動力系統中,初始條件下微小的變化能帶動整個系統的長期的巨大的連鎖反應。它是一種混沌現象,說明了任何事物發展均存在定數與變數,事物在發展過程中其發展軌跡有規律可循,同時也存在不可測的“變數”,往往還會適得其反,一個微小的變化能影響事物的發展,證實了事物的發展具有復雜性。
主要導致電腦越來越卡的情況和解決措施。
一、軟件問題
1、軟件過多,且開啟了開機啟動
2、游戲更新導致配置不夠用
二、硬件問題
1、磁盤IO瓶頸
2、磁盤碎片過多
三、內存問題
四、其他問題解決方案
1、定時清理電腦垃圾
2、盡量不把文件放在c盤或者桌面
3、C盤的清理
01軟件問題
1、軟件過多,且開啟了開機啟動
首先就是軟件問題,安裝過多的軟件并且還不管理這些軟件,顯然會給電腦增添負擔,我們需要將不常用的軟件及時卸載,減少開機自動啟動的軟件,或將開機自動啟動的軟件關閉。
2、游戲更新導致配置不夠用
游戲運行后物理內存爆到96%,更新游戲之后造成這一變化,游戲更新導致設備不上主流,隨著電腦技術的日益完善,軟件為了更好的服務用戶,對電腦的配置越來越苛刻也是理所當然。例如游戲的更新,為了給用戶帶了更好的體驗感覺,和視覺沖擊感受也是當然是牟足了勁。雖然電腦還是原來的電腦,其實電腦的靈魂已經并不是現在的靈魂了。
所以解決這一問題最好的方式就是重裝點電腦,或將可以降低版本的軟件進行降低,當然還可以選擇更好的配置,但是是在你舍得花錢的前提。
02硬件問題
1、磁盤IO問題
遇到電腦反應遲鈍沒卡頓等情況,我問首先需要打開任務管理器進行查看,先找到電腦卡頓是因為CPU的問題還是內存、磁盤的問題才是尤為重要的。如果CPU和內存很正常,那就很有可能是磁盤的問題,系統磁盤瓶頸了,導致電腦如同癱瘓。
如何優化磁盤IO性能呢?
一次盡可能多寫入或多讀取。也就是說,將程序的讀寫buffer設置得盡可能大一些。例如日志或者redo log的寫入,不是每次調用都直接寫磁盤,而是先緩存到內存中,等buffer滿了再寫入磁盤,也可以定時寫入磁盤。
操作系統和C庫函數通常會對寫入的文件內容做緩存,以減少實際寫文件的次數。直接調用系統函數fsync或C函數fflush將使系統的緩存機制失效,此時將強制把內容刷到磁盤上。除非必需,否則不要執行強制刷盤操作。
2、磁盤碎片過多
電腦在使用的過程中,不知不覺的會留下一些小碎片。平時可能沒什么影響,但是積少成多慢慢的就會越來越占空間。其實電腦磁盤就想我們家里的房間,每個房間都有一定的空間,但是生活久了需要使用的東西越來越多 ,所以我們就只能定時清理房間,有足夠的空間讓我們自己活動。磁盤清理也是一樣,做好定時清理讓軟件有足夠的運行空間。
03內存問題
首先電腦內存不足會有這樣的情況,程序經常長時間無響應,加載時間過長,電腦打開多任務的時候會出現切換慢,白屏無響應。也就是電腦反應慢,電腦出現內存較低,內存不足的提示,玩大型游戲卡頓,畫面延遲,例如吃雞按TAB會卡。這個時候確實需要加一個內存條或者進行升級。
04其他問題解決方案
1、定時清理電腦垃圾
電腦在瀏覽網頁、下載軟件的時候難免會留下痕跡或者一些碎片,這時我們的360的安全衛士就可以派上用場了。給360軟件設置定時,定被刪除的文件并不是瞬間就被刪除了,而是會被刪除到回收站,所以清理垃圾時把電腦軟件的安裝包、使用痕跡清除掉,時一定要順便清理回收站。
電腦上網在運行的過程中或出現很多的痕跡、碎片,這時候前文提到的360就派上用場了,所以需要定時定點的去清理電腦的垃圾、清除。當然別忘了清理一下回收箱。
2、盡量不把文件放在C盤或者桌面
C盤是電腦的系統盤,就是整部電腦的核心位置,不相關的軟件不要安裝到C盤這會導致藍屏或者導致電腦損壞的風險。電腦下載軟件的是后系統會默認C盤是最安全的磁盤,所以安裝最好安裝在C盤以外的磁盤里。
3、C盤的清理
C盤是電腦系統的運轉中心,所以在使用的時候需要將電腦的C盤會留下垃圾和痕跡,這也是需要及時清理的,但是要注意不要清理錯文件,一旦刪錯了可能會導致整個系統癱瘓。
05寫在最后
電腦卡頓除了日常需要的維護外,配置也是尤為重要。 CPU處理器實際上是電腦的大腦,因為電腦的各種計算都是處理器完成的。建議大家可以更換更高配的CPU或安裝SSD也是解決電腦卡頓的方法。
讀者朋友,您還有其他的問題和解決方式么,歡迎交流~
(7256199)