作者cleanwind (骨傲風清(掛網))
看板PHP
標題Re: [請益] 請問多台主機操作同個檔案應該如何鎖定 …
時間Thu Oct 15 19:21:52 2009
我想 ... 不管怎樣都會發生,
A Server執行指令之前,就被B Server搶走的問題 XD
其實我不是很懂,原 PO 為什麼要使用這種架構?
如果是為了分流,寫同一個檔案又要為了安全,
似乎可能會讓執行時間被迫拉長?!
不過撇開這些不談,我倒有個想法。
PHP 本身就有 flock 的功能,
那能不能讓 www1 ~ wwwN 主機對檔案存取的需求,
全部透過其中一台主機,例如他叫 data?
底下是騙 P 幣的繪圖
主機 data
存取檔案的需求 ┌─────┬─────────────┐
www1────────→│ │ │
www2────────→│ │ 對檔案的操作 │
www3────────→│ fo.php │───────→/tmp/test │
www4────────→│ │ │
www5────────→│ │ │
└─────┴─────────────┘
那至於 fo.php 該怎麼設定權限,
就可以考慮 Server 的架構,看是要在檔案裡面限制 IP 來源?
或者,使用Apache自身的限制都可以。
甚至,根本不需要透過 *.php 來達成,搞不好可以直接使用 C 來做?!
如果要完全避免碰撞的問題,我會這樣處理,
對檔案操作分成讀取與寫入,讀取時不鎖,
但是寫入時則要鎖,而且在寫入之前先檢查檔案是否還一樣?
不然 www1 改完,www2 又用比較舊的版本改掉 XD
這是小小的建議,請參考。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 120.101.0.129
→ guardlan:感謝建議, 這個方式可以試試看, 將寫檔的機制改由一台操 10/16 18:23
→ guardlan:作, 這樣的話就可以用flock方式去做了, 不過這方法在操作 10/16 18:24
→ guardlan:量很大的情況下, 應該會Delay到, 我先試試看, 謝謝. 10/16 18:25