国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

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

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

簡介

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

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

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

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

緩存失效和緩存一致性

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

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

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

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

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

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

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

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

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

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

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

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

監(jiān)控

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

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

Polaris

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

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

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

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

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

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

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

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

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

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

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

假設一個緩存維護一個鍵到元數(shù)據(jù)映射和鍵到版本映射。

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)

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

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

一致性追蹤

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

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

得不一致?

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

結論

對于任何分布式系統(tǒng)來說,可靠的監(jiān)控和日志系統(tǒng)至關重要,以確保我們能夠捕獲Bug,一旦捕獲到Bug,我們就能夠快速找到根本原因,從而減輕問題。借鑒Meta的例子,Polaris識別出了異常并立即觸發(fā)了警報。有了一致性追蹤的信息,值班工程師們不到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緩存數(shù)據(jù)庫

2024-12-26 15:01:29

2017-07-25 14:38:56

數(shù)據(jù)庫一致性非鎖定讀一致性鎖定讀

2022-10-19 12:22:53

并發(fā)扣款一致性

2024-01-15 10:38:20

多級緩存數(shù)據(jù)一致性分布式緩存

2022-03-29 10:39:10

緩存數(shù)據(jù)庫數(shù)據(jù)

2024-10-28 12:41:25

2019-03-27 13:56:39

緩存雪崩穿透

2025-08-08 07:09:58

2022-03-31 08:21:14

數(shù)據(jù)庫緩存雙寫數(shù)據(jù)一致性

2022-04-01 16:55:22

數(shù)據(jù)庫緩存日志

2022-07-25 09:48:22

緩存數(shù)據(jù)服務

2023-08-14 08:10:33

CPU緩存RFO

2021-06-11 09:21:58

緩存數(shù)據(jù)庫Redis

2021-02-05 08:00:48

哈希算法?機器

2021-02-02 12:40:50

哈希算法數(shù)據(jù)

2020-09-03 09:45:38

緩存數(shù)據(jù)庫分布式

2023-07-27 08:29:09

點贊
收藏

51CTO技術棧公眾號

