NuptLifeAnalyzer札记(1)—— Reboot
0x00 序
Bad day.
早上到公司,停自行车的时候,电脑包摔到了地上。原本出门检查好盖好的茶杯打开了,电脑进了水。由于没什么经验,多次尝试开机,把硬盘和显示屏烧坏了。数据恢复的价格并不能接受,本来快完成的项目得从头开始写了,也罢,刚好重头开始理理这个项目。
切记今后做好备份啊!!!
0x01 准备
OS: 工作需要,用的kali 2.0
IDE: PyCharm Professional 试用版,到期再说
Python: 2.7
- 没有可用的版本控制服务器,备份暂时就放移动硬盘里吧。
# vitualenv NUPTLifeAnalyzer
- 创建virtualenv的时候还碰到个莫名其妙的问题,工作环境设置了
PYTHONOPTIMIZE=1
参数,导致virtualenv出现ImportErrot: Bad magic number
的错误。
具体见https://github.com/pypa/virtualenv/issues/435
这个项目基本上跟着Miguel Grinberg的《Flask Web开发:基于Python的Web应用开发实战》一书完成。
- 创建virtualenv的时候还碰到个莫名其妙的问题,工作环境设置了
0x02 考虑
项目名字还没有确定,只有个开发名,叫Life Analyzer,希望用户使用的时候,能唤起一些回忆,珍惜接下来的大学生活。UI考虑使用Flat UI,扁平化的风格,配色看起来比较温暖。
项目大致架构是,Web server用的nginx,进程管理使用supervisor,应用服务器使用gunicorn,任务队列使用Celery,消息传输、celery result backend、缓存、flask session都使用Redis,数据库使用MongoDB。也没有什么特别的原因,都是初学,选了些当下比较流行的组件来使用。
LifeAnalyzer基本上只有一个入口,所以最大的性能问题,应该就是防D了。这也是我想用Celery的原因,相同的学号只需要一个任务,大家都来取这个任务的结果就可以了。
还有其它一些基本的安全问题,越权访问其它用户数据等等。
0x03 启程
开发环境
首先把开发环境搭起来吧。mongo安装参考官方教程。没有做分布式,mongo和redis只开放本机访问就可以了,做权限认证的话当然更好,mongo 3.0+的添加用户改成了createUser
而不是之前的addUser
了。
celery queue设计
正方登录、正方爬虫、图书馆爬虫、校园卡爬虫分别跑在不同的Queue当中,方便启动和停止。
数据库设计
mongo的文档模型还是非常自由的,我们的数据库也不是特别复杂。mongo3弃用了padding factor
标识,采用2的幂分配策略。尽量保持各collection大小相近就好。
前端设计
慢慢开始学js啦,这个边做边看吧。
好啦,开始启动吧!