今天整理存儲的時候發現80多臺服務器上都有一個計劃任務,每分鐘從管理後臺把圖片同步至本地。我統計了下使用一年多了只佔用很少了空間,圖片數量也很少,大小平均在10K左右。
這種情況我覺得再使用上面那種方式來進行同步就有點浪費了,而且還提高了維護成本,雖然計劃任務是通過puppet推送下去的。
於是我提出了整改方案,其中一個方案就是使用memcache來存儲圖片。nginx可以直接從memcahed中取出緩存展示給瀏覽器,從而提高性能。
memcached是nginx的核心模塊,默認是可以直接使用。這個模塊只能讀,不能寫,不過有第三方模塊可以做到。
貼出示例:
1) nginx的配置如下:
location ^~ /images/ { set $memcached_key "$uri"; #用URI作爲key去memcached中去讀取內容 memcached_pass 127.0.0.1:11211; memcached_connect_timeout 5s; memcached_read_timeout 5s; memcached_send_timeout 5s; memcached_buffer_size 32k; error_page 404 502 504 = @fallback; } location @fallback { proxy_pass http://backend; }
2) 使用PHP向memcached寫入一張圖片:
<?php $pic = file_get_contents('./test.jpg'); $memcache = new Memcache; $memcache->connect('localhost', 11211); $memcache->add('/images/test.jpg', $pic, false, 0); //這裏設置緩存不過期 $memcache->close();
3) 使用瀏覽器訪問:http://localhost/images/test.jpg
上面是單臺memcached的示例,在生產環境中可以使用upstream模塊調度多個memcached實例來達到高可用。
參考文檔:http://nginx.org/en/docs/http/ngx_http_memcached_module.html