長野雅廣 (Masahiro Nagano) 的 MySQL Beginners Talk

長野雅廣的「MySQL Beginners Talk で LT してきました」這篇 slide 對不熟悉 MySQL 的人講了兩個幾乎不會錯的觀念:

先討論後面這點,算是任何 database 都通用的法則:當你遇到效能問題時,監控機制可以提供毛線球的線頭,讓你知道慢在哪裡:什麼時間滿載 (於是可以猜測是 cron job 造成,或是對應 MRTG 圖時知道是一般使用者造成的流量造成),另外可以知道瓶頸是在 CPU (是單顆 CPU 滿載,還是整台機器都被吃滿),I/O (是讀取滿載,還是寫入造成滿載),或是網路。

前面這點解釋成「如果你不知道你在做什麼,就用 InnoDB Plugin 吧」,對於初學者 (slide 的標題),就簡化成「既然你是初學者,你就用 InnoDB Plugin 吧」。原因是:

  • InnoDB 是 crash safe engine,MyISAM 不是。
  • 常被用到的 table 其實會被 cache 在記憶體內,用 MyISAM 與 InnoDB 差異不大。
  • 最重要的一點是,InnoDB 有支援 transaction (MVCC),在大量寫入時比起 MyISAM 比較不會產生 table lock。由於 InnoDB 支援 transaction,所以功能也比 MyISAM 多。

slide 不長,但這兩個重點還蠻重要的...

MiCloud 測試...

2012-06-01 Update:請參考「MiCloud,繼續測試...」這篇。

昨天因為工作關係跟神通的人聊到 MiCloud,台灣少數幾個 IaaS 項目...

與國內其他 IaaS (或是說「VPS」) 比較不同的地方在於 MiCloud 與 Joyent 合作,不過我不想跑 SmartOS,所以這點沒有太大差異。另外是線上就可以直接申請信用卡付費,以小時計算,不需要傳真開機器... (這點 HiCloud 實在是...)

先把結論列出來:

  • 整體輸給 Linode 東京機房不少,除了國內的報帳需求外,沒有使用的誘因。

網站的部份:

  • micloud.tw 本身有 HTTPS (有買 SSL Certificate),但卻 redirect 到 portal.micloud.tw... (要輸入帳號密碼的地方反而沒有 SSL hmmm...)
  • 網站動線上卡卡的,常常會遇到「要按某個功能但找不到地方」,常常需要切到別的頁面才能找到...

再來開機器的時候遇到的幾個問題:

  • 最小台的機器 (1GB) 有點大台,據說有在規劃比較小台的機器。
  • 支援的 image 種類有點少,以 Ubuntu 目前只有 10.04 LTS,據說也是有規劃比較新的版本。實際升級發現可以升級到 12.04 LTS (我是 10.10、11.04、11.10、12.04 一路升上來),所以這不是大問題,但能預先提供會比使用者自己升級方便許多。
  • 開機器的頁面上說不需要設定 hostname (系統會幫你設定),但實際上不設定會出現一個看不懂的錯誤訊息... 我是著自己輸入 hostname 也是一樣,直到回家後我突然發現不能輸入 dash 後才開成功!XDDD (2012-06-01 Update:這條的兩個問題都已經解決)

開完機器後遇到的問題:

  • Ubuntu 10.04 LTS 預設的 apt server 是 us.archive.ubuntu.com,這應該要設為 tw.archive.ubuntu.com,或是 jp.archive.ubuntu.com (因為台灣 Ubuntu mirror 一向都不怎麼穩定)。
  • Ubuntu 10.04 LTS 裝的是 desktop 版本而非 server 版本?我看到整包 Firefox 在裡面... (2012-06-01 Update:現在 dpkg -l 看不到 xorg 與 firefox 了)
  • 在管理界面上看不到目前的流量使用量?

然後是網路:

  • 依照 TWNIC 上的資料來看 (2012 年 4 月),神通的機房對外主要有三組 100Mbps 的線路,分別是遠傳EBIX 以及 AGC,不過 routing 上是以遠傳以及 EBIX 為主。
  • HiNet 去回不同路,從神通到 HiNet 是走遠傳,但回程走 EBIX。
  • 同上,不知道是哪一段有問題,會發現對 HiNet 的 latency 有時會超過 20ms,於是在台灣機房的優勢就不見了...

另外附上 openssl speed 的測試數據,這是升級到 12.04 LTS 後的數據:https://gist.github.com/2832383,跟東京相比,單顆速度快一些,但東京的機器都有 4-core 可以用,所以...

Wine 玩 Diablo III 音樂會頓的問題...

這幾天用 WineDiablo III,有時聲音會狂 lag,關掉 Diablo III 後重跑還是一樣,要重開機才會恢復...

仔細看 Wine 丟出來的訊息,發現訊息內有給這個網頁:「winepulse in ubuntu wine ppa」,其中提到 1.5.3 以後的 ppa 版本 (寫這篇文章的時候是 1.5.4) 可以在啟動 Wine 時加上環境變數 WINENOPULSE=1 解決聲音的問題。

目前測起來是正常了,不知道還會不會有其他問題要解...

在 Ubuntu (12.04) 上用 Wine 1.5.4 跑 Diablo III

主要是參考「WineHQ - Diablo III 1.0.*」這個網頁,另外找資料的時候有找到「[心得] Diablo III on Ubuntu 12.04 x86 - 看板 DIABLO - 批踢踢實業坊」這篇。

我是使用沒有 non-patch wine 1.5.4 跑的 (透過「Latest official WineHQ releases : “Ubuntu Wine Team” team」這邊提供的 ppa),所以必須先用 Windows 裝完 Diablo III 後再 copy 到 Ubuntu 裡面。

