metaQ隨筆

1.metaQ服務器消息過濾,有broker服務端過濾和客戶端過濾

2.MetaQ寫文件是順序寫,讀是隨機讀,怎麼提高讀的效率,竟然是page cache和內存映射,這裏暫時認爲他們是同一個東西。參考下面:

通過內存映射的方式讀寫文件

metaq在文件讀寫操作上做了一定的優化,使用內存映射的方式完成讀寫,替代了傳統的IO操作,從而大大的減少了文件讀寫系統調用的次數,提升了IO的性能。

傳統的文件訪問:

  • 系統調用打開文件,獲取文件描述符
  • 使用read write 系統調用進行IO
  • 系統調用關閉文件

這種方式是非常低效的, 每一次I/O操作都需要一次系統調用。 另外, 如果若干個進程訪問同一個文件, 每個進程都要在自己的地址空間維護一個副本, 浪費了內存空間

內存映射的方式:

  • 打開文件,得到文件描述符。
  • 獲取文件大小
  • 把文件映射成虛擬內存(mmap)
  • 通過對內存的讀寫來實現對文件的讀寫(memset或memcpy)
  • 卸載映射
  • 關閉文件

首先建立好虛擬內存和磁盤文件之間的映射(mmap系統調用),當進程訪問頁面時產生一個缺頁中斷,內核將頁面讀入內存(也就是說把磁盤上的文件拷貝到內存中),並且更新頁表指向該頁面。
所有進程共享同一物理內存,物理內存中可以只存儲一份數據,不同的進程只需要把自己的虛擬內存映射過去就可以了,這種方式非常方便於同一副本的共享,節省內存。
經過內存映射之後,文件內的數據就可以用內存讀/寫指令來訪問,而不是用Read和Write這樣的I/O系統函數,從而提高了文件存取速度。

3.順序,metaq提高嚴格順序和普通順序或者說局部順序,前者適用於mysql數據庫binlog這類的同步,後者適合普通業務上消息順序

4.metaQ做分佈式事務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章