日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Facebook 如何管理150亿张照片

發(fā)布時間:2023/12/9 编程问答 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Facebook 如何管理150亿张照片 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Facebook 的照片分享很受歡迎,迄今,Facebook 用戶已經(jīng)上傳了150億張照片,加上縮略圖,總?cè)萘砍^1.5PB,而每周新增的照片為2億2000萬張,約25TB,高峰期,Facebook 每秒處理55萬張照片,這些數(shù)字讓如何管理這些數(shù)據(jù)成為一個巨大的挑戰(zhàn)。本文由 Facebook 工程師撰寫,講述了他們是如何管理這些照片的。

舊的 NFS 照片架構(gòu)

老的照片系統(tǒng)架構(gòu)分以下幾個層:

  • 上傳層接收用戶上傳的照片并保存在 NFS 存儲層。
  • 照片服務(wù)層接收 HTTP 請求并從 NFS 存儲層輸出照片。
  • NFS存儲層建立在商業(yè)存儲系統(tǒng)之上。

因為每張照片都以文件形式單獨存儲,這樣龐大的照片量導(dǎo)致非常龐大的元數(shù)據(jù)規(guī)模,超過了 NFS 存儲層的緩存上限,導(dǎo)致每次招聘請求會上傳都包含多次I/O操作。龐大的元數(shù)據(jù)成為整個照片架構(gòu)的瓶頸。這就是為什么 Facebook 主要依賴 CDN 的原因。為了解決這些問題,他們做了兩項優(yōu)化:

  • Cachr: 一個緩存服務(wù)器,緩存 Facebook 的小尺寸用戶資料照片。
  • NFS文件句柄緩存:部署在照片輸出層,以降低 NFS 存儲層的元數(shù)據(jù)開銷。

新的 Haystack 照片架構(gòu)

新的照片架構(gòu)將輸出層和存儲層合并為一個物理層,建立在一個基于 HTTP 的照片服務(wù)器上,照片存儲在一個叫做 haystack 的對象庫,以消除照片讀取操作中不必要的元數(shù)據(jù)開銷。新架構(gòu)中,I/O 操作只針對真正的照片數(shù)據(jù)(而不是文件系統(tǒng)元數(shù)據(jù))。haystack 可以細分為以下幾個功能層:

  • HTTP 服務(wù)器
  • 照片存儲
  • Haystack 對象存儲
  • 文件系統(tǒng)
  • 存儲空間

存儲

Haystack 部署在商業(yè)存儲刀片服務(wù)器上,典型配置為一個2U的服務(wù)器,包含:

  • 兩個4核CPU
  • 16GB – 32GB 內(nèi)存
  • 硬件 RAID,含256-512M NVRAM 高速緩存
  • 超過12個1TB SATA 硬盤

每個刀片服務(wù)器提供大約10TB的存儲能力,使用了硬件 RAID-6, RAID 6在保持低成本的基礎(chǔ)上實現(xiàn)了很好的性能和冗余。不佳的寫性能可以通過高速緩存解決,硬盤緩存被禁用以防止斷電損失。

文件系統(tǒng)

Haystack 對象庫是建立在10TB容量的單一文件系統(tǒng)之上。文件系統(tǒng)中的每個文件都在一張區(qū)塊表中對應(yīng)具體的物理位置,目前使用的文件系統(tǒng)為 XFS。

Haystack 對象庫

Haystack 是一個簡單的日志結(jié)構(gòu),存儲著其內(nèi)部數(shù)據(jù)對象的指針。一個 Haystack 包括兩個文件,包括指針和索引文件:

Haystack 對象存儲結(jié)構(gòu)

指針和索引文件結(jié)構(gòu)

Haystack 寫操作

Haystack 寫操作同步將指針追加到 haystack 存儲文件,當指針積累到一定程度,就會生成索引寫到索引文件。為了降低硬件故障帶來的損失,索引文件還會定期寫道存儲空間中。

Haystack 讀操作

傳到 haystack 讀操作的參數(shù)包括指針的偏移量,key,代用Key,Cookie 以及數(shù)據(jù)尺寸。Haystack 于是根據(jù)數(shù)據(jù)尺寸從文件中讀取整個指針。

Haystack 刪除操作

刪除比較簡單,只是在 Haystack 存儲的指針上設(shè)置一個已刪除標志。已經(jīng)刪除的指針和索引的空間并不回收。

照片存儲服務(wù)器

照片存儲服務(wù)器負責接受 HTTP 請求,并轉(zhuǎn)換成相應(yīng)的 Haystack 操作。為了降低I/O操作,該服務(wù)器維護著全部 Haystack 中文件索引的緩存。服務(wù)器啟動時,系統(tǒng)就會將這些索引讀到緩存中。由于每個節(jié)點都有數(shù)百萬張照片,必須保證索引的容量不會超過服務(wù)器的物理內(nèi)存。

對于用戶上傳的圖片,系統(tǒng)分配一個64位的獨立ID,照片接著被縮放成4種不同尺寸,每種尺寸的圖擁有相同的隨機 Cookie 和 ID,圖片尺寸描述(大,中,小,縮略圖)被存在代用key 中。接著上傳服務(wù)器通知照片存儲服務(wù)器將這些資料聯(lián)通圖片存儲到 haystack 中。

每張圖片的索引緩存包含以下數(shù)據(jù)

Haystack 使用 Google 的開源 sparse hash data 結(jié)構(gòu)以保證內(nèi)存中的索引緩存盡可能小。

照片存儲的寫/修改操作

寫操作將照片數(shù)據(jù)寫到 Haystack 存儲并更新內(nèi)存中的索引。如果索引中已經(jīng)包含相同的 Key,說明是修改操作。

照片存儲的讀操作

傳遞到 Haystack 的參數(shù)包括 Haystack ID,照片的 Key, 尺寸以及 Cookie,服務(wù)器從緩存中查找并到 Haystack 中讀取真正的數(shù)據(jù)。

照片存儲的刪除操作

通知 Haystack 執(zhí)行刪除操作之后,內(nèi)存中的索引緩存會被更新,將便宜量設(shè)置為0,表示照片已被刪除。

重新捆扎

重新捆扎會復(fù)制并建立新的 Haystack,期間,略過那些已經(jīng)刪除的照片的數(shù)據(jù),并重新建立內(nèi)存中的索引緩存。

HTTP 服務(wù)器

Http 框架使用的是簡單的 evhttp 服務(wù)器。使用多線程,每個線程都可以單獨處理一個 HTTP 請求。

結(jié)束語

Haystack 是一個基于 HTTP 的對象存儲,包含指向?qū)嶓w數(shù)據(jù)的指針,該架構(gòu)消除了文件系統(tǒng)元數(shù)據(jù)的開銷,并實現(xiàn)將全部索引直接存儲到緩存,以最小的 I/O 操作實現(xiàn)對照片的存儲和讀取。

本文國際來源:http://www.facebook.com/FacebookEngineering#/note.php?note_id=76191543919&ref=mf
中文翻譯來源:COMSHARP CMS 官方網(wǎng)站

轉(zhuǎn)載于:https://www.cnblogs.com/mytec/archive/2009/05/01/2140988.html

總結(jié)

以上是生活随笔為你收集整理的Facebook 如何管理150亿张照片的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。