久久99国产成人小视频| 国产伦精品一区二区三区视频青涩 | 美女国内精品自产拍在线播放| 全黄性性激高免费视频| 久久综合久色欧美综合狠狠| 日韩av在线中文| 日韩欧美在线观看| 成人欧美大片| 日本欧美黄网站| 爽好多水快深点欧美视频| 国产手机视频在线观看| 精品99一区二区三区| 97天天综合网| 国产一区二区三区直播精品电影 | 日韩中文字幕av| 国产一级黄色片免费| 久久aⅴ国产欧美74aaa| 国产精品91免费在线| 五月天综合网站| 97视频人免费观看| 日韩国产一区| 伊人春色在线| 亚洲专区视频| 国产精品久久久久久搜索| 国模娜娜一区二区三区| 成年人视频在线看| 国产69精品久久久久久| 国产又黄又大久久| av电影在线观看一区二区三区| 高清一区二区三区日本久| 毛片av中文字幕一区二区| 色婷婷综合久久久久中文字幕1| 啪啪激情综合网| 日韩成人在线资源| 自拍偷拍亚洲综合| av在线理伦电影| 国产一区二中文字幕在线看| 国产福利91精品一区二区三区| 国产污污在线观看| 中文字幕日韩在线视频| 一区二区三区网站| 国产一级片黄色| 欧美成人一区二区三区片免费 | 午夜小视频在线观看| 国语自产偷拍精品视频偷| 视频一区二区三区中文字幕| 免费高清特黄a大片| 日韩一区二区精品视频| 激情综合网址| 日韩一二三在线视频播| 18成人在线视频| 波多野结衣乳巨码无在线观看| 国产精品一区二区三区不卡| 亚洲精品欧美二区三区中文字幕| 一本一本久久a久久精品综合小说| 国产欧美日韩精品一区二区免费| 草草草视频在线观看| 欧美私模裸体表演在线观看| 亚洲人成亚洲精品| 国产精品视频网站在线观看| 宅男噜噜噜66一区二区66| 欧美一级精品| 成人在色线视频在线观看免费大全| 亚洲精品v天堂中文字幕| 制服诱惑一区二区| 国产视频福利在线| 国产日韩欧美影视| 亚洲精品一二三四区| 97青娱国产盛宴精品视频| 少妇人妻在线视频| 一区二区三区视频观看| 国产在线不卡视频| 精品人人视频| 一区二区高清视频| 精品国产伦一区二区三区免费 | 亚洲欧美综合一区| 欧美日韩高清一区| 久草成人资源| 91亚洲免费视频| 国产精品女上位| 中文字幕乱码亚洲无线精品一区| 超级污的网站| 成人免费视频网站| 精品国产一区久久| 99国产精品久久| 欧美激情成人| 日韩在线欧美在线| 国产欧美高清视频在线| 久久久一本精品| 欧美成人一区二区三区电影| 国模一区二区三区白浆| 高清精品在线| 伊人狠狠色丁香综合尤物| 欧美精品一二三区| 久久午夜精品一区二区| 最新国产露脸在线观看| 久久夜色精品国产噜噜av| 成人免费毛片片v| 日日夜夜免费精品| 欧美极品一区二区三区| 亚洲精品高清国产一线久久| 在线91免费看| aⅴ色国产欧美| 国产又色又爽又黄刺激在线视频| 欧美精品一区二区三区四区五区 | 可以免费看污视频的网站| 97超级碰碰碰| 亚洲婷婷国产精品电影人久久| 国产aⅴ精品一区二区三区久久| 天天干夜夜干| 91精品久久久久久蜜桃| 日韩欧美国产三级| 成人午夜视频免费看| 欧美日韩黄网站| 日本福利视频| 国产亚洲第一区| 亚洲精品国产综合久久| 9i在线看片成人免费| 久久影视三级福利片| 中文在线播放| 日韩欧美一区二区在线观看 | 一本到三区不卡视频| 国产日韩欧美高清免费| 激情图片在线观看高清国产| 久久久久久久中文| 日韩av成人在线| 欧洲av一区二区嗯嗯嗯啊| 噜噜噜躁狠狠躁狠狠精品视频| 岛国片av在线| 99热手机在线| av成人午夜| 亚洲午夜精品久久久久久性色 | 91国内免费在线视频| 亚洲午夜久久久久久久久电影网 | 五月天亚洲视频| 亚洲一区二区三区777| 91精品久久久久久久91蜜桃| 国产一区二区三区黄视频| 精品自拍偷拍| 最新电影电视剧在线观看免费观看| 欧美视频13p| 亚洲精品极品| 日韩美女视频在线| 国产女精品视频网站免费| 啊啊啊久久久| www.99av.com| 国产91精品一区二区绿帽| 亚洲美女喷白浆| 亚洲国产精品一区二区久久 | 国产精品一二三在线观看| 97精品欧美一区二区三区| 欧美高清激情brazzers| av在线综合网| 精品91久久久久| 亚洲va欧美va人人爽成人影院| 国产在线视频福利| 苍井空浴缸大战猛男120分钟| 国产经典一区二区三区| 欧美成人免费视频| 91麻豆精品国产自产在线观看一区| 永久久久久久| 欧美成人黄色小视频| 欧美网站一区二区| 国产日韩欧美a| 日韩不卡免费视频| 国产精品嫩模av在线| 伊人久久高清| jizzjizz在线观看| xx欧美撒尿嘘撒尿xx| 亚洲一区二区三区涩| 国产区精品视频| 超碰97人人做人人爱少妇| 欧美一区二区视频在线观看2022| 中文字幕一区在线观看| 精品在线亚洲视频| 中文字幕一区二区三区在线视频| 91精品国产自产精品男人的天堂| 2001个疯子在线观看| 韩国中文免费在线视频| 人人干人人干人人| 国产精品视频二| 日本视频精品一区| 91精品在线观看视频| 久久久亚洲国产天美传媒修理工| 性欧美videosex高清少妇| 免费亚洲电影| 成人av网站免费观看| 亚洲精品99久久久久| 免费成人av网站| 美女做暖暖视频免费在线观看全部网址91 | 日韩中文不卡| 天堂一区在线观看| 欧美精品影院| 免费永久网站黄欧美| 亚洲另类在线视频| 麻豆乱码国产一区二区三区| www.com操| 精品国产1区| 欧美在线制服丝袜| 欧美日韩最好看的视频|