此网站后端技术简介
这一篇博文的目的是介绍一下此网站开发所用到的后端开发技术。
首先来定义一下前端和后端。上一篇博文中介绍的前端是指客户端,而后端就是服务端。
相对应在web开发上,客户端实际上就是浏览器端,html、css、js的解析、处理、呈现都是在浏览器端进行工作运行。
下面接入正题:后端 —— 服务端技术介绍。
技术栈介绍
此项目服务端所用技术如下
- python3
- flask
- MongoDB
- Redis
- NGINX
- Supervisor
python3 与 flask
python3
首先,开发语言的选择,python是我最熟悉的开发语言,所以直接选择python。
Python 3.0于2008年发布,迄今已经11年,基本上大部分第三方库都已经完整支持。现在无论是学习还是实际开发,都建议直接用python3 。
python web framework
python web开发的三大框架:
- flask (github 44.1k star, 104,420 repository)
- django (github 41.6k star, 214,722 repository)
- tornado (github 17.7k star, 6,686 repository)
flask, django, tornado 都是非常优秀的web框架, 作为小型个人网站,三者基本都能胜任。
django 的优点, 相对另外两个框架而言, 大而全面, 属于比较重型的web框架。它里面包含的独立的admin系统,django-orm。最适合创业公司使用,创业公司需要的大部分基础功能,django都有实现,无需二次造轮子。
不选django的理由:
- 数据库使用的是MongoDB, 所以django-orm对此项目明没有帮助。
- 单独开发了权限系统,及admin后台,无需django的admin系统。
- 前后端为两个不同的项目,分开进行开发,不需要django的模版系统。
基本上django的优势都没有使用到,所以就没必要使用django进行开发。
flask & tornado
这两个都属于轻量级的web框架,差别就是tornado是一个异步的框架。对于我这种小型个人项目,两者开发起来差别都不大。在短期内,此项目也不会有性能上的需求,所以选择的是自己最擅长的flask。
使用这两个框架,你的template、model、admin模块都需要自己来实现。
数据库和缓存
MongoDB
这一个个人网站,需要存储的数据非常简单,主要就分为三类:blog 数据、user 数据、session数据。没有涉及到复杂的表与表之间的关联,也没有任何事物事件。后续可能会添加日志、登陆事件等数据。所以直接使用MongoDB是可以完全胜任的,而且开发起来也会比mysql等关系型数据库要快的多。
注意事项: 安装MongoDB时关闭外网访问,设置用户名、密码。太多的用户直接使用MongoDB的默认配置导致数据泄漏。
Redis
Redis是非常优秀的缓存数据库,我个人觉得,只要是涉及到数据相关的web服务,都可以用到redis。此项目用户登陆后的session数据,就是直接存储在redis里面,失效期为1天,redis会在1天后自动删除此数据。后续如果性能上有需要,也会将部分数据通过redis进行存储。
服务部署
nginx
使用nginx作为反向代理,这里没什么太多介绍的,现在的web项目,一般都是使用nginx。
Supervisor
使用supervisor作为守护进程,supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台任务,并监控进程状态,异常退出时能自动重启。