精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Meta如何將其緩存一致性提高至99.99999999

開發 系統
對于任何分布式系統來說,可靠的監控和日志系統至關重要,以確保我們能夠捕獲Bug,一旦捕獲到Bug,我們就能夠快速找到根本原因,從而減輕問題。

簡介

緩存是計算機系統中的一種強大技術,從硬件緩存到操作系統、Web瀏覽器,尤其是后端開發中都有廣泛應用。對于像Meta這樣的公司,緩存非常重要,它有助于降低延遲、處理大量工作負載,并節省成本。由于Meta的應用場景非常緩存密集,這給他們帶來了另一組問題,即緩存失效。

多年來,Meta已將其緩存一致性水平從99.9999(六個九)提高到99.99999999(十個九),這意味著他們的緩存集群中不到十億次寫入中只有不到1次會導致不一致。

本文將重點討論以下幾個主要部分:

  • 緩存失效和緩存一致性是什么?
  • Meta為什么如此深刻關注緩存一致性,即使六個九還不夠?
  • Meta的監控系統如何幫助他們改善緩存失效和緩存一致性,并解決Bug。

緩存失效和緩存一致性

根據定義,緩存不保存數據的真實來源,因此在源數據發生更改時,應主動使過期的緩存條目失效。如果在失效過程中出現問題,會導致緩存中的值與源數據不一致。

那么我們如何使緩存失效?

我們可以使用TTL(生存時間)來保持數據的新鮮度,以確保沒有其他系統引起的緩存失效。但在本文中,我們將假設失效操作是由緩存之外的某個組件執行的。

首先讓我們看看如何引入緩存不一致性:

請假設1、2、3、4是遞增序列中的時間戳。

  • 緩存首先嘗試從數據庫獲取值。
  • 但在值 x=42 到達緩存之前,某個操作更新了數據庫中的值為 x=43。
  • 數據庫發送了 x=43 的緩存失效事件,并在 x=42 到達之前到達緩存,將緩存值設置為43。
  • 現在事件 x=42 到達緩存,將緩存設置為42,從而引入了不一致性。

為了解決這個問題,我們可以使用版本字段來執行沖突解決,使舊版本永遠不會覆蓋當前版本。這種解決方案對于互聯網上幾乎99%的公司都有效,但是Meta操作的規模可能使其不足以解決問題,因為其系統的復雜性。

為什么Meta如此關注緩存一致性?

從Meta的角度來看,緩存不一致性幾乎與數據庫數據丟失一樣嚴重,而從用戶的角度來看,可能會導致非常糟糕的用戶體驗。

當您在Instagram上向用戶發送私信時,在幕后,存在著將用戶映射到存儲其消息的主要存儲的過程。

在這里假設有三個用戶:Bob、Mary和Alice。這些用戶都向Alice發送消息。Bob在美國,Alice在歐洲,Mary在日本。因此,系統將在接近用戶所在地區的最近區域進行查詢,以將消息發送到Alice的數據存儲區域。在這種情況下,當TAO副本在BOB和Mary所在的區域查詢時,它們都有不一致的數據,因此它將消息發送到區域,該區域沒有Alice的消息。

在上述情況下,可能會導致消息丟失和糟糕的用戶體驗,因此這是Meta需要解決的重要問題之一。

監控

為了解決緩存失效和緩存一致性問題,第一步是進行測量。如果我們能夠準確測量緩存的一致性,并在緩存中出現不一致的條目時發出警報,Meta確保他們的測量不包含任何誤報,因為值班工程師會學會忽略它,這個指標將失去信任并變得無用。

在深入探討Meta實施的實際解決方案之前,最簡單的解決方案可能是記錄和跟蹤每個緩存狀態的變化。但是,對于大型工作負載的情況,Meta的系統每天處理超過10萬億次的緩存填充。記錄和跟蹤所有緩存狀態將會使本來已經很重的緩存工作負載變得極其繁重,更不用說調試了。

