自從換了MBP,總感覺不干點(diǎn)事兒值不回價(jià)掘剪。于是乎和朋友商量著做了一款A(yù)PP:PUSHTO.DO平委。從學(xué)習(xí)到提交版本到APP STORE前后忙乎了三個月(我和朋友都是業(yè)余開發(fā),白天上班夺谁,還經(jīng)常加班廉赔,只能晚上抓緊時間code)肉微。7月底終于通過審核上市了。沒料到效果還不錯蜡塌,得到了36kr碉纳,最美應(yīng)用和知乎的宣傳。感到很開心馏艾,這是對我們第一步的鼓勵劳曹,以后的工作應(yīng)該會更帶勁了。
在這兒為開發(fā)的過程做個小小的總結(jié):
- OS/主機(jī)
我們使用的是linode的主機(jī)服務(wù)琅摩,并部署Ubuntu 12.04.2 LTS铁孵。linode物美價(jià)廉,且無縫升級的服務(wù)非常贊房资。目前部署在日本機(jī)房蜕劝,一般國內(nèi)訪問速度不錯,但是免不了偶爾的訪問延遲轰异,這是部署國外不可避免的的熙宇。選擇Ubuntu是因?yàn)槭煜に陌芾砉ぞ撸硗獠幌胩垓v溉浙,選擇長期技術(shù)支持版本烫止。
- 應(yīng)用服務(wù)器
后端服務(wù)主要是用python編寫,web框架采用Django戳稽,搭配mod_wsgi和Apache馆蠕。不得不說python和Django確實(shí)是開發(fā)效率很高的語言工具。而且特別容易上手惊奇,作為一個主要在AIX小型機(jī)上寫C程序的程序員互躬,真心感到一種被解放的爽感。
- 數(shù)據(jù)存儲
大部分的數(shù)據(jù)存放在MySQL關(guān)系數(shù)據(jù)庫中颂郎,小部分?jǐn)?shù)據(jù)存放在Redis中吼渡。其實(shí)一開始,我是純用Redis作為數(shù)據(jù)存儲的乓序,MySQL只做備份數(shù)據(jù)用寺酪。但是Redis吃內(nèi)存比較兇,出于經(jīng)濟(jì)考慮替劈,換回MySQL了寄雀。
- Task Queue和遠(yuǎn)程推送
PUSHTO.DO的特色之一在于遠(yuǎn)程推送,遠(yuǎn)程推送算是一個典型的異步行為陨献。因此我們采用了異步的方式來處理盒犹。選擇Gearman異步任務(wù)隊(duì)列的框架,起了5個python編寫的worker程序遠(yuǎn)程推送。Gearman能自動解決負(fù)載均衡和failover等問題急膀,而且擴(kuò)展非常容易沮协。
遠(yuǎn)程推送采用pyapsn,這應(yīng)該是用的最多的遠(yuǎn)程推送python解決方案了卓嫂。
- 小坑
雖然是第一次使用Python和Django慷暂,但是沒有遇到大坑,基本是一些小坑命黔,在這里總結(jié)一下:
1. Django內(nèi)部使用的是Unicode字符集呜呐,如果應(yīng)用需要支持中文就斤,那么MySQL需要調(diào)整字符集悍募。有多種方式調(diào)整字符集,網(wǎng)絡(luò)上搜索一大把洋机,我使用的是修改my.conf的方法坠宴。
2. 如果長時間APNS沒有發(fā)送過遠(yuǎn)程推送,apple有可能斷開與應(yīng)用的連接绷旗。如果應(yīng)用每次發(fā)消息都和APNS新建連接喜鼓,在推送消息很多的時候,又可能被apple認(rèn)為是惡意DDOS訪問衔肢,所以這方面應(yīng)用需要合理的處理這個問題庄岖。
3. 遠(yuǎn)程推送的難點(diǎn)是證書制作,這個算是血淋淋的歷史啊角骤。請?zhí)貏e小心隅忿。
- 總結(jié)
總而言之,越簡單的東西越穩(wěn)定邦尊,所以開發(fā)過程中我選擇的都是廣泛運(yùn)用的簡單玩意背桐。所以即使是第一次使用這些技術(shù),依然效果不錯蝉揍。感謝提供這些開源軟件的人們链峭。