Amazon Web Services 又推出新服務...

Amazon Web ServicesEC2 上推出新的服務:「New Features for Amazon EC2: Elastic Load Balancing, Auto Scaling, and Amazon CloudWatch」。

這次推出了三個新服務,第一個是 Elastic Load Balancing,支援 HTTP 與 HTTPS。以前是自己開一台 instance 架設 (像是 HAProxy),現在由 Amazon 直接提供,簡化 Load balancer 的管理問題。(因為大多數的 open source load balancer 並沒有專門接 Amazon EC2 的 instance api,所以會需要自己寫一些程式接,但自己寫的 code quality 不一定穩定...)

第二個服務是 CloudWatch,用以監控 instance 資訊,這個部份有不少 open source solution 可以用,而且產生的資料都還不錯 (也就是「堪用」),所以好處沒有像上面的 load balancing 那麼明顯。

第三個服務是 Auto Scaling,利用 CloudWatch 所取得的資訊,當系統負載達到設定的條件時就加機器,或是在負載降低時減少機器 (像是 web server)。這個功能在很早前就有人做了,像是去年四月 TechCrunch 就有報導過的 open source solution:「Scalr: The Auto-Scaling Open-Source Amazon EC2 Effort」,或是專門靠此賺錢的 RightScale (這項服務對於 RightScale 很傷,由於 Amazon 提供 API,會更容易開發 open source solution...)

補上這些東西後,現在 Amazon Web Services 比較缺的是 cache 的機制... (open source solution 有 memcached,不過跑 memcached 時 cpu resource 實在用不到這麼多,開 15GB RAM instance 還附帶 "8 EC2 Compute Units"...)

JSON、Protocol Buffers、Thrift 的效率比較

Google 翻資料,結果三月初的時候有人試著 benchmark,結果還蠻讓人意外:「Performance comparison of Thrift, JSON and Protocol Buffers」。

結論是 JSON 在速度上不會輸給 Protocol BuffersThrift。討論出來的原因是因為 Protocol Buffers 與 Thrift 的功能比 JSON 多出太多。

不過我應該會用 JSON 寫東西吧,畢竟是個 open standard...

portmaster

portmaster 是一套 FreeBSD 下的套件升級工具,已經用了一陣子... (參考二月時「portmaster」這篇文章)

這次從 portmaster -BDuw 換成 portmaster -BDtuw 了。

隨便舉個例子,以 cs-metaPort 為例,假設這個 port 有三個 dependency packages,分別為 cs-basicSoftware、cs-wwwSoftware、cs-securitySoftware,而這三個 dependency packages 下面又有一卡車的 dependency packages...

使用 portmaster -BDuw cs-metaPort 會先檢查 cs-{basicSoftware,wwwSoftware,securitySoftware} 是否有新版,如果只有 cs-basicSofteare 有新版,才會繼續遞迴下去...

但如果用 portmaster -BDtuw cs-metaPort,則是一開始會用 all-depends-list 列出所有的 packages 檢查。

可以依照不同的情況使用...

在 FreeBSD 上裝 FFmpeg

去年六月的時候搞了一個 FFmpeg ports (參考「FFmpeg 的 FreeBSD ports」),但是因為 x264 改 function call,所以那個 SVN 版本不能用了...

大概一個月前試著 checkout ffmpeg 新版下來更新,發現有錯誤訊息,因為當時忙就沒有試著找 bug,剛好這兩天有空,就花了一些時間 trace 問題,發現是沒有定義 __BSD_VISIBLE 的問題造成的,暫時先用 #define __BSD_VISIBLE 1 的方式解掉...

這次的版本是 r18864,把 libavdevice/bktr.clibavdevice/oss_audio.clibavformat/udp.c 三個檔案最前面加上上面說的 define 就會過了。

晚點有時間再把 port 整理出來,更新 http://wiki.gslin.org/ffmpeg 這邊...

MySQL 5.0 整合

MySQL 5.0 有分 community branch (奇數號,像是 5.0.77) 與 enterprise branch (偶數號,像是 5.0.78),現在兩者合併了:「The quiet end of the community-enterprise split」,bzr log 在這:「Merge community up to enterprise, thus ending the community-server
adventure.
」。

之後 MySQL 5.0 就不會分成 Community 版本與 Enterprise 版本,修 bug 的時候也只要注意一個版本就可以了。

用 XtraBackup 產生 slave

Percona 的 Vadim 示範如何用 XtraBackup 產生一份 slave 需要的資料:「Btw xtrabackup is not only backup..」。

方法是用 xtrabackup 將資料以 tar 格式輸出到 stdout,透過 pipe + ssh 直接寫入預定要當 slave 的 server,所以這個方法不用擔心原本的 master server 空間不足的問題。

WordPress exporter

之前在「WordPress 的 exporter」這篇提到 WordPress 的匯出程式很糟。最後我是直接把用不到的欄位用 preg_replace() 幹掉,避免 XML library 因為語法錯誤而無法匯入。

雖然暫時解決了,不過還是看看目前的進度,發現有計劃要以 XML library 改寫,但是沒人跳下去寫:「make export/import output valid xml and parse xml using simplexml」,這個計畫大概是遙遙無期... XD