自从换了MBP,总感觉不干点事儿值不回价。于是乎和朋友商量着做了一款APP:PUSHTO.DO。从学习到提交版本到APP STORE前后忙乎了三个月(我和朋友都是业余开发,白天上班,还经常加班,只能晚上抓紧时间code)。7月底终于通过审核上市了。没料到效果还不错,得到了36kr,最美应用和知乎的宣传。感到很开心,这是对我们第一步的鼓励,以后的工作应该会更带劲了。
在这儿为开发的过程做个小小的总结:
- OS/主机
我们使用的是linode的主机服务,并部署Ubuntu 12.04.2 LTS。linode物美价廉,且无缝升级的服务非常赞。目前部署在日本机房,一般国内访问速度不错,但是免不了偶尔的访问延迟,这是部署国外不可避免的的。选择Ubuntu是因为熟悉它的包管理工具,另外不想太折腾,选择长期技术支持版本。
- 应用服务器
后端服务主要是用python编写,web框架采用Django,搭配mod_wsgi和Apache。不得不说python和Django确实是开发效率很高的语言工具。而且特别容易上手,作为一个主要在AIX小型机上写C程序的程序员,真心感到一种被解放的爽感。
- 数据存储
大部分的数据存放在MySQL关系数据库中,小部分数据存放在Redis中。其实一开始,我是纯用Redis作为数据存储的,MySQL只做备份数据用。但是Redis吃内存比较凶,出于经济考虑,换回MySQL了。
- Task Queue和远程推送
PUSHTO.DO的特色之一在于远程推送,远程推送算是一个典型的异步行为。因此我们采用了异步的方式来处理。选择Gearman异步任务队列的框架,起了5个python编写的worker程序远程推送。Gearman能自动解决负载均衡和failover等问题,而且扩展非常容易。
远程推送采用pyapsn,这应该是用的最多的远程推送python解决方案了。
- 小坑
虽然是第一次使用Python和Django,但是没有遇到大坑,基本是一些小坑,在这里总结一下:
1. Django内部使用的是Unicode字符集,如果应用需要支持中文,那么MySQL需要调整字符集。有多种方式调整字符集,网络上搜索一大把,我使用的是修改my.conf的方法。
2. 如果长时间APNS没有发送过远程推送,apple有可能断开与应用的连接。如果应用每次发消息都和APNS新建连接,在推送消息很多的时候,又可能被apple认为是恶意DDOS访问,所以这方面应用需要合理的处理这个问题。
3. 远程推送的难点是证书制作,这个算是血淋淋的历史啊。请特别小心。
- 总结
总而言之,越简单的东西越稳定,所以开发过程中我选择的都是广泛运用的简单玩意。所以即使是第一次使用这些技术,依然效果不错。感谢提供这些开源软件的人们。
网友评论