基於Nginx進行地圖瓦片緩存的方案描述


文章版權由作者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/

1. 背景

       在產品的迭代中,我們完成了移動端瓦片緩存方案和服務端瓦片緩存方案。但是當我們遇到舊產品不易升級,或正式運行項目無法立刻進行產品更新時,我們可以采用基於Nginx的緩存設置來實現第三方瓦片服務的瓦片緩存。最近在某24小時運行項目中,團隊成員hwg針對性的做了Nginx配置的設置和實施,我這里做一個總結。

2.Nginx的緩存策略

       這里給出網友已經做好的一張示意圖:

 

       其核心就是HIT檢查,通過定義好的Key去緩存里獲取,當沒有獲取到時則為MISS狀態,然后進行服務轉發,將獲取的結果存入緩存。

3.實際項目詳細配置

3.1定義緩存配置

 

       相關配置的詳細說明:

  proxy_cache_path:緩存存放路徑。如果路徑帶上/,則表示絕對路徑。如果不帶/,則表示相對路徑。這里寫的my_cache,則是相對路徑。

  levels : 設置緩存文件目錄層次;如果所有的緩存放入一個文件夾,則影響效率。這里設置的是levels=1:2 ,表示兩級目錄;

    key_zone : 在共享內存中設置一塊存儲區域來存放緩存的key和metadata(類似使用次數),這樣nginx可以快速判斷一個request是否命中或者未命中緩存,1m可以存儲8000個key,10m可以存儲80000個key;

  max_size : 最大cache空間,如果不指定,會使用掉所有disk space,當達到配額后,會刪除最少使用的cache文件;

  inactive : 未被訪問文件在緩存中保留時間,本配置中如果60分鍾未被訪問則不論狀態是否為expired,緩存控制程序會刪掉文件,默認為10分鍾;“需要注意的是,inactive和expired配置項的含義是不同的,expired只是緩存過期,但不會被刪除,inactive是刪除指定時間內未被訪問的緩存文件”;

  use_temp_path : 如果為off,則nginx會將緩存文件直接寫入指定的cache文件中,而不是使用temp_path存儲,official建議為off,避免文件在不同文件系統中不必要的拷貝;

3.2 緩存使用

 

        proxy_cache :啟用proxy cache,指定聲明好的緩存區域key_zone;
        proxy_cache_valid  200 206 304 301 302 10d; 含義為對httpcode為200\206等的緩存結果緩存10天;

   proxy_cache_key $uri : 定義緩存唯一key,通過唯一key來進行hash存取;

        proxy_no_cache和proxy_cache_bypass:當為0時表示緩存,不為0時表示不緩存。這里與匹配語句配合,當傳入參數中包含指定規則時,才進行緩存。

3.3其他擴展配置

 

       對訪問請求記錄的日志路徑,以及記錄日志格式的定義。

4.結果測試

       第一次訪問時,未命中:

 

      但是此時產生了緩存文件(二級目錄):

 

  第二次訪問時,命中:

 

       查看日志,確定性能提升:

 

                                                                          -----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/

                                                                               如果您覺得本文確實幫助了您,可以微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^

                                                                                                                     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM