2011-04-30 90 views
1

這似乎是一個愚蠢的問題,但一直在思考它幾天,我只想出了一個答案,所以我想我會打開它,看看別人的想法。哪裏存儲系統標誌?

我有它運行的cron作業PHP腳本,並檢查我們的CDN是建立和運行。如果是,則需要設置一個標誌以顯示「真」,如果不是則顯示「假」。每當用戶訪問該網站時,主要PHP網頁都需要檢查該標誌,並適當設置CDN URL變量。

的查詢,我們在哪裏存儲這個標誌?我們可以把它放在一個數據庫中,但是那麼數據庫會在每次頁面加載時都「碰撞」。另外,由於我們使用Memcache,可能會導致更新延遲(儘管顯然有解決方法)。

我的下一個想法是將其保存到服務器上的一個簡單的文本文件。但是a)我們有負載均衡的服務器,儘管我們可以在每臺服務器上運行相同的CRON作業,但似乎效率不高,並且b)打開和讀取文本文件可能會減慢頁面負載,因爲它涉及磁盤活動 - 每當系統每週提供300萬個網頁時,這種情況並不好!

理想的做法是保留其頁面之間的價值PHP系統變量 - 但當然,前提是不存在的!它不是那種應該作爲cookie存儲在用戶機器上的信息。

有沒有人有任何想法?歡迎所有評論!

回答

2

如果您已經在使用Memcache,那麼您爲什麼需要CronJob?

將針對CDN檢查到你的正常應用程序代碼。將結果緩存在Memcache中,使用Cron Interval的一生。如果緩存過時,請在CDN上進行完整檢查,否則返回緩存的結果。

如果你想保持cron作業和關心磁盤I/O,考慮using a RAM diskSemaphoresShared Memory到存儲結果。但是當你已經在使用memcache的時候,這看起來似乎毫無意義。

+0

當然,您的意思是將結果作爲簡單密鑰/查詢對存儲在Memcache中?沒有想到這一點。這樣它不會使用磁盤I/O,並且不需要數據庫。 – TIW 2011-04-30 12:45:43

+0

@TIW是的,這就是我的意思。 – Gordon 2011-04-30 12:48:31

1

你已經使用數據庫連接了嗎?

  • 如果是這樣,那麼使用它;我敢肯定,你可以很容易地將它融入現有的複製機制。

  • 如果沒有,那麼不管你在這裏做的是要增加開銷,無論是讀取文本文件在磁盤上或從那裏你以前不是數據庫中讀取。