星期五, 4月 11, 2008

用 MySQL connect timeout 處理 DB failover 以及 load sharing

程式碼大約是這樣:
function foo(array $db_srvs)
{
// $db_srvs 是簡單的 array('db1', 'db2', 'db3') 即可
shuffle($db_srvs);
ini_set('mysql.connect_timeout', 1);
foreach ($db_srvs as $h) {
$db = @mysql_connect($db_srvs, $user, $pass, $dbname);
if ($db)
return $db;
}
return NULL;
}

當然還是要有其他的 monitoring software 去盯 MySQL server,不然會有很多連線會卡一秒鐘...

星期二, 4月 08, 2008

用 rsync 同步程式碼

如標題所寫的,用 rsync 同步程式碼。

我的打算是用 Subversion 更新,然後用 post-commit 把程式碼推出去,配合 --exclude 的參數去掉 .svn/ 的目錄。

星期一, 4月 07, 2008

KISS

好的架構會保持 KISS principle

Zend Framework 裡 Zend_Controller 的 module

現在還在想要怎麼處理這個部份,如果全部塞 default module,那麼事情都很簡單,但是 Controller 檔案就會很大,撇開效能問題,管理上也是一個大問題。

如果使用 module 拆開,那麼 controllers/models/views 都會拆開,controllers 本身是小問題,但 models 必須逐個加到 include_path 裡 (參考「缺乏 Model 支援的 Zend Framework」這篇的方法),而且 views 的部份就沒有比較好的方法共用 (像是我寫了一個 forwardurl.phtml,以非 30x Redirect 的方式重導)。

應該會用後者的方法,不過要想方法把 models 與 views 的問題解決...

有時候很好玩

有台機器叫做 develop,但是大家都沒在上面開發,都跑去一台叫做 testphp 的機器開發,然後上面跑 RoR...