Aug 30

幾個月前,我幫人家建置了一套網頁系統,用以觀察網站瀏覽趨勢。
想當然爾,這種系統勢必會對資料庫產生大量 INSERT 或 UPDATE 的 query,而且會保留大量歷史性資料。

為了使系統能快速存取後端資料庫,我將存放 raw data 資料表的 storage engine 設定為 InnoDB。
(因為 InnoDB 支援了 row lock。 :oops:
並搭配定時執行的 script 整理資料,進行統計,並存放在 MyISAM 格式的資料表中。

最近,這套系統的後端資料庫伺服器,mysqld 三不五時會自行 restart,系統狀態也看似正常(根據他們的說法)。
追蹤後,發現 InnoDB 的運作狀態被忽略了...

光是其中一塊放置 raw data 的資料表就存放了三百多萬筆資料,佔用了 3xx MB 的空間,可是 innodb_buffer_pool_size 只有 256 MB,連 mysqldump 都無法完全撈出這塊資料表的內容...
追查程式後,發現原本用以刪除過期 raw data 的那些程式碼片段都被註解掉.. =_=|||

這段故事給我們幾個啟示:

  • InnoDB 拿來放 raw data 真的不錯,但是要定時整理,否則維護難度會提高...
  • 沒事別雞婆,胡亂更改人家的設計... XD

Technorati Tags: ,

Tags: ,
(Visited 9472 times)
Aug 16

現在許多廣告信件都是亂丟,配合來源位址的偽造,可能造成主機在發信上有所阻礙。
例如這種狀況:

廣告信偽造的寄件位址是 no-this-name@yahoo.com.tw,寄給 no-this-user@example-host.com。如果 example-host.com 沒有 no-this-user 這個使用者,那信件會被退到 no-this-name@yahoo.com.tw,久而久之,example-host.com 可能會被 yahoo.com.tw 擋掉。

之前的文章 只提過 exim 上面的擋法,最近是摸出了 Postfix 的設定方式。

  1. 讓系統進行檢查,main.cf 要有這些片段:
    smtpd_restriction_classes =
            fakemail_yahoo
            fakemail_gmail
            ...
    #
    fakemail_yahoo = check_client_access pcre:/usr/local/etc/postfix/fake/yahoo
    fakemail_gmail = check_client_access pcre:/usr/local/etc/postfix/fake/gmail
    #
    smtpd_sender_restrictions =
            ...,
            check_sender_access hash:/usr/local/etc/postfix/fake/CHECK,
            ...
  2. 製作規則對應檔(/usr/local/etc/postfix/fake/CHECK),內容大致如下(中間的大空格用 tab 隔開):
    yahoo.com       fakemail_yahoo
    yahoo.com.tw    fakemail_yahoo
    gmail.com       fakemail_gmail
    ...
  3. 製作規則檔(以 /usr/local/etc/postfix/fake/yahoo 為例),內容如下(中間的大空格用 tab 隔開):
    /(^|\.)yahoo\.com$/     DUNNO
    /./                     REJECT Fake address
  4. 用 postmap 產生規則對應檔的 hash map,接著讓 postfix 重新讀入設定檔。

對了,如果有 MX server 的話,都得一起上,不然沒用。
跑了一段時間後,效果還真的蠻顯著的。 :cool:

Technorati Tags: , ,

Tags: , ,
(Visited 9539 times)