精品国产一级在线观看,国产成人综合久久精品亚洲,免费一级欧美大片在线观看

當(dāng)前位置:統(tǒng)一通信/協(xié)作企業(yè)動態(tài) → 正文

Twitter開源分布式高性能日志復(fù)制服務(wù)

責(zé)任編輯:editor004 作者:張衛(wèi)濱 |來源:企業(yè)網(wǎng)D1Net  2016-05-19 12:06:51 本文摘自:INFOQ

日前,Twitter在Github上基于Apache 2許可證協(xié)議開源了其日志服務(wù)DistributedLog(DL)。DL是一個(gè)高性能的日志復(fù)制服務(wù),提供了持久化、復(fù)制以及強(qiáng)一致性的功能,這對于構(gòu)建可靠的分布式系統(tǒng)都是至關(guān)重要的,如復(fù)制狀態(tài)機(jī)(replicated-state-machines)、通用的發(fā)布/訂閱系統(tǒng)、分布式數(shù)據(jù)庫以及分布式隊(duì)列。

DistributedLog會分類維護(hù)記錄的序列(sequences of records),并將其稱為Log(又叫做Log Stream),將記錄寫入到DL Log的進(jìn)程稱之為Writer,從Log中讀取并處理記錄的進(jìn)程稱之為Reader。因此,它整體的軟件棧如下所示:

  具體來講,它包含如下幾個(gè)組成部分:

Log

Log是有序的、不可變的日志記錄(log record),它的數(shù)據(jù)結(jié)構(gòu)如下所示:

  日志記錄

每條日志記錄都是一個(gè)字節(jié)序列。日志記錄會按照序列寫入到日志流中,并且會分配一個(gè)名為DLSN(分布式序列號,DistributedLog Sequence Number)的唯一序列號。除了DLSN以外,應(yīng)用程序還可以在構(gòu)建日志記錄的時(shí)候設(shè)置自己的序列號,應(yīng)用程序所定義的序列號稱為TransactionID(txid)。不管是DLSN還是TransactionID都能用來定位Reader,使其從特定的日志記錄開始讀取。

Log分段(Log Segments)

Log會被分解為Log分段,每個(gè)分段中包含了其記錄的子集。Log分段是分布式的,應(yīng)該放到Log分段存儲中(如BookKeeper)。DistributedLog會基于配置好的策略來輪詢每個(gè)Log分段,要么是可配置的時(shí)間段(如每兩個(gè)小時(shí)),要么是可配置的最大規(guī)模(如每128MB)。所以Log的數(shù)據(jù)將會分為同等大小的Log分段,并且均勻分布到Log分段存儲節(jié)點(diǎn)上。這樣,Log的存儲就不會局限于單臺服務(wù)器的限制,同時(shí),能夠在集群中分散讀取的流量。

Log的數(shù)據(jù)可以永遠(yuǎn)保存,直到應(yīng)用程序顯式地將其截?cái)啵部梢栽谝粋€(gè)可配置的時(shí)間段內(nèi)保存。對于構(gòu)建復(fù)制狀態(tài)機(jī)來說,顯式截?cái)鄷浅S杏茫绶植际綌?shù)據(jù)庫。在數(shù)據(jù)何時(shí)能夠截?cái)噙@一點(diǎn)上,它們往往有著嚴(yán)格的控制。基于時(shí)間保留Log對于實(shí)時(shí)分析的場景更為有用,它們只關(guān)心一定時(shí)間內(nèi)的數(shù)據(jù)。

命名空間

屬于同一組織的Log流通常會歸類在同一個(gè)命名空間(namespace)下,并據(jù)此進(jìn)行管理。DL的命名空間基本上就是用來定位Log流在何處的。應(yīng)用程序可以在某個(gè)命名空間下創(chuàng)建和刪除流,也能將某個(gè)流截?cái)嗟浇o定的序列號上(DLSN或TransactionID均可以)。

Writer

Writer會將數(shù)據(jù)寫入到它們所選擇的Log中。所有的記錄都會按照順序添加到Log之中。序列號是由Writer所負(fù)責(zé)的,這就意味著對于某個(gè)Log,在給定的時(shí)間點(diǎn)上,只能有一個(gè)激活的Writer。當(dāng)出現(xiàn)網(wǎng)絡(luò)分區(qū)(network partition),導(dǎo)致兩個(gè)Writer試圖往同一個(gè)Log進(jìn)行寫入的時(shí)候,DL會保證其正確性,這是通過Log分段存儲的屏障(fencing)來實(shí)現(xiàn)的。