登入問題用 echo 0|sudo tee /proc/sys/kernel/yama/ptrace_scope 解,但這個方法需要在每次重開機後再設定一次,在 /etc/sysctl.conf 內設定 kernel.yama.ptrace_scope=0 可以使得系統在每次重開機自動設定。

特效全開還是跑得不錯...

Ubuntu 12.04 與 Nvidia GTX 550 Ti

Ubuntu 12.04 換完顯示卡,重開機就沒畫面了,原因是系統的顯卡驅動程式不夠新。

解法是:

  • 開機的時候先進 GRUB 畫面,進 recovery mode 生一個 root shell 出來。
  • 把網路弄通,對於有發 DHCP 的設備,用 ifconfig eth0 up + dhclient 應該夠用。
  • nvidia-current

重開機後就正常了...

Diablo III

遊戲一向都是硬體升級的主要動力... :/

Blizzard 的遊戲都會發展 Windows 與 Mac 兩個平台,Diablo III 這次也是一樣。CPU 與記憶體一向都是小問題,顯卡才是真正的大問題...

手上的 MBAMac Mini 都是 Intel HD Graphics 3000,有支援但是效果開不起來,而桌機則是 8600 GT,也是差不多的狀況,加上 NTFS resize 一直失敗,決定去光華商場弄一顆硬碟與一張顯卡來跑,在網路上翻了一下資料,看起來 GTX 550 拿來玩 Diablo III 應該是夠用...

買完回到家後查資料才發現 GTX 550 全力跑的時候是個吃電大怪物,桌機上面加上新硬碟後就有四顆硬碟,目前靠 350W 的 Power 推,這樣大概不夠用,懶得出門只好上 24h 去弄顆新的 Power,應該是有機會在光華開門前就到家... :o

所以又回頭到 Mac Mini 上面安裝起來玩,果然頓頓的,升了一級後還是先去睡覺,等早上來裝新的 Power...

有陣子沒吃的這麼兇暴了...

六個人從十點開始吃,先是肥睡睡跟食材合照,另外冰箱有 1.5kg 的魚肉與 2.2kg 的豬肉:

已經把 1.5kg 的魚肉吃完了,決定把 2.2kg 的豬肉「切一半」的經典切法:

接下來幾張是十年前在新竹吃唰唰鍋的經典場景重現:

結束後喝飲料,直接把飲料倒進冰塊包裝內:

叔叔有練過,小朋友不要學喔~

花時間看看 PostgreSQL...

雖然工作上都還是用 MySQL,但還是來看看其他的 database... 印象中對 PostgreSQL 最主要的差異 (與 MySQL 相比較) 是在於 index 的彈性...

PostgreSQL 也是個超大的 open source project,所以除了可以到 PostgreSQL 的官方網站找資料外,英文版維基百科上的資料也是對於熟悉 PostgreSQL 的入口:「PostgreSQL - Wikipedia, the free encyclopedia」。

現在 PostgreSQL 最新的 stable 版本是 9.1。依照 Versioning policy 文件,從第一個 major 版本釋出後,提供五年的軟體支援。現在支援的版本包括 8.3、8.4、9.0 與 9.1。另外最近剛出 9.2 beta1,在「PostgreSQL 9.2 Beta 1 Available for Testing」有些說明可以看。

功能面上,除了本來就很強的功能外,內建 Replication 是從 9.0 開始,其中 9.0 與 9.1 分別支援 async replication 與 sync replication,9.2 則是多了 Cascading replication (應該是指串接)。

商業支援則是常常可以看到 EnterpriseDB。有名的用戶包括了 InstagramHeroku

接下來就是實際玩看看...

PHP 5.4 與 php-test-helpers

先給連結,PHP 5.4 可以編的版本在這裡:github.com/gslin/php-test-helpers,clone 下來後的安裝方法是:

phpize
./configure
make
make install

另外自己增加 extensions.ini

extension=test_helpers.so

主要是 PHP 內部的資料結構有變動,本來存取的方式要改掉。發了 pull request 但不知道作者會不會收,如果有需要的人可以自己先裝。

會用到 php-test-helpers 是因為寫 test case 的時候要換掉整個 HttpRequest,而 RunKit 不能換系統的 HttpRequest,所以找了不少 extension 發現 php-test-helpers 可以用。

換法是這樣:

set_new_overload(function($name){
    if ('HttpRequest' == $name) {
        return 'My_HttpRequest';
    }   
    return $name;
}); 

拿掉可以直接呼叫 unset_new_overload(); 整個拔乾淨...

AWS CloudFront 增加的功能

引用 CTO Werner Vogels 寫的「Dynamic Content Support in Amazon CloudFront」這篇好了,雖然沒有講完整,但把重點都提到了,而且比官方網誌「Amazon CloudFront - Support for Dynamic Content」這篇清楚...

這次 AWS CloudFront 上的功能都可以在 AWS Management Console 上設定,不需要另外安裝 3rd party 軟體或是自己寫程式呼叫 API。

這次最主要的更新在支援 query string。在之前的版本,這兩個 url 會被 CloudFront 當作是同樣的 url 而被 cache 成同一份:

  • http://www.example.com/user.php?username=gslin
  • http://www.example.com/user.php?username=gslin2

而這次可以設定是否要將 query string 納入計算。

另外一個重要的設計是支援 Cache-ControlExpires,當 Cache-Control 給出 no-cache 的時候,新版的 CloudFront 可以依照 Cache-Control 的要求處理。

有了這兩個改善後,本來需要在 server workaround 的事情就可以交還給 CloudFront 處理。之後應該是試著支援像 AkamaiDynamic Site Accelerator 的功能?另外一方面也有可能讓消費者自己選擇 PoP?

功能愈來愈完整了...