Polaris

Polaris在非常高的層面上,作為客戶端與一個有狀態服務進行交互,并且假設沒有對服務內部的了解。Polaris的工作原理是“緩存應該最終與數據庫一致”。Polaris接收失效事件并查詢所有副本,以驗證是否存在任何其他違反約束的情況。例如:

如果Polaris接收到一個失效事件,表示 x=4,版本為4,它會作為客戶端檢查所有緩存副本,以驗證是否存在任何不變量的違反情況。如果一個副本返回 x=3 @ 版本3,Polaris會將其標記為不一致,并重新排隊以稍后對其進行相同目標緩存主機的檢查。Polaris會在一分鐘、五分鐘或十分鐘的時間范圍內報告不一致性。

這種多時間尺度設計不僅允許Polaris在內部具有多個隊列來有效地實現退避和重試,而且對于防止產生誤報至關重要。

讓我們通過一個例子來理解:

假設Polaris接收到一個失效事件,表示 x=4,版本為4。但是當Polaris檢查緩存時,找不到鍵 x 的條目,這應該被標記為不一致。在這種情況下,有兩種可能性:

  • 在版本3時 x 是不可見的,但版本4的寫入是密鑰的最新寫入,并且確實存在緩存不一致性。
  • 可能存在版本5的寫入刪除了鍵 x,也許Polaris只是看到了比失效事件中的更近期的數據視圖。

現在,我們如何確保這兩種情況中的哪一種是正確的?

為了驗證,在這兩種情況中,Polaris需要通過查詢數據庫來檢查。繞過緩存的查詢可能需要大量計算資源,并且可能會使數據庫面臨風險,因為保護數據庫和擴展讀取重負載是緩存的兩個最常見用例。因此,我們不能向系統發送太多查詢。

Polaris通過延遲執行此類檢查并直到不一致樣本超過設置的閾值(例如1分鐘或5分鐘)時才對數據庫進行調用來解決此問題。Polaris生成的指標是“M分鐘內緩存寫入的 N 個九的一致性”。因此,目前Polaris提供了一個指標,即緩存在五分鐘的時間尺度上的一致性達到99.99999999。

現在讓我們看看Polaris如何幫助Meta使用編碼示例解決Bug。

讓我們通過一個編碼示例來理解流程:

假設一個緩存維護一個鍵到元數據映射和鍵到版本映射。

cache_data = {}
cache_version = {}
meta_data_table = {"1": 42}
version_table = {"1": 4}

def read_value(key):
    value = read_value_from_cache(key)
    if value is not None:
        return value
    else:
        return meta_data_table[key]

def read_value_from_cache(key):
    if key in cache_data:
        return cache_data[key]
    else:
        fill_cache_thread = threading.Thread(target=fill_cache(key))
        fill_cache_thread.start()
        return None

def fill_cache(key):
    fill_cache_metadata(key)
    fill_cache_version(key)

def fill_cache_metadata(key):
    meta_data = meta_data_table[key]
    print("Filling cache meta data for", meta_data)
    cache_data[key] = meta_data

def fill_cache_version(key):
    time.sleep(2)
    version = version_table[key]
    print("Filling cache version data for", version)
    cache_version[key] = version

def write_value(key, value):
    version = 1
    if key in version_table:
        version = version_table[key]
    version = version + 1
    write_in_databse_transactionally(key, value, version)
    time.sleep(3)
    invalidate_cache(key, value, version)

def write_in_databse_transactionally(key, data, version):
    meta_data_table[key] = data
    version_table[key] = version

def invalidate_cache(key, metadata, version):
    try:
        cache_data = cache_data[key][value]  ## To produce error
    except:
        drop_cache(key, version)

def drop_cache(key, version):
    cache_version_value = cache_version[key]
    if version > cache_version_value:
        cache_data.pop(key)
        cache_version.pop(key)