Writer由名為Write Proxy的服務(wù)層來提供和管理,Write Proxy用來接受大量客戶端的fan-in寫入。

Reader

Reader會從它們所選擇的Log中讀取記錄,這會在一個(gè)給定的位置開始。這個(gè)給定的位置可以是DLSN,也可以是TransactionID。Reader將會嚴(yán)格按照Log的順序讀取記錄。在同一個(gè)Log中,不同的Reader可以在不同的起始位置讀取記錄。

與其他的訂閱/發(fā)布系統(tǒng)不同,DistributedLog并不會記錄/管理Reader的位置,它將跟蹤的任務(wù)留給了應(yīng)用程序本身,因?yàn)椴煌膽?yīng)用在跟蹤和協(xié)調(diào)位置上可能會有不同的需求,很難用一種方式就將這些需求全部解決。在應(yīng)用程序?qū)用妫柚鞣N存儲(如ZooKeeper、FileSystem或Key/Value存儲)能夠很容易地跟蹤Reader的位置。

Log記錄可以緩存在名為Read Proxy的服務(wù)層中,從而應(yīng)對大量Reader的讀取。

Fan-in與Fan-out

DistributedLog的核心支持單Writer、多Reader的語義。服務(wù)層構(gòu)建在DistributedLog Core之上,支持大量的Writer和Reader。服務(wù)層包含Write Proxy和Read Proxy,Write Proxy管理Log的Writer,并且在機(jī)器宕機(jī)時(shí),能夠?qū)λ鼈冞M(jìn)行故障恢復(fù)。它能夠從眾多來源聚集Writer,允許不必關(guān)心Log的所有權(quán)(又稱為Fan-in)。Read Proxy通過將記錄放到緩存中,優(yōu)化了Reader的讀取路徑,以應(yīng)對成百上千的Reader讀取同一個(gè)Log流的狀況。

作為一個(gè)日志服務(wù),DistributedLog的優(yōu)勢可以總結(jié)為:

高性能:面對大量的并發(fā)日志時(shí),在可持久化的Writer上DL能夠提供毫秒級的延遲,同時(shí)還能應(yīng)對上千客戶端每秒大量的讀取和寫入操作。持久化和一致性:消息會持久化到磁盤上,并且以副本的形式存儲多份,從而避免丟失。通過嚴(yán)格的順序,保證Writer和Reader之間的一致性。各種工作負(fù)載:DL支持各種負(fù)載,包括延遲敏感的在線事務(wù)處理(OLTP)應(yīng)用(如分布式數(shù)據(jù)庫的WAL和基于內(nèi)存的復(fù)制狀態(tài)機(jī))、實(shí)時(shí)的流提取和計(jì)算以及分析處理。多租戶:針對實(shí)際的工作負(fù)載,DL的設(shè)計(jì)是I/O隔離的,從而支持多租戶的大規(guī)模日志。分層架構(gòu):DL有一個(gè)現(xiàn)代化的分層設(shè)計(jì),它將有狀態(tài)的存儲層與無狀態(tài)的服務(wù)提供層進(jìn)行了分離,能夠使存儲的擴(kuò)展獨(dú)立于CPU和內(nèi)存,因此支持大規(guī)模的寫入fan-in和讀取fan-out。

關(guān)于DistributedLog的概要架構(gòu)、以及使用過程,可以參考其Github上的文檔。

關(guān)鍵字:日志記錄namespace

本文摘自:INFOQ

x Twitter開源分布式高性能日志復(fù)制服務(wù) 掃一掃
分享本文到朋友圈
當(dāng)前位置:統(tǒng)一通信/協(xié)作企業(yè)動態(tài) → 正文

Twitter開源分布式高性能日志復(fù)制服務(wù)

責(zé)任編輯:editor004 作者:張衛(wèi)濱 |來源:企業(yè)網(wǎng)D1Net  2016-05-19 12:06:51 本文摘自:INFOQ

