"There should be one-- and preferably only one --obvious way to do it. "
上篇,我们说过“没什么技术含量”。罗列了下,还是用到一些技术的。
技术选型离不开应用的规模和场景。
我们的第一原则是:Don't install B。能用灭蚊器的时候一定不会用高射炮。
除此之外,我们考虑的是:轻量、高效和稳定。
Pyramid + SQLAlchemy + PostgreSQL
"pay only for what you eat"
Pyramid,我们用它作为 Web 开发框架
SQLAlchemy 是个伟大的开源项目,Python 世界里最好用的 ORM 引擎,社区也很活跃,推荐!
Celery(芹菜)是一个异步任务队列。它侧重于实时操作,对调度支持很好。我们的邮件发送任务是交给 Celery 完成的。
Bootstrap 是 Twitter 推出的用于前端开发的开源工具包。它由 Twitter 设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS/HTML 框架。非常好用,没写什么 CSS 就把管理后台搞定了。
我们的数据存储在 PostgreSQL 中。
我们使用 Redis 作为 Celery 的后端。
Buildout 是一个基于 Python 的构建工具,非常强大。
Alembic 是数据库迁移工具,我们希望管理数据也能像管理代码一样。
如果你的项目中也用了 SQLAlchemy 作为 ORM,那么 Alembic 一定适合你。它的作者和 SQLAlchemy 作者是同一个人。
使用 Gunicorn 作为 WSGI 服务器,性能非常好。
Supervisor 是用 Python 写的一个进程管理工具,我们用来管理 Gunicorn 和 Celery。服务挂掉时 Supervisor 会帮我们自动重启,比如部署应用手动重启只需要一条命令搞定:
supervisorclt restart weekly
自动化部署和常规系统管理我们用了 Fabric。
我们知道 Ruby 世界有 Capistrano,Python 世界同样有这样一个工具,而且比 Capstrano 更简单好用。
HTTP Server 我们用了 Nginx,这个就不用过多介绍了。
服务器性能监控我们用了 Munin。
Munin 的插件编写非常方便。我们应用中的一些数据监控,以及订阅/退订/点击等情况的报表也做在 Munin 上,看起来很直观。
Flower 是一个基于 Web 界面的用来监控和管理 Celery 集群的工具.
Python 的错误报告,我们使用 Sentry。
Sentry 是由 Disqus 的 David Cramer 开发的一个开源项目,David 也是 Django 社区的大牛。Sentry 非常方便,主流开发语言的客户端都有实现。官方文档地址
如果你是程序员,欢迎订阅我们的《码农周刊》。快速订阅地址
联系客服