星期三, 5月 25, 2011

AWS Route53 與 ELB 功能的改進

剛剛看到 AWS 丟出來 Route 53ELB 的新功能,每個都還蠻重要的...

首先是 Route 53 與 ELB 整合,於是 root domain 可以直接用 Route 53 指到 ELB 上面,不用再自己惡搞了。

然後是在「ELB 的 IP 信任問題...」提到的 IP 信任問題,這次提出的 ELB security group 解決了。

最後是 IPv6 的部份,ELB 先支援 IPv6 only 或是 Dual Stack (當然原來的 IPv4 only 還是存在),於是可以提供 IPv6 服務... 不過 X-Forwarded-For 不知道會長什麼樣子。

星期二, 5月 24, 2011

無名 API 中的 Base64 上傳功能...

前幾天去無名 API 說明會,技術面中其中一個比較「有趣」的功能是「Base64 上傳」,在「無名小站 API 文件 - Version 1.2」這邊可以看到 API 文件關於 Base64 的部份。

剛好今天寫 code 的時候回去重新讀 OAuth Core 1.0a,把之前一堆環節串起來,才知道為什麼無名會設計 Base64 上傳...

OAuth Core 1.0a 內提到有三種方式可以傳遞 OAuth Protocol Parameter,而且是有優先順序的,從最優先開始分別是:
  • In the HTTP Authorization header as defined in OAuth HTTP Authorization Scheme.
  • As the HTTP POST request body with a content-type of application/x-www-form-urlencoded.
  • Added to the URLs in the query part (as defined by [RFC3986] section 3).
其中第一種方式沒辦法傳 extra parameter,第二種方式在上傳檔案時會變成 multipart。於是,上傳時要用第三種方式,把所有 parameter (OAuth Protocol 與 Extra) 在簽完後塞到 query string 裡面,而檔案用 POST (multipart) 送出...

由於檔案上傳的部份沒簽到,所以可以在傳輸過程中間被換掉 (整個 request 看起來仍然合法),所以一般會加上一個 extra parameter 傳 POST 資料的 Secure Hash。

但之前 Manic 就跟我抱怨 PHP 上面的 OAuth Library 都遺忘了檔案上傳這塊,他得自己建立 POST body 丟出去 XDDD

於是我就瞬間理解為什麼要用 Base64 上傳了... XD

PS:這是一種可能性,也有可能是 Y! policy 覺得要用 OAuth 直接簽進去才安全,這只有當初定 API spec 的人才知道了...

星期六, 5月 21, 2011

ELB 的 IP 信任問題...

AWS ELBAmazon Web Services 提供的 Load balancing 方案,這個系統設計成 HA 架構,所以不需要自己煩惱要如何用 EC2 做到一樣的事情。而且也因為不需要自己架 server 起來弄,在機器成本上會比較便宜,不過他要照頻寬計費,會依照情況不同而有不同的費用...

他不是 DSR (Direct Server Return) 類型的架構,而是一般 proxy 的架構,也就是 server 會看到 ELB 的 IP,而非使用者的 IP address。這個問題 Amazon Web Services 提供的解法還蠻一般的:將使用者的 IP 加到 X-Forwarded-For header 裡面。到這邊都沒什麼問題...

但是,我沒辦法知道我沒辦法知道 ELB 會從哪些 IP address 連進來,所以我沒辦法設定 trusted IP list。另外一條路是找看看 EC2 的 security group 有沒有支援 ELB,但也找不到... 於是就變成無解的問題了... :o

不過在「ELB and Security Groups」這邊有些討論,像是:
What if all ELBs were members of a special security group, and you could then lock down your webservers by allowing only traffic from that security group? Note: this would be one giant security group that contains the ELBs from all AWS users, not just your security group. Would that suffice? or do you need the security group to be specific to only your loadbalancer?
然後 4 月的時候有 private beta 可以測,到 4 月 28 號的時候收起來,所以這陣子應該有機會看到了...

PIXNET 徵人:PHP 程式設計師多名

要徵:
  • PHP 程式設計師:
    • 工作內容:現有 PHP 程式維護及新功能開發。
    • 工作時間:一般為 10:00-19:00 (一~五)。
    • 就職日:可馬上就職,或 2011 年八月前到職即可。
    • 地點:台北市中山區 (捷運行天宮站旁)。
    • 需求:需熟 PHP 與資料庫操作。
    • 薪資:約 40k/month,其他技能面議另談。
請寄到 gslin at pixnet.tw 與 ieon at pixnet.tw。