日前,Twitter在Github上基于Apache 2許可證協(xié)議開源了其日志服務(wù)DistributedLog(DL)。DL是一個(gè)高性能的日志復(fù)制服務(wù),提供了持久化、復(fù)制以及強(qiáng)一致性的功能,這對于構(gòu)建可靠的分布式系統(tǒng)都是至關(guān)重要的,如復(fù)制狀態(tài)機(jī)(replicated-state-machines)、通用的發(fā)布/訂閱系統(tǒng)、分布式數(shù)據(jù)庫以及分布式隊(duì)列。

DistributedLog會分類維護(hù)記錄的序列(sequences of records),并將其稱為Log(又叫做Log Stream),將記錄寫入到DL Log的進(jìn)程稱之為Writer,從Log中讀取并處理記錄的進(jìn)程稱之為Reader。因此,它整體的軟件棧如下所示:

  具體來講,它包含如下幾個(gè)組成部分:

Log

Log是有序的、不可變的日志記錄(log record),它的數(shù)據(jù)結(jié)構(gòu)如下所示:

  日志記錄

每條日志記錄都是一個(gè)字節(jié)序列。日志記錄會按照序列寫入到日志流中,并且會分配一個(gè)名為DLSN(分布式序列號,DistributedLog Sequence Number)的唯一序列號。除了DLSN以外,應(yīng)用程序還可以在構(gòu)建日志記錄的時(shí)候設(shè)置自己的序列號,應(yīng)用程序所定義的序列號稱為TransactionID(txid)。不管是DLSN還是TransactionID都能用來定位Reader,使其從特定的日志記錄開始讀取。

Log分段(Log Segments)

Log會被分解為Log分段,每個(gè)分段中包含了其記錄的子集。Log分段是分布式的,應(yīng)該放到Log分段存儲中(如BookKeeper)。DistributedLog會基于配置好的策略來輪詢每個(gè)Log分段,要么是可配置的時(shí)間段(如每兩個(gè)小時(shí)),要么是可配置的最大規(guī)模(如每128MB)。所以Log的數(shù)據(jù)將會分為同等大小的Log分段,并且均勻分布到Log分段存儲節(jié)點(diǎn)上。這樣,Log的存儲就不會局限于單臺服務(wù)器的限制,同時(shí),能夠在集群中分散讀取的流量。

Log的數(shù)據(jù)可以永遠(yuǎn)保存,直到應(yīng)用程序顯式地將其截?cái)啵部梢栽谝粋€(gè)可配置的時(shí)間段內(nèi)保存。對于構(gòu)建復(fù)制狀態(tài)機(jī)來說,顯式截?cái)鄷浅S杏茫绶植际綌?shù)據(jù)庫。在數(shù)據(jù)何時(shí)能夠截?cái)噙@一點(diǎn)上,它們往往有著嚴(yán)格的控制。基于時(shí)間保留Log對于實(shí)時(shí)分析的場景更為有用,它們只關(guān)心一定時(shí)間內(nèi)的數(shù)據(jù)。

命名空間

屬于同一組織的Log流通常會歸類在同一個(gè)命名空間(namespace)下,并據(jù)此進(jìn)行管理。DL的命名空間基本上就是用來定位Log流在何處的。應(yīng)用程序可以在某個(gè)命名空間下創(chuàng)建和刪除流,也能將某個(gè)流截?cái)嗟浇o定的序列號上(DLSN或TransactionID均可以)。

Writer

Writer會將數(shù)據(jù)寫入到它們所選擇的Log中。所有的記錄都會按照順序添加到Log之中。序列號是由Writer所負(fù)責(zé)的,這就意味著對于某個(gè)Log,在給定的時(shí)間點(diǎn)上,只能有一個(gè)激活的Writer。當(dāng)出現(xiàn)網(wǎng)絡(luò)分區(qū)(network partition),導(dǎo)致兩個(gè)Writer試圖往同一個(gè)Log進(jìn)行寫入的時(shí)候,DL會保證其正確性,這是通過Log分段存儲的屏障(fencing)來實(shí)現(xiàn)的。

Writer由名為Write Proxy的服務(wù)層來提供和管理,Write Proxy用來接受大量客戶端的fan-in寫入。

Reader

