均一的GAE甘苦談
如果當初我有選擇,我”可能”不會選GAE
只是可能而已啦~
均一教育平台,董事長:方新舟
達成了許多工程師(應該是許多年輕人)的夢想:創業 —> 把公司賣
給聯發科 —> 退休...
講到均一教育平台...
–by ???
“如果就這麼退休的話,
故事就結束了...”
• 方大哥希望可以真的為台灣做一些事情,他選擇了
一個相當困難的領域,就是教育。
• 他創立了誠致教育基金會,屬於非營利組織,截至
今年為止,整個基金會都是靠方大哥的 funding在
運作(包含在下的薪水)。
• 他在2012年跑去美國找Khan academy,跟他們拿
了source code並且在同年10月上線。
• ——————發生很多事情的分隔線—————
• 他們找來了均一教育平台的第一位工程師:就是我
。
• 在均一當軟體工程師之前,研究所是念光電,前一
份工作的Garmin的硬體工程師,只在CS實驗室寫
了~5 month的c++ (而且還是純演算法的code)
• 來均一的第一個禮拜,我就把test 伺服器的資料庫
搞爆了。(而且還跟方大哥講這是個意外,請讓我
直接把code上到live伺服器)
• —————發生很多事情的分隔線——————-
• 目前均一教育平台有15位工作伙伴,7位軟體工程
師。得Joe了。
1. k12的華文教育平台 — (k12其實是kindergarten to 高三)
2. 目前註冊人數~18萬人,七天的活躍使用者~4萬多人...一
個月活躍使用者15萬人。
均一教育平台:
Google App Engine
(GAE)
架設網路服務的平台(PaaS), 對比於Microsoft的Azure,
Amazon的AWS, Heroku…
看看用GAE的大廠怎麼說...
Khan academy
如果不是GAE,我們會花很多時間在處理server setup還有
routers上面,我們可以專注在產品上的原因是因為GAE!!
Rovio (Angry Bird)
一兩個工程師就可以很快地launch一個遊戲,因為google 管
理了整個server,我們幾乎不用任何的maintainance!!!
Feedly
因為GAE在後端的架構設計,我們唯一要擔心的事情就是上
Code!!
Best Buy
在GAE上面開發app,跟全部自己來比較的話,只需要花費
大約1/10 ~ 1/4的資源以及1/4的時間!!
GAE最大的好處:
它在server, logging, database, transaction, scalability …
許多地方都幫你寫好設計好了。yay~~
AWS, GAE架設網站需求比較表
AWS :
• 先在AWS上做一堆選擇跟
設定...
• webapp2, flask, django…
• nginx
• uWSGI, gunicorn
• superviser…
• 喔靠,還有database
GAE:
• 在GAE上面申請一個
app名稱
• webapp2, flask,
django…
• 沒了,上完code就可
以跑了。
相對完整的GUI來幫忙
管理網站:
1. Logging/404, 500
Logging
2. 簡單的memory,
cache管理
3. Database的管理(
可以針對特定的值
做修改)
4. Database backup
5. 直接做不同版本
code的分流,可以
做簡單的A/B test
6. transaction….
7. 因為沒有server,
scalability so ez~~
GAE最大的壞處:
它在server, logging, database …許多地方都幫你寫好設計
好了。
GAE 沒有 server!!!
在GAE的開發過程中用一個sandbox把你的code包起來,你不知道你
的code真正跑在什麼樣的環境裡,所以...
1. 你不能在GAE上面安裝package!!!
2. 你可以做的是...把package下載下來,放到你的code /third_party/
資料夾,然後使用它。
3. 這樣大幅增加package 管理、update …等等等困擾的問題。例如
當你要安裝或升級dependency高的package的時候...另外就是
code裡面多了一大多有的沒的...
小提醒:Github上pull request的時候記得把third_party跟你自己的
code分開上,不然...大家不會恨你,大家會叫你重做。
GAE最大的壞處:
它在server, logging, database …許多地方都幫你寫好設計
好了。
GAE內建的Database,叫做:High Replication Datastore (HRD), uses
the Paxos algorithm to replicate data across multiple datacenters.
好像很酷!!!但是它不保證always consistent…
Case 1:
book1 = Book(name=‘book1’, price=100) # 創建一本書
book1.price = 200 # 帳價了
book1.put() # 存入資料庫
query_book_by_name(‘book1’) —> {name=‘book1’, price=100}
WHAT????
解法:一定要query by key
key = db.Key(book1’s key)
key.get() —> {name=‘book1’, price=200}
真正麻煩困擾的Case 2:
# 已經有book1, book2, book3…
book4.put() #
query_all_the_books() —> [book1, book2, book3]
where is my book4!!!?????
解法:
book1.parent = book2.parent = book3.parent = ‘a’
book4.parent = ‘a’
query_all_the_books(parent=‘a’) —> [book1, book2, book3, book4]
parent 一定要在entity創造的時候就建好,如果你等到book4的時候才
發現你需要...GG....
我在GAE上吃過最多的苦頭—
拿取在GAE裡面的data base
這不是我自己的Data base嗎?為什麼拿到它我要那麼痛苦
??
如何獲取我自己的database資
料...
• GAE本身provide的方法(Bulk Loader)...非常慢!
• 20幾G我下載了一個禮拜才載完!!!
如何獲取我自己的database資
料...formal way…
• 即便如此: 從BigQuery Download還是有限制大小
• Table太大,請先把Table存回google cloud storage
,變成好幾個小table,再讓你download
App
Engine
Google Cloud
Storage
Google
BigQuery
Backup
to
Import
into
Finally
Download….
如何獲取我自己的database資
料...not formal way
• 一些Database欄位,不是GAE本身提供的資料格式,
是pickle過的Obj...
• @(#!$*@#%@! Import 進 BigQuery一片空白
• 還是先把資料 Backup 到GCS,直接download下來,
然後用GAE SDK裡面的一些module來解碼。 (記得,
原本是google自創的noSQL格式,沒有人看得懂。)
• 非常重要的文章:http://gbayer.com/big-data/app-
engine-datastore-how-to-efficiently-export-your-data/
可能Google也覺得自己這樣不
大應該...
• 推出新的資料庫架構 Google Cloud MySQL.
• 雲端的mysql,真是友善多了,也可以直接接
google app engine。
一樣,針對已經架好的資料庫像均一…
• 資料庫端的Code要全部重寫...
• 聽說資料庫大的時候還是會爆掉...
GAE另一個壞處:
它在server, logging, database …許多地方都幫你寫好設計
好了,這並不是免費的。
一般來講,GAE還有給人一個印象,就是貴!
最後一個跟GAE本身無關,但是我認為很
重大的缺點...比較少人用(尤其是台灣)。
• 當在選擇一個服務,或甚至只是一個Library的時候...
• 只要你做的不是全世界唯一的冷門尖端技術。我認為生
態系很重要...
• 在一個豐富的生態系,即便是很困難罕見的問題,你都
很有機會在網站上找到解答。反之,即便是一個很簡單
的問題,你可能都要花很多時間因為你必須要全部自己
來。
• 豐富生態系的服務或是Library,通常與時俱進的速度也
會特別快,反之,一個很簡單的問題可能拖很久都不會
得到改善。
Andy大大的補充
• 因為Google沒有想拿GAE來賺錢,所以客服做得
很糟糕。
• 客服反應會延遲到2個禮拜。
• 一些許多人要求解決的Bug會延遲到半年...
講那麼多,到底為什麼均一要選擇
GAE?
因為Khan用GAE...
Khan Academy為什麼選擇GAE??
Khan 裡面有非常多的高手,例如說...
John Resig, creator of jQuery…
他們選擇GAE一定有他們的理由,如同上述講
的,可以focus在產品本身,節省時間資源...
或是因為Google每年捐給Khan
Academy 100萬美金...XD
如果你團隊只有少少人,而且你足
夠了解GAE(其實應該要了解整個
google cloud platform),GAE或許
是個不錯的選擇。
如果你很多東西都喜歡自己來,有
自己的想法和style,並且很討厭被
限制的感覺,我覺得GAE不適合你
。
–謝謝大家~
希望今天的分享可以幫助各位在選擇PaaS上面
做更正確的選擇。
Q&A

均一Gae甘苦談