“及早发布。频繁发布。听取客户的意见”(Eric S. Raymond, The Cathedral and the Bazaar)是我们Pikacode公司的主导方针。开发中的技术选型必须认真的遵循这个指导原则。
Pikacode公司Logo
Python
快速且整洁的开发。大部分我们的关键组件,如为git提供服务的http或ssh server以及mercurial远程操作,都只有不到几百行代码。更少的代码意味着更少的bug和更少的维护量,增加新功能也变得容易。Python生态系统和Pip(http://pypi.python.org/pypi)非常稳固,这使系统依赖模块的升级变得轻而易举。我们使用virtualenv (http://pypi.python.org/pypi/virtualenv)来隔离我们的各个应用。
Django和其它的python相关组件
如果你选择使用python来开发,那***的一个框架就是Django。Django拥有所有开发多功能网站的需要的特征,并且易于扩展。你需要的所有程序库它都能提供。升级简单而且不会影响你的应用。
后台任务由Rabbitmq (http://www.rabbitmq.com)集成Celery (http://celeryproject.org/)来处理。我们使用后台调度程序来处理好资源的操作,例如统计计算,压缩下载等高负担的存储操作。用Javascript查询后台任务状态,向用户显示最终状态结果。
Bootstrap css框架
如果你是做开发的,且你的web设计方面的技术非常差,CSS框架能帮助你开发出一个用户体验非常好的漂亮的界面。Bootstrap是***的一个框架,能帮助你设计出风格一致的web应用。(http://twitter.github.com/bootstrap/).
Web服务器和管理员工具
最关键的技术层是HTTP相关的,下面这些信息是关于底层web技术选型的。我们使用gunicorn (python WSGI http server http://gunicorn.org/)来服务django请求。Nginx是我们的web服务器。用Varnish来处理http缓存。Uwsgi 和 定制的ython WSGI servers来处理http远程操作。
Supervisord (http://supervisord.org/) 管理我们所有的运行进程,Nagios负责监控我们所有的服务。
结论
我们所有的程序都由Mercurial进行版本管理(我们自己搭建的服务),所有程序的部署都用过定制的 Fabric 脚本 (http://docs.fabfile.org/)进行。通过一条命令来把代码推入产品环境中。