星期四, 5月 19, 2011

Perl 5.14.0

有些太新的東西還是不適合拿到工作上用,都是在陪大家踩地雷...

Net::OAuth 中用到 RSA-SHA1 時會使用 Crypt::OpenSSL::RSA,但在 Perl 5.14.0 上面不會動,在「CPAN Testers Reports: Reports for Crypt-OpenSSL-RSA」這邊也還蠻明顯的,整個 Perl 5.14 都掛了。

其實解法很早就有人提出來,不過作者一直沒動:「Bug #65947 for Crypt-OpenSSL-RSA: Bleadperl v5.13.9-540-g0a0b6c9 breaks」。

先繼續龜在 5.12.3 好了...

星期日, 5月 15, 2011

EC2 與 Linode 的差異...

AWS EC2Linode 多了不少工具,在實際使用「雲端」的時候方便不少...

第一個是 EC2 的 firewall 設定包括了 group 的觀念,EC2 上可以設定「同一個 account 下的機器可以互通」這種 rule,在 Linode 上必須自己寫 script 去 Linode API 撈出 IP 表,並設定到 iptables 裡面。但由於是 JSON/XML 格式,沒有辦法很簡單用 shell script 直接搞定,變成要透過 PHP/Perl/Python,而這又造成了要多裝軟體的問題... 不僅如此,就結果而言,還必須用 cron 之類的工具定時更新表格,不然名單裡不會更新。另外 UDP 封包因為 source ip 可以偽造,還是沒辦法信任。

這點在 Gearmanmemcached 這類沒有認證功能的服務是必要功能。而對於 Web server 來說也很重要 (因為要考慮 X-Forwarded-For 的信任問題)

再來是 Web HA 的部份,EC2 支援 Elastic Load Balancing,所以不需要自己刻一堆有的沒的... 而在 Linode 上面只提供了最基本的 HA 功能 (可以設定「當掛掉的時候,允許哪些其他機器可以使用原來的 IP address」的權限) ,這表示必須自己跑 monitor script,在當掉的時候取得 IP address 並提供服務。

另外 EC2 提供 multi-zone,也是 Linode 目前沒提供的。在考慮 HA 架構還蠻重要的...

不過 Linode 比 EC2 最大的優勢就是比較便宜。同樣流量時 AWS 的頻寬費用就可以在 Linode 順便養機器了... 同樣價錢的問題還包括 EBS I/O 的費用,以及 Linode 可以使用比較多的 CPU resource...

另外一個非價錢的因素是 Linode 的 storage 是屬於 persistent (本來就是 VPS,只是多了 Cloud API),而 AWS EBS 用起來還是覺得不太方便,不過這跟 AWS 的 scale 設計有關,不太能算缺點...

星期二, 5月 10, 2011

PIXNET 徵人:System Administrator 一名

要徵:
  • System Administrator 一名
    • 工作內容:現有伺服器 (FreeBSDDebianUbuntu 系統) 維護,包括套件 (ports 與 apt/deb) 維護。另有部份網路設備 (Router、Switch、VPN) 維護。
    • 工作時間:10:00-19:00 (一~五),特殊狀況時 (公告深夜停機維護之類的) 另外補休。
    • 就職日:可馬上就職,或 2011 年八月前到職即可。
    • 地點:台北市中山區 (捷運行天宮站旁),機房於台北市內湖區。
    • 需求:需熟 Unix、Shell Script、Perl。
    • 薪資:約 40k/month,其他技能面議另談。
請寄到 gslin at pixnet.tw 與 ieon at pixnet.tw。

星期一, 5月 02, 2011

把 FreeBSD amd64 的 node.js 升級到 v0.4.7

因為 FreeBSD Tinderbox 編不過,目前 FreeBSD 上的 www/node 是設定 i386 only:
ONLY_FOR_ARCHS= i386
但現在公司幾乎沒有 FreeBSD i386 的機器了,都是跑 FreeBSD amd64...

另外因為有掛 #bsdchat (參考「#bsdchat 搬到 freenode 上,換 UTF-8 編碼」這篇),知道在 amd64 平台上是能夠使用的,目前只有在 FreeBSD Tinderbox 裡編不過... 所以我就去翻一下 bsd.port.mk 內的寫法,加入變數 __ARCH_OK,拐系統「現在是在支援的平台」:(這是透過 portmaster 升級)
sudo portmaster -BDtw -m __ARCH_OK=1 node-*
編完後輸入 node -v 可以看到 v0.4.7