Python後端相關技術/工具棧
轉載http://python.jobbole.com/83486/
整理下目前涉及到的python的技術棧和工具棧(用過或了解的, 其他的後續用到再補充)
- 編輯器
最常見: vim / SublimeText2 / PyCharm
Vim有興趣可以看看 k-vim 適合Python/Golang開發
- 本地環境
pip/easy_install 包管理
viertualenv + virtualenvwrapper 庫/版本管理, 環境隔離
ipython/ipdb
- Web 框架
Python 的Web 框架非常多……
個人偏好[有分先後]
flask 輕量! 可以靈活組合各類組件進行開發(第三方組件很豐富), 簡單高效, 便於快速開發和維護.
tornado 異步, 高性能, 最新版本4.0
django 有些重, 配置和約定眾多, 可以快速開發一些”管理”性質的後臺, 其版本更新非常快
其他:
bottle 類flask, 一個文件, 足夠小
- ORM
SQLAlchemy
SQLAlchemy is the Python SQL toolkit and Object Relational Mapper that gives application developers the full power and flexibility of SQL.
似乎這個就足夠了, 無出其右
- 模板
只提第三方(很多框架自帶了, 例如Django/Tornado), 話說天下模板都大同小異
Jinja2, 最喜歡的一個, 之前寫了篇 PYTHON模板-JINJA
Mako, 介紹PYTHON模板-MAKO
還有挺多的, 後續了解後補充
- 代碼管理及Wiki
使用git, 搭建gitlab
gilt針對項目級別, 可以用markdown寫一些文檔, 可以簡單的code review, 可以進行討論等等.
Wiki的選擇:
gollum 很贊
trac老牌, 但是個人不大喜歡其語法編輯方式.
- 代碼發布
fabric + rsync
rsync 用於生產代碼目錄的同步, 足夠簡單強大
fabric 用於自動化部署, 將流程固化到腳本中重復使用, 提高效率降低風險, PYTHON FABRIC實現遠程操作和部署
Fabric is a Python (2.5-2.7) library and command-line tool for streamlining the use of SSH for application deployment or systems administration tasks.
- 項目部署
nginx 服務器, 主要用於負載均衡, 反代等
gunicorn a Python WSGI HTTP Server for UNIX, 用來運行Flask項目
Supervisor A Process Control System, 配置管理各種程序, 進程監控, 自動重啟等
- 監控
nagios 服務器各類參數監控, 負載,內存,IO, 網絡等, 也可以配置對進程進行監控報警
sentry 實時收集事件日誌, 可以在管理後臺查看到當前程序異常及報錯具體信息, 很強大的平臺, 支持多種語言的程序
statsd + graphic
statsd 實時服務數據收集(e.g. counters and timers) 收集後數據提供給graphic進行展示
graphic 企業級開源監控工具(數據繪圖工具),用於采集服務器實時信息並進行統計, Graphite 自己本身並不收集具體的數據,這些數據收集的具體工作通常由第三方工具或插件完成. 其控制臺前端項目 tessera
- NOSQL
redis 緩存/持久化/特殊需求(計數-排行榜-時間線等)
memcached 集群, 多用於有時限性質的緩存
mongodb 在技術選型玩了下, 沒有正式在生產用過
- 數據庫
mysql 不解釋, 感覺是不是所有Python的底層db都是mysql……
postgresql 開發日誌統計系統使用過, 學院派, 各種牛叉的功能, 對json的支持令人印象深刻.
- 抓取
beautifulsoup 配合urllib2或者requests庫進項簡單的抓取分析工作
scrapy 很牛的抓取框架, 適合規模較大,需求復雜的的抓取任務
- 搜索
solr
完成搜索功能, 雖然Python也有一些實現, 但是感覺還是使用成熟的方案會好些, 文檔/資源豐富, 便於開發和維護. Solr, 足夠簡單及強大.
- 好用的第三方
requests HTTP for humans, 非常好用, 強烈推薦
jieba 中文分詞
- 異步和隊列
gearman 支持分布式的任務分發框架, 並行/不同語言之間的通信. 之前使用主要用來跨機器任務分發.
celery 分布式任務隊列
zeromq 之前使用的消息系統是基於這個的, 沒有研究過
- 日誌
logstash 日誌收集和分析, 支持不同來源不同格式, 進行統一收集和分析處理
Elasticsearch 數據
Kibana A log analyzing web interface for logstash and elasticsearch
三者組合
- 項目管理
tower
Python後端相關技術/工具棧