忙碌...

年末了,除了一些年末總是會有的事情外 (像是帳務問題),最近一直找問題、解決問題、再找問題、再解決問題...

一個是 SmokePing 啟動速度很慢的問題,我在「Smokeping 啟動速度很慢的問題」有提到問題點與 dirty hack 的方法。

最近想辦法改善 am-utils (amd) 在 FreeBSD 上的穩定度,jnlin 看起來頗無奈 XD

MySQL Percona 版本跑起來相當不錯,不過還是踩中地雷 (5.1 也有的地雷,某些情況下會用到比較奇怪的 index,不僅效率較差,結果居然是錯的...),得生一組可重製問題的 public dataset 讓 MySQL 官方修正。

然後秋番也差不多結束了,冬番也快要開始了,這個元旦大概會狂衝進度,把一些覺得還可以的作品看完吧 XD

XtraDB:InnoDB 的取代品

Percona 宣佈新的 Storage Engine,從 InnoDB 修改出的 XtraDB:Announcing Percona XtraDB Storage Engine: a Drop-in Replacement for Standard InnoDB

據他們所宣稱,這個版本會 100% 相容於 MySQL 內建的 InnoDB,所以他們推薦大家直接換過去用。而 OurDelta 的 5.1 版本會直接內建 XtraDB 作為 InnoDB 的取代品。

這狠狠的打了 Sun/MySQL AB (以及 Oracle) 一巴掌。

有些有趣的想法可以從 Jeremy Zawodny (High Performance MySQL 第一版第二版的作者之一) 的 The New MySQL Landscape 這篇文章裡看到。配合 SlashdotIs MySQL's Community Eating the Company? 這篇看就更有感覺了... (尤其是 comments)

Update 2008/12/19:有興趣的人可以看「XtraDB benchmarks - 1.5X gain in IO-bound load」這篇文章,裡面有一份 benchmarking。(不是很嚴謹的方式)

從 EC2 Infrastructure 這篇文章看一些觀念...

標題不知道怎麼下,先訂這樣...

我會訂很多 feed 的一個原因是,有時候總是會看到一些有趣的東西。像是 Amazon Web Services Blog 的文章大多都沒什麼看頭,主要是廣告性質。但有時候總是有一些有趣的東西可以吸收,像是「Architecting for the Cloud」這篇文章裡所提到的「EC2 Infrastructure」這篇。

對我而言,MySQL Configuration 這段提到的觀念讓你知道 XFS 上的 MySQL 要如何備份。雖然他是以 Amazon EBS 備份,但同樣的觀念也可以用在 NetApp 或是 Sun Storage 7000 Unified Storage Systems 上。(snapshot 的觀念)

然後是 Postfix configuration 這段所提到的觀念。如果你發信常常會被擋住,有一些公司有提供 SMTP 服務幫你處理。他所提到的 AuthSMTP 變成一個 entry point,我可以用這個站台去其他的論壇找資料比較,看看哪些服務的穩定性比較好,而且價位相對起來比較便宜。

Facebook 的 memcached

目前 Facebook 用了 800 台,共 28TB 的 memcached server:「Scaling memcached at Facebook」。計算上應該是有很多 64GB RAM 這個等級的 server 在撐。(2007 年五月的時候是 200 台 16GB 的機器:Re: Largest production memcached install?)

Facebook 使用的量夠大,所以花了不少時間找出 memcached 本身的問題。他們把修正後的版本放到 Github 上,這陣子應該會慢慢 back-port 回官方版本:「Facebooks modifications to memcached for I/O, CPU and memcory scaling」。

首先是 memcached 用 TCP,但前端的 Web Server (Apache) 有很多連線,這對 memcached 本身不是問題 (因為使用 libevent),但每個連線都會消耗一些記憶體 (像是 buffer),所以 Facebook 改寫 buffer 的部份,以 buffer pool 的方式共用資源。("we implemented a per-thread shared connection buffer pool for TCP and UDP sockets")

另外是開發 UDP memcached Protocol,用這個方式提高 TCP Protocol 本身的效率問題。但實際在使用時發現 Linux kernel 對於 UDP socket 的 locking mechanism 並不好。治本的方法是修正 Linux kernel 的 UDP socket locking mechanism,不過他們認為工程太浩大,所以改為使用多個 UDP socket 解決這個問題。

在 appliction level 則是儘量使用 multi-get,盡可能減少封包數量以及延遲時間 (latency)。

再來是因為封包數量太多,Linux kernel 對於網路處理預設的方式會有過多的 interrupt,所以這部份要調整成 polling-based algorithm (並且配合 interrupt 避免過高的 latency),以此提高 Network I/O 效率。

接著發現 memcached 的統計分析是一個 global lock,在 8-core 上會有 20%~30% 的 CPU resource 卡在 lock 上,所以這部份被改寫成 per-thread stat,並且在真正需要產生資料時再加總,避免了 lock 的問題。最後則是發現 Linux kernel 處理 UDP transmit 的 queue 本身也有 lock 問題,這部份的改善則是透過 batch processing 減少 locking 問題,降低 locking 的需求。

在這些修正後,單台 server 可以從原先的 20k UDP requests/sec 拉到 50k UDP requests/sec。

Amazon SimpleDB 降價

Amazon Web Services 最近動作好多 XD

Amazon SimpleDB 是一個類似 Google BigTable 的資料庫服務。從 2008/12/1 開始,Amazon 決定降價!Data Storage 的部份除了從 USD$1.50/GB 降到 USD$0.25/GB (原來的 1/6!),還另外提供六個月免費「試玩」的 quota:

We've made the business decision to go with SimpleDB even simpler than it was before. You can now get started for free. For at least the next six months, you can consume up to 500 MB of storage, and you can use up to 25 machine hours each month. You can transfer 1 GB of data in, and another 1 GB out. You can move as much data to and from Amazon EC2 as you would like, for free.

試玩的 quota 如上所寫,500MB、25 machine hours/month、1GB/month 流入流量、1GB/month 流出流量。

站如果不大,幾乎不會花到錢 :p

MySQL 5.1.30 (5.1 的第一個 GA version)

建議觀望兩個版本 XD

MySQL 5.1 正式釋出了,比預訂的 12/6 早了一個多禮拜。目前 dev.mysql.com 處於被 DDoS 的狀態,不太容易連上,需要的人應該儘量到最近的 mirror site 找。

這個版本不建議大家先上的原因是,我們 (PIXNET) 自己測試 5.1.29-rc 時發現在大量的 request 時,有時候會 connect fail,而這個 bug 在 5.1.30 的 changelog 裡沒看到相關的訊息。一種解法是在 application 層 retry,不過這種方法實在是不太舒服,還是等一陣子再說... XD

MySQL Community 版本

MySQL ABSun 買走後,MySQL 官方宣佈了一些事情,到目前看起來,最大的改變是把 MySQL 的版本控制軟體從 BitKeeper (close source) 轉移到 Bazaar

版本控制軟體變成 open source 使得 source code 的取得以及追蹤變容易了,於是有許多人就自己建立 branch 發展,相當熱鬧。(因為有版本控制,容易與官方的 branch cross-merge,有些人會在 community 版互相 merge)

主要幾個有名的 patch vendor 包括:

遇到奇怪的 bug,或是多 CPU 效能瓶頸時,試看看這些 community version 會是不錯的方向。