實時圖像壓縮系統

  • 軟件基本介紹
    •      Bolt是一個實時裁剪壓縮圖片服務器,其比nginx的image_filter快2倍以上,主要是由於Bolt對一張圖片只作一次處理,就算在處理圖片的過程當中,其餘的客戶端也在請求此圖片,Bolt也能保證只有一個線程在處理此圖片。

          另外Bolt替換緩存機制,處理過的圖片再也不進行第二次處理,除非內存不足的時候,Bolt纔會處理LRU算法來刪除緩存中的圖片,在啓動Bolt的時候可使用「--max-cache」啓動參數來設置最大內存限制。Bolt使用LRU算法來淘汰緩存的圖片,也就是說通常只會淘汰較少訪問的圖片,這就能夠很好的限制Bolt的內存使用。

      nginx

  • 軟件開發流程:
    •   主要流程: 
      • 解析命令行命令
      • 加載基本設置選項,利用守護進程守護設置屬性(當系統退出的時候,設置屬性纔會清空)
      • 初始化全部信號集合,將SIGPIPE信號加入信號集(SIGPIPE信號:當服務器退出,客戶端依然向服務器發送數據的時候,就會返回一個這個信號,表示服務器已經關閉沒法接收數據)
      • 調用函數將信號所有在主進程中進行處理,這樣就是將異步信號處理變成了同步信號處理。(方法:利用線程一個線程處理信號,同時其餘線程幹其餘的,這個線程不會干擾其餘線程)
      • 初始化日誌文件
      • 初始化服務器
        • 建立基本的變量,用哈希表(本身實現的哈希表,參考C源碼實現)去存儲圖片緩存和等待的處理的圖片,用雙向鏈表存儲其餘數據
        • 經過非阻塞模式建立套接字,同時利用libevent的事物機制與socke監聽套接字實現安全的多線程機制,用事物對線程進行管理(對圖片緩存和圖片是否重複進行管理);
      • 初始化鏈接
      • 初始化工做進程
        • 利用libevent的事件機制和ImageMagick庫實現對圖片的壓縮處理,同時經過線程互斥鎖來處理每一張圖片(若是不重複則加入map,不然刪除加入最新的),這樣就保證了圖片處理是經過每個單線程進行處理的,加快了處理速度。

      • 經過libevent庫的timeve,設置定時機制,記錄每一張圖片處理以後的最近使用時間,生成LRU淘汰算法機制(當內存不夠的時候根據LRU算法(一個小時之內的不用淘汰)進行淘汰),釋放了一部份內存。
相關文章
相關標籤/搜索