2012年4月10日 星期二

GAE → Heroku → Linode

這是我這幾天忙碌測試的東西,心得分享在 CloudTW 的 Mailing list,廢話很多,慢慢看吧,原文連結

Hi 各位:

來分享一下最近做的事情,如標題,跳了三個服務最後到 Linode。這過程還滿好玩的,說給大家聽聽。

2010 年我在 COSCUP 閃電秀 Demo 了一個關於股票擷取的程式,而服務放在 GAE 上面運行。2011 年我去報效國家了,在站哨的時候思考 GAE 還可以如何使用,但似乎因為 GAE 本身的限制,讓我有點無法自由的發揮,像是 GAE 不能使用 Python 豐富的套件庫 PyPI,就必須在 GAE 上面一直不斷的造輪子。況且 2011/11 新的收費方案出來之後,對於免費的容量大大減少,當時就決定停止在 GAE 上的開發,專注在核心程式上。

2012 年年初退伍,把之前的程式改寫並包成蛇蛋放在 PyPI 上開放下載。2月底參加小海大大講的,關於如何將應用程式搬出 Google AppEngine 後,整個3月就在測試另一個 PaaS - Heroku。也把套件實作成網站應用。Heroku 上面有滿多的 add-ons 可以使用,開了這些服務:memcachedRedisToGoHeroku SchedulerMailgunNew Relic、 都是在免費範圍內使用,開1個 web Dyno,當然這裡有變通的方法。因為在 Heroku 上面使用到2個 Dyno 一定會超過免費的容量,所以我就再開一個 app,另外一個跑 worker Dyno(背景處理,無網頁訪問),又 Heroku 上的 add-ons 的帳號設定檔不會綁 app,也就是可以互相通用的意思,所以跑 worker 就幫跑 web 的背景處理 memcached、定時發信的事務。所以在 Heroku 上開了兩個 app,目前都還是沒有花到錢!(當然,也可能沒人在用所以花不到錢 XD)

不過,這時候出現問題了!網頁的部份我是用 Flask,也嘗試做 gzipcache 處理,但還是在擷取資料的時候花上不少時間,至少都會用到 1500 ms 的時間,太慢了!即使用 celery 排 Task 擷取丟到 memcached,我還是覺得太慢,上市股票的部份就 800 多檔,每檔約用到3秒,開4線程去跑(太多線程會超過 512MB 記憶體限制),保守估計也要十分鐘才走的完。問題就出在 Heroku 底層是 Amazon,連線呼叫回應要在太平洋上面跑個好幾趟,所以很慢!

最後想到之前有人提到 Linode 還不錯用,在亞太地區的日本東京有資料中心,光這樣想應該就還不錯,因為我的程式目標是台灣的證交所,當然離證交所愈近愈好!所以就刷下去了!1台 Linode 512 方案。不過 Linode 就是一台虛擬主機(VPS),換句話說不會像 GAE、Heroku 有那樣 "傳便便" 的服務,想要什麼就要自己裝起來!但我真的佩服 Linode 的文件,超詳細,閉著眼睛,照著步驟就可以輕鬆完成!在 Linode 上用 nginx + Flask + uWSGI + redis + celery + memcached,就將 Heroku 上的網站搬過去,速度明顯快很多!

所以之後就決定在 Linode 上繼續 grs 網站版的開發,而 grs 的 PyPI 套件也同步進行。以上就是3月到今天經歷過這樣的搬遷,經濟學講的尋價成本就是這樣貨比三家而來的,不過也是一個不錯的體驗,分享給大家!

至於 grs Online 4月底會送件給 appWorks,希望能夠順利的入選 ;)

~Toomore

沒有留言 :

張貼留言