read_thread = threading.Thread(target=read_value, args=("1"))
write_thread = threading.Thread(target=write_value, args=("1",43))
print_thread = threading.Thread(target=print_values)

在緩存失效過程中,如果由于某種原因導致失效操作失敗,并且異常處理程序具有在這種情況下刪除緩存的條件。

請記住,這只是可能觸發Bug的非常簡化的示例,實際的Bug還涉及數據庫復制和跨區域通信。該Bug只有在以上所有步驟按特定順序發生時才會觸發。該Bug隱藏在交錯操作和瞬態錯誤背后的錯誤處理代碼中。

一致性追蹤

現在您是值班工程師,收到了Polaris的緩存不一致性警報,最重要的是檢查日志以確定問題可能出現在哪里。正如之前討論的,記錄每個緩存數據更改幾乎是不可能的,但是如果我們只記錄有可能導致更改的數據呢?

  • 如果我們看一下上面實現的代碼,問題可能在于如果緩存未收到失效事件或失效操作未生效。從值班工程師的角度來看,我們需要檢查以下內容:
  • 緩存服務器是否接收到了失效操作?
  • 服務器是否正確處理了失效操作?
  • 項目是否在此后變

得不一致?

Meta構建了一個有狀態追蹤庫,在這個小窗口中記錄和跟蹤緩存變異,所有有趣和復雜的交互觸發導致緩存不一致性的Bug。

結論

對于任何分布式系統來說,可靠的監控和日志系統至關重要,以確保我們能夠捕獲Bug,一旦捕獲到Bug,我們就能夠快速找到根本原因,從而減輕問題。借鑒Meta的例子,Polaris識別出了異常并立即觸發了警報。有了一致性追蹤的信息,值班工程師們不到30分鐘就找到了Bug的位置。

參考鏈接:https://engineering.fb.com/2022/06/08/core-infra/cache-made-consistent/

責任編輯:趙寧寧 來源: 小技術君
相關推薦

2022-12-14 08:23:30

2020-06-01 22:09:48

緩存緩存同步緩存誤用

2020-05-12 10:43:22

Redis緩存數據庫

2024-12-26 15:01:29

2017-07-25 14:38:56

數據庫一致性非鎖定讀一致性鎖定讀

2022-10-19 12:22:53

并發扣款一致性

2024-10-28 12:41:25

2024-01-15 10:38:20

多級緩存數據一致性分布式緩存

2022-03-29 10:39:10

緩存數據庫數據

2019-03-27 13:56:39

緩存雪崩穿透

2025-08-08 07:09:58

2022-07-25 09:48:22

緩存數據服務

2022-03-31 08:21:14

數據庫緩存雙寫數據一致性

2022-04-01 16:55:22

數據庫緩存日志

2023-08-14 08:10:33

CPU緩存RFO

2021-06-11 09:21:58

緩存數據庫Redis

2021-02-05 08:00:48

哈希算法?機器

2021-02-02 12:40:50

哈希算法數據

2020-09-03 09:45:38

緩存數據庫分布式

2023-09-24 14:35:43

Redis數據庫
點贊
收藏

51CTO技術棧公眾號

