原创 丟棄RTMP協議的FLASH視頻直播方案所踩過的坑

很久沒有寫博客了,最近一直在忙FLASH直播相關的事情,終於完成了階段性工作。先描述下我們的FLASH方案。我們主要用FLASH在瀏覽器展示實時遊戲直播視頻,視頻可以除了可以再WEB上觀看,也可以在語音客戶端觀看和手機觀看。開始我們採用基

原创 關於多路語音混音的思考與實現

在最近的項目開發中涉及到一個伴奏和類似K歌的功能,最明顯的做法就是將播放器裏播放的聲音撲捉到緩衝區裏與麥克風的聲音做混合,然後編碼發送出去。這裏有個關鍵環節就是混音。因爲是音樂類的聲音混合,所以要求儘量保真。我看了數字信號處理方面關於波形

原创 Google File System系列:Snapshot流程

GFS的snapshot採用的是寫時複製的機制進行的,GFS快照操作幾乎可以瞬間完成對一個文件或者目錄樹(“源”)做一個拷貝,並且幾乎不會對正在進行的其它操作造成任干擾。我們的用戶可以使用快照迅速的創建一個巨大的數據集的分支拷貝(而且經常

原创 Redis的字典(dict)rehash過程源碼解析

Redis的內存存儲結構是個大的字典存儲,也就是我們通常說的哈希表。Redis小到可以存儲幾萬記錄的CACHE,大到可以存儲幾千萬甚至上億的記錄(看內存而定),這充分說明Redis作爲緩衝的強大。Redis的核心數據結構就是字典(dict

原创 解析MongoDB存儲引擎WiredTiger:事務實現

WiredTiger從被MongoDB收購到成爲MongoDB的默認存儲引擎的一年半得到了迅猛的發展,也逐步被外部熟知。WiredTiger(以下簡稱WT)是一個優秀的單機數據庫存儲引擎,它擁有諸多的特性,既支持BTree索引,也支持LS

原创 WiredTiger實現:一個LRU cache深坑引發的分析

從mongoDB 3.0版本引入WiredTiger存儲引擎(以下稱爲WT)以來,一直有同學反應在高速寫入數據時WT引擎會間歇性寫掛起,有時候寫延遲達到了幾十秒,這確實是個嚴重的問題。引起這類問題的關鍵在於WT的LRU cache的設計模

原创 MySQL系列:innodb源碼分析之mini transaction

    日誌是innodb一個非常重要的模塊,在innodb中有兩類日誌:redo log和undo log。其中redolog日誌是用來做數據異常恢復和數據庫重啓時頁數據同步恢復的,redo log是建立在在mini transacti

原创 如何實現1080P延遲低於500ms的實時超清直播傳輸技術

本文是去年我發佈在高可用架構公衆號的文章,在此做一次轉載。 本來打算將WiredTiger系列的技術繼續分享出來的,由於這段時間都在忙關於超清視頻實時傳輸的事情,只能把WiredTiger的分享文章延後了,在這裏先把這半年做的事情分享出

原创 MySQL系列:innodb源碼分析之基礎數據結構

近一年來一直在分析關於數據庫相關的源碼,前段時間分析了levelDB的實現和BeansDB的實現,這兩個數據庫網絡上分析的文章很多,也都比較分析的比較深,所以也就沒有太多必要重複勞動。最近開始關注關係數據庫和MYSQL,當然主要還是數據庫

原创 RUDP傳輸那些事兒

最近和很多實時音視頻領域的朋友交流中都有談論到RUDP(Reliable UDP),這其實是個老生常談的問題,RUDP在很多著名的項目上都有使用,例如google的QUIC和webRTC。在UDP之上做一層可靠,很多朋友認爲這是很不靠譜的

原创 MySQL系列:innodb源碼分析之內存管理

在innodb中實現了自己的內存池系統和內存堆分配系統,在innodb的內存管理系統中,大致分爲三個部分:基礎的內存塊分配管理、內存夥伴分配器和內存堆分配器。innodb定義和實現內存池的主要目的是提供內存的使用率和效率,防止內存碎片和內

原创 MySQL系列:innodb源碼分析之page結構解析

 在表空間結構分析當中,我們知道innodb的最小物理存儲分配單位是page頁,在MySQL-3.23版本的源碼中,頁只有兩種頁,一種是index page,一種是undo page。其類型值定義在fil0fil.h當中。      

原创 MySQL系列:innodb源碼分析之redo log恢復

在上一篇《innodb源碼分析之重做日誌結構》中我們知道redo log的基本結構和日誌寫入步驟,那麼redo log是怎麼進行數據恢復的呢?在什麼時候進行redo log的日誌推演呢?redo log的推演只有在數據庫異常或者關閉後,

原创 聊天系統中的用戶列表併發問題分析

1.問題描述 上週末一個做視頻直播的朋友向我諮詢他們遇到的一個關於大量內存對象併發的問題,具體問題描述是這樣的,在遊戲視頻直播的時候,需要向觀看直播的人提供一個可以自由聊天的功能(相當於QQ羣),這就要涉及到在服務器端實現一個管理用戶列表

原创 MySQL系列:innodb源碼分析之文件IO

innodb作爲數據庫引擎,自然少不了對文件的操作,在innodb中所有需要持久化的信息都需要文件操作,例如:表文件、重做日誌文件、事務日誌文件、備份歸檔文件等。innodb對文件IO操作可以是煞費苦心,其主要包括兩方面,一個是對異步io