Writing

NuptLifeAnalyzer札记(1)—— Reboot

0x00 序

Bad day.
早上到公司,停自行车的时候,电脑包摔到了地上。原本出门检查好盖好的茶杯打开了,电脑进了水。由于没什么经验,多次尝试开机,把硬盘和显示屏烧坏了。数据恢复的价格并不能接受,本来快完成的项目得从头开始写了,也罢,刚好重头开始理理这个项目。

切记今后做好备份啊!!!

0x01 准备

OS: 工作需要,用的kali 2.0

IDE: PyCharm Professional 试用版,到期再说

Python: 2.7

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啦,这个边做边看吧。

好啦,开始启动吧!