久久久久女教师免费一区| 在线免费观看日韩欧美| 国产在线一区二区三区四区| 久久国产精品系列| 九九久久婷婷| 欧美日韩的一区二区| 国产av熟女一区二区三区| 香蕉久久国产av一区二区| 日本特黄久久久高潮| 欧美成人免费全部| 黄色在线观看av| 亚洲成人精品综合在线| 亚洲va欧美va天堂v国产综合| 久久亚洲精品欧美| 国产女无套免费视频| 麻豆91精品| 色综合久久久久久中文网| 老鸭窝一区二区| 精品国产一区二区三区2021| 欧美视频一区二区三区…| 中文字幕久久一区| 欧美色图另类| 国产成人av福利| 国产精品一区专区欧美日韩| 日韩欧美大片在线观看| 97精品国产| 亚洲欧美日韩在线一区| 国产chinesehd精品露脸| 日韩高清中文字幕一区二区| 亚洲午夜在线观看视频在线| 在线成人性视频| 国产中文字幕在线播放| 成人丝袜视频网| 国产中文日韩欧美| 中文字幕一区二区三区四区欧美| 亚洲小说欧美另类社区| 美女撒尿一区二区三区| 91无套直看片红桃在线观看| 综合伊思人在钱三区| 亚洲黄页视频免费观看| 成人一区二区三区仙踪林| 日韩精品第二页| 日本韩国精品在线| 欧美日韩亚洲一| a级片在线免费| 一区二区三区四区不卡在线| 天天干天天操天天干天天操| 国产粉嫩一区二区三区在线观看 | 婷婷久久久久久| 国产精品一区二区91| 国产人妖伪娘一区91| 中文字幕第99页| 美女看a上一区| 国产国语刺激对白av不卡| 91视频免费网址| 99亚洲一区二区| 午夜精品福利在线观看| 日本中文字幕免费| 亚洲精品欧美| 51午夜精品视频| 国产成人亚洲精品自产在线| 亚洲免费播放| 欧洲亚洲妇女av| 麻豆成人免费视频| 奇米亚洲午夜久久精品| 国产精品久久77777| 亚洲性猛交富婆| 日本视频一区二区三区| 国产一区红桃视频| 99国产揄拍国产精品| 国产精品影视在线观看| 99在线影院| 天天干在线观看| 久久久美女艺术照精彩视频福利播放| 欧美一区二区三区精美影视| 国产视频福利在线| 中文字幕一区二区三区色视频| 在线免费观看成人| 日本在线视频中文有码| 天天免费综合色| 日本成人在线免费视频| 欧美成人福利| 日韩精品一区二区三区swag| 亚洲婷婷在线观看| 国产精品免费大片| 久久精品99无色码中文字幕| 免费人成年激情视频在线观看| 亚洲成人资源| 国产精品999999| 成人黄色激情视频| 国产美女视频91| 国产一区二区三区四区五区在线| 欧美日本网站| 亚洲色图视频网站| 97成人在线免费视频| 巨茎人妖videos另类| 在线不卡免费欧美| 日韩少妇一区二区| 日韩欧美综合| 久久久欧美精品| 黄色大全在线观看| 国产69精品久久久久777| 欧美日韩国产免费一区二区三区| 日日夜夜精品一区| 精品电影在线观看| 青青草久久伊人| 日韩美女精品| 久久综合伊人77777蜜臀| www亚洲视频| 国产在线精品免费av| 麻豆91蜜桃| 日本无删减在线| 欧美日韩一区中文字幕| 久久久久9999| 伊人久久大香线蕉综合四虎小说 | 欧美人与性动交xxⅹxx| 日韩一区二区三区免费看| 亚洲av综合一区二区| 中文一区一区三区免费在线观看| 啪一啪鲁一鲁2019在线视频| www.桃色av嫩草.com| 日本一区二区免费在线| 欧美,日韩,国产在线| 日本一区二区三区播放| 中文日韩在线视频| 久草手机在线观看| 高清av一区二区| aaa免费在线观看| 五月激情久久| 日韩精品在线播放| 久青草视频在线观看| 国产在线精品一区二区夜色| 热re99久久精品国产99热| 久操视频在线观看| 午夜精品成人在线| 国产女主播在线播放| 欧美综合一区| 琪琪第一精品导航| 性xxxx搡xxxxx搡欧美| 亚洲黄色片在线观看| 色噜噜狠狠一区二区| 精品香蕉视频| 国产成人一区二区三区电影| 你懂的免费在线观看视频网站| 亚洲成人在线网站| 国产艳妇疯狂做爰视频| 欧美日韩a区| 91精品国产高清久久久久久91裸体| 欧洲不卡av| 欧美疯狂性受xxxxx喷水图片| 亚洲色图日韩精品| 麻豆精品一区二区综合av| 亚洲精品二区| 69堂精品视频在线播放| 亚洲欧美成人网| 一级片免费在线播放| 国产亚洲人成网站| 热久久精品免费视频| 欧美亚洲在线日韩| 国产综合视频在线观看| 国产在线高清视频| 日韩欧美另类在线| 中文字幕一区二区三区手机版| 成人污视频在线观看| 国产网站免费在线观看| 国产一区99| 国产狼人综合免费视频| 美女隐私在线观看| 日韩精品资源二区在线| 精品无码人妻一区二区三区品 | 日本护士做爰视频| 99精品免费视频| 久久视频在线观看中文字幕| 亚洲国产福利| 伊人青青综合网站| 一级片在线观看视频| 亚洲永久免费视频| 五月婷婷综合在线观看| 麻豆精品一区二区av白丝在线| 亚洲av首页在线| 欧美成人专区| 国产精品久久在线观看| 成人无遮挡免费网站视频在线观看| 欧美一区二区三区播放老司机| 久久久久久久久久久久久久免费看 | 婷婷激情综合五月天| 国产精品扒开腿做爽爽爽软件| 国产一区免费在线| 69堂免费精品视频在线播放| 欧美成人激情视频免费观看| 四虎永久在线观看| 欧美日韩一区国产| 国产无遮挡又黄又爽又色| 国产欧美日本一区二区三区| 992kp免费看片| 国产精品主播| 在线观看欧美激情| 欧美理论电影在线精品| 国产欧亚日韩视频| 91白丝在线| 最近2019中文字幕第三页视频| 精品人妻一区二区三区含羞草 | 高清一区二区三区av| 69久久夜色精品国产7777| 青青影院在线观看| 亚洲精品一区在线观看香蕉| 国产精品无码白浆高潮| 日韩欧美在线第一页| 色欲人妻综合网| 久久亚洲综合色| 深爱五月综合网| 肉色丝袜一区二区| 精品丰满人妻无套内射| 日韩久久精品| 精品综合在线| 日韩成人视屏| 国产日韩精品综合网站| 波多野结衣亚洲| 欧美精品videossex性护士| 午夜激情在线观看| 亚洲视频综合网| 天天综合网天天综合| 日韩一区二区三区在线| 中文字幕免费播放| 欧美日韩亚洲一区二区| 国产一级在线视频| 亚洲精品少妇30p| 2017亚洲天堂| 久久精品人人做人人综合| 色婷婷精品久久二区二区密| 国产一区91精品张津瑜| 日本黄色的视频| 秋霞午夜鲁丝一区二区老狼| 老司机午夜av| 日韩中文字幕不卡| 欧美 日韩 国产一区| 亚洲国内精品| 日韩精品在线视频免费观看| 亚洲国产不卡| 丰满女人性猛交| 欧美xxxxx视频| 亚洲乱码一区二区三区三上悠亚| 国产欧美日韩精品高清二区综合区| 国产综合精品一区二区三区| 亚洲成人五区| 成人动漫在线视频| 一区中文字幕电影| 99影视tv| 国产精品主播在线观看| 国产精品二区在线| 国产精品对白久久久久粗| 粉嫩av免费一区二区三区| www.神马久久| 激情视频一区二区| 网曝91综合精品门事件在线| 久久综合精品一区| 久久成人av| 亚洲精品欧美精品| 999久久久精品国产| 中文字幕日韩精品久久| 亚洲精品一区二区在线看| 欧美h视频在线观看| 中文不卡在线| www.日本少妇| 丝袜诱惑制服诱惑色一区在线观看 | 91文字幕巨乱亚洲香蕉| 91欧美极品| 国产一区不卡在线观看| 色婷婷精品视频| 先锋影音一区二区三区| 欧美日韩激情在线一区二区三区| 亚洲蜜桃av| 欧美日韩99| 免费无码av片在线观看| 蜜臀久久99精品久久久久宅男| 中文字幕在线观看日| 岛国av在线一区| 日韩一级视频在线观看| 国产精品美女久久福利网站| 欧美色图亚洲天堂| 婷婷综合久久一区二区三区| 自拍偷拍18p| 欧美一区二区播放| 天堂在线视频网站| 中文字幕国产亚洲| 欧美人动性xxxxz0oz| 欧美在线视频免费播放| 欧美美女被草| 国内视频一区| 日韩精品dvd| 国产成人一区二区三区别| 久久天堂成人| 免费欧美一级片| 久久久亚洲欧洲日产国码αv| 国精产品一区一区| 亚洲va欧美va人人爽| 在线免费观看中文字幕| 亚洲电影中文字幕| 午夜视频在线免费观看| 国模gogo一区二区大胆私拍 | 在线视频国内自拍亚洲视频| 国产乱码久久久| 日韩精品中文字幕久久臀| 秋霞成人影院| 日韩暖暖在线视频| 日韩精品中文字幕吗一区二区| 欧美激情论坛| 欧美日韩亚洲三区| 性猛交ⅹ×××乱大交| 99久久国产综合精品色伊| 三级黄色免费观看| 日韩欧美中文免费| 国产91免费在线观看| 日韩在线视频导航| 中文在线8资源库| 99久久精品久久久久久ai换脸| 精品视频日韩| 日韩精品一区二区三区久久| 成人免费视频网站在线观看| 成人精品一二三区| 一本久久a久久精品亚洲| 蜜桃在线一区二区| 久久网福利资源网站| 外国成人直播| 免费国产一区二区| 夜夜嗨一区二区三区| 亚洲三级在线视频| 国产精品久久久久aaaa樱花| 久操视频在线免费观看| 亚洲毛片在线观看.| 国产盗摄——sm在线视频| 99久久99久久| 欧美日韩国产一区精品一区| 午夜啪啪小视频| 国产精品久线观看视频| 波多野结衣黄色| 亚洲一级一级97网| 欧美黑人一区| 日本中文不卡| 日韩精品福利网| 无码人妻精品一区二区中文| 欧美午夜无遮挡| 欧美亚洲日本| 日本精品视频在线| 久久99国内| 成人性做爰aaa片免费看不忠| 2014亚洲片线观看视频免费| 免费观看一区二区三区毛片| 亚洲精品短视频| 成人影院入口| 热re99久久精品国产99热| 久久精品午夜| 国产又粗又黄又猛| 欧美日韩一二三区| 麻豆网站在线观看| 亚洲www永久成人夜色| 欧美91大片| 黑人玩弄人妻一区二区三区| 午夜影视日本亚洲欧洲精品| 五月婷婷深深爱| 国产成人精品在线视频| av一区二区高清| 91小视频在线播放| 亚洲一区在线观看免费| 色资源在线观看| 国产成人精品久久二区二区| 凹凸成人精品亚洲精品密奴| 网站在线你懂的| 亚洲一区二区高清| 性xxxx视频播放免费| 国产精品美女999| 99精品国产一区二区三区| 国产黄色一区二区三区| 亚洲成人免费av| 你懂的视频在线免费| 国产日韩专区在线| 欧美性色综合| 亚洲av综合一区二区| 欧美日韩精品一区视频| 亚洲淫性视频| 久久99导航| 麻豆国产精品官网| 久久香蕉精品视频| 亚洲九九九在线观看| 久久亚洲精品人成综合网| 日韩精品免费一区| 久久久久久久久久久电影| 一级特黄aa大片| 97视频在线观看免费高清完整版在线观看| 午夜先锋成人动漫在线| 在线观看国产福利| 亚洲va国产va欧美va观看| 国产精品影院在线| 99热最新在线| 首页国产欧美日韩丝袜| 久久久久久久久久久久国产| 永久免费精品影视网站| 中文字幕日韩在线| 国产高潮免费视频| 图片区小说区区亚洲影院|