DistributedLog 分布式高性能日志復制服務

 更新時間:2016-06-20 10:14:15   作者:佚名   我要評論(0)

項目地址:http://distributedlog.io/index.htmlDL是一個高性能的日志復制服務,提供了持久化、復制以及強一致性的功能,這對于構建可靠的分布式系統都是至關重要的,如復制

項目地址:http://distributedlog.io/index.html

DL是一個高性能的日志復制服務,提供了持久化、復制以及強一致性的功能,這對于構建可靠的分布式系統都是至關重要的,如復制狀態機(replicated-state-machines)、通用的發布/訂閱系統、分布式數據庫以及分布式隊列。

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

DistributedLog

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

Log

Log是有序的、不可變的日志記錄(log record),它的數據結構如下所示:

DistributedLog

日志記錄

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

Log分段(Log Segments)

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

Log的數據可以永遠保存,直到應用程序顯式地將其截斷,也可以在一個可配置的時間段內保存。對于構建復制狀態機來說,顯式截斷會非常有用,如分布式數據庫。在數據何時能夠截斷這一點上,它們往往有著嚴格的控制。基于時間保留Log對于實時分析的場景更為有用,它們只關心一定時間內的數據。

命名空間

屬于同一組織的Log流通常會歸類在同一個命名空間(namespace)下,并據此進行管理。DL的命名空間基本上就是用來定位Log流在何處的。應用程序可以在某個命名空間下創建和刪除流,也能將某個流截斷到給定的序列號上(DLSN或TransactionID均可以)。

Writer

Writer會將數據寫入到它們所選擇的Log中。所有的記錄都會按照順序添加到Log之中。序列號是由Writer所負責的,這就意味著對于某個Log,在給定的時間點上,只能有一個激活的Writer。當出現網絡分區(network partition),導致兩個Writer試圖往同一個Log進行寫入的時候,DL會保證其正確性,這是通過Log分段存儲的屏障(fencing)來實現的。

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

Reader

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

與其他的訂閱/發布系統不同,DistributedLog并不會記錄/管理Reader的位置,它將跟蹤的任務留給了應用程序本身,因為不同的應用在跟蹤和協調位置上可能會有不同的需求,很難用一種方式就將這些需求全部解決。在應用程序層面,借助各種存儲(如ZooKeeper、FileSystem或Key/Value存儲)能夠很容易地跟蹤Reader的位置。

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

Fan-in與Fan-out

DistributedLog的核心支持單Writer、多Reader的語義。服務層構建在DistributedLog Core之上,支持大量的Writer和Reader。服務層包含Write Proxy和Read Proxy,Write Proxy管理Log的Writer,并且在機器宕機時,能夠對它們進行故障恢復。它能夠從眾多來源聚集Writer,允許不必關心Log的所有權(又稱為Fan-in)。Read Proxy通過將記錄放到緩存中,優化了Reader的讀取路徑,以應對成百上千的Reader讀取同一個Log流的狀況。

作為一個日志服務,DistributedLog的優勢可以總結為:

  • 高性能:面對大量的并發日志時,在可持久化的Writer上DL能夠提供毫秒級的延遲,同時還能應對上千客戶端每秒大量的讀取和寫入操作。

  • 持久化和一致性:消息會持久化到磁盤上,并且以副本的形式存儲多份,從而避免丟失。通過嚴格的順序,保證Writer和Reader之間的一致性。

  • 各種工作負載:DL支持各種負載,包括延遲敏感的在線事務處理(OLTP)應用(如分布式數據庫的WAL和基于內存的復制狀態機)、實時的流提取和計算以及分析處理。

  • 多租戶:針對實際的工作負載,DL的設計是I/O隔離的,從而支持多租戶的大規模日志。

  • 分層架構:DL有一個現代化的分層設計,它將有狀態的存儲層與無狀態的服務提供層進行了分離,能夠使存儲的擴展獨立于CPU和內存,因此支持大規模的寫入fan-in和讀取fan-out。


    您可能感興趣的文章:

    相關文章

    • DistributedLog 分布式高性能日志復制服務

      DistributedLog 分布式高性能日志復制服務

      項目地址:http://distributedlog.io/index.htmlDL是一個高性能的日志復制服務,提供了持久化、復制以及強一致性的功能,這對于構建可靠的分布式系統都是至關重要的,如復制
      2016-06-20

    最新評論

    买宝宝用品赚钱吗 股票推荐老师讲卖惨 上海天天选4开奖结果 黑龙江11选5前三组 贵州11选5遗漏数据查询 精准六尾资料 山西11选5怎么中奖 广西体彩十一选5一定牛 sg飞艇可信吗 佳永配资体验 江苏福彩快三技巧 宁夏11选5平台 江西快三跨度走势图乐彩网 股票融资融券开通条件 pk10赛车历史开奖记录 上海体育彩票十一选五啊 11选5广东