Reader會從它們所選擇的Log中讀取記錄,這會在一個(gè)給定的位置開始。這個(gè)給定的位置可以是DLSN,也可以是TransactionID。Reader將會嚴(yán)格按照Log的順序讀取記錄。在同一個(gè)Log中,不同的Reader可以在不同的起始位置讀取記錄。

與其他的訂閱/發(fā)布系統(tǒng)不同,DistributedLog并不會記錄/管理Reader的位置,它將跟蹤的任務(wù)留給了應(yīng)用程序本身,因?yàn)椴煌膽?yīng)用在跟蹤和協(xié)調(diào)位置上可能會有不同的需求,很難用一種方式就將這些需求全部解決。在應(yīng)用程序?qū)用妫柚鞣N存儲(如ZooKeeper、FileSystem或Key/Value存儲)能夠很容易地跟蹤Reader的位置。

Log記錄可以緩存在名為Read Proxy的服務(wù)層中,從而應(yīng)對大量Reader的讀取。

Fan-in與Fan-out

DistributedLog的核心支持單Writer、多Reader的語義。服務(wù)層構(gòu)建在DistributedLog Core之上,支持大量的Writer和Reader。服務(wù)層包含Write Proxy和Read Proxy,Write Proxy管理Log的Writer,并且在機(jī)器宕機(jī)時(shí),能夠?qū)λ鼈冞M(jìn)行故障恢復(fù)。它能夠從眾多來源聚集Writer,允許不必關(guān)心Log的所有權(quán)(又稱為Fan-in)。Read Proxy通過將記錄放到緩存中,優(yōu)化了Reader的讀取路徑,以應(yīng)對成百上千的Reader讀取同一個(gè)Log流的狀況。

作為一個(gè)日志服務(wù),DistributedLog的優(yōu)勢可以總結(jié)為:

高性能:面對大量的并發(fā)日志時(shí),在可持久化的Writer上DL能夠提供毫秒級的延遲,同時(shí)還能應(yīng)對上千客戶端每秒大量的讀取和寫入操作。持久化和一致性:消息會持久化到磁盤上,并且以副本的形式存儲多份,從而避免丟失。通過嚴(yán)格的順序,保證Writer和Reader之間的一致性。各種工作負(fù)載:DL支持各種負(fù)載,包括延遲敏感的在線事務(wù)處理(OLTP)應(yīng)用(如分布式數(shù)據(jù)庫的WAL和基于內(nèi)存的復(fù)制狀態(tài)機(jī))、實(shí)時(shí)的流提取和計(jì)算以及分析處理。多租戶:針對實(shí)際的工作負(fù)載,DL的設(shè)計(jì)是I/O隔離的,從而支持多租戶的大規(guī)模日志。分層架構(gòu):DL有一個(gè)現(xiàn)代化的分層設(shè)計(jì),它將有狀態(tài)的存儲層與無狀態(tài)的服務(wù)提供層進(jìn)行了分離,能夠使存儲的擴(kuò)展獨(dú)立于CPU和內(nèi)存,因此支持大規(guī)模的寫入fan-in和讀取fan-out。

關(guān)于DistributedLog的概要架構(gòu)、以及使用過程,可以參考其Github上的文檔。

關(guān)鍵字:日志記錄namespace

本文摘自:INFOQ

電子周刊
回到頂部

關(guān)于我們聯(lián)系我們版權(quán)聲明隱私條款廣告服務(wù)友情鏈接投稿中心招賢納士

企業(yè)網(wǎng)版權(quán)所有 ©2010-2024 京ICP備09108050號-6 京公網(wǎng)安備 11010502049343號

^
  • <menuitem id="jw4sk"></menuitem>

    1. <form id="jw4sk"><tbody id="jw4sk"><dfn id="jw4sk"></dfn></tbody></form>
      主站蜘蛛池模板: 宁夏| 平定县| 黄大仙区| 衢州市| 马鞍山市| 和政县| 德化县| 永川市| 土默特左旗| 蛟河市| 吉水县| 延津县| 平果县| 华容县| 界首市| 曲周县| 张家界市| 黄山市| 南丰县| 丘北县| 乌兰察布市| 新竹县| 上林县| 刚察县| 侯马市| 鸡东县| 永新县| 芦溪县| 新余市| 南陵县| 黎川县| 连城县| 兴山县| 绥德县| 古丈县| 浙江省| 林西县| 调兵山市| 广丰县| 桃园县| 普定县|