SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
tornado开发实践
twitter: @bf4x
github: @bufferx
简介
● written in Python
● non-blocking
● event driven, base on epoll in linux
● lightweight
由来
● friendfeed[http://friendfeed.com/]
● 多人在线实时服务
● facebook
开源
● github[https://github.com/facebook/tornado]
● main contributor[https://github.com/bdarnell]
● latest stable version: 3.0.1
● 3years
● 1000+ commits
● issues, open:, close: 728
● pull requests, open: 25, close: 780
应用场景
HTTPSERVER
● Long Polling/COMET服务
● WebSockets
● 接口服务
应用场景
Async Client
● 与存储服务的异步IO
(Mongo/Redis/Memcached/...)
● 基于HTTP的异步下载(HTTPCLIENT)
● Long Lived Connection
● 移动推送服务
项目实践
● 10+关键路径服务
● 机票/酒店/度假/图片等
项目实践
● 接口服务
● 与多种后端服务交互,如
memcached/mongodb/redis/httpserver
技术特性
● 进程级缓存
● 与后端网络服务的异步交互
● 协程/装饰器
环境搭建
● virtualenv
● supervisord
● nginx
IBE系统
Apache Benchmark(connection=20000) 单进程单实例 数据
开源
● github[https://github.com/bufferx/twork]
● 25 commits
twork
● MVC风格
● 一个Tornado接口服务DEMO
● 技术特性示例
● 通用库支持(已分拆)
twork
Tornado源码
核心
● IOLoop
● IOStream
Tornado源码
关键点
● Stack Context
● Coroutine
● Decorator
● tornado.gen
Tornado二次开发
● 网络IO相关
● 基于IOLoop
● 基于IOStream
Tornado二次开发
● asyncmongo[https://github.com/bitly/asyncmongo]
● Motor[http://github.com/mongodb/motor/]
● brukva(redis)[https://github.com/evilkost/brukva]
● memcache[https://github.com/dpnova/tornado-
memcache]
● tornado-celery[https://github.
com/mher/tornado-celery]
● Spyder[http://retresco.github.com/Spyder/]
● 其它
Tornado二次开发
● KPNS Base On KMPP
调优
● 充分利用多核
调优
● python语言级
○ 列表包含/生成器表达式/协程/闭包等
○ 使用装饰器
○ 使用__slots__
○ 避免使用(.)运算符
○ ...
调优
● C扩展
○ Python C Extension
○ Swig
调优
● pypy
● twice times
不足
● GIL的原因, CPython多线程时不能充分利用
多核
注意
● 单进程单线程, 切忌阻塞操作
who use
● facebook
● 10gen
● bitly
● quora
● zhihu
● admaster
● sae
● ...
Thanks

Contenu connexe

Tendances

twMVC#43 YARP
twMVC#43 YARPtwMVC#43 YARP
twMVC#43 YARPtwMVC
 
Nodejs introduce - using Socket.io
Nodejs introduce - using Socket.ioNodejs introduce - using Socket.io
Nodejs introduce - using Socket.ioCaesar Chi
 
pyspider 介绍 - pycon2014@北京
pyspider 介绍 - pycon2014@北京pyspider 介绍 - pycon2014@北京
pyspider 介绍 - pycon2014@北京roybinux
 
Google IoT Core 初體驗
Google IoT Core 初體驗Google IoT Core 初體驗
Google IoT Core 初體驗Simon Su
 
Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Eric Xiao
 
Node js实践
Node js实践Node js实践
Node js实践jay li
 
twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧twMVC
 
twMVC#30 | 你應該瞭解的 container-on-azure-二三事
twMVC#30 | 你應該瞭解的 container-on-azure-二三事twMVC#30 | 你應該瞭解的 container-on-azure-二三事
twMVC#30 | 你應該瞭解的 container-on-azure-二三事twMVC
 
twMVC#41 The journey of source generator
twMVC#41 The journey of source generatortwMVC#41 The journey of source generator
twMVC#41 The journey of source generatortwMVC
 
Node.js长连接开发实践
Node.js长连接开发实践Node.js长连接开发实践
Node.js长连接开发实践longhao
 
學好 node.js 不可不知的事
學好 node.js 不可不知的事學好 node.js 不可不知的事
學好 node.js 不可不知的事Ben Lue
 
Java API for WebSocket 實作介紹
Java API for WebSocket 實作介紹Java API for WebSocket 實作介紹
Java API for WebSocket 實作介紹My own sweet home!
 
twMVC#43 Visual Studio 2022 新功能拆解
twMVC#43 Visual Studio 2022 新功能拆解twMVC#43 Visual Studio 2022 新功能拆解
twMVC#43 Visual Studio 2022 新功能拆解twMVC
 
2012 php conf slide PIXNET 如何使用 php
2012 php conf slide   PIXNET 如何使用 php2012 php conf slide   PIXNET 如何使用 php
2012 php conf slide PIXNET 如何使用 phpronnywang_tw
 
PHP 應用之一 socket funion : 偽 WEB Server
PHP 應用之一 socket funion : 偽 WEB ServerPHP 應用之一 socket funion : 偽 WEB Server
PHP 應用之一 socket funion : 偽 WEB Server志賢 黃
 
twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹twMVC
 
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例Will Huang
 
twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC#38 How we migrate tfs to git(using azure dev ops) twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC#38 How we migrate tfs to git(using azure dev ops) twMVC
 
Node.js 進攻桌面開發
Node.js 進攻桌面開發Node.js 進攻桌面開發
Node.js 進攻桌面開發Fred Chien
 
用最潮的 Java script 盡情開發 kde qt 程式
用最潮的 Java script 盡情開發 kde qt 程式用最潮的 Java script 盡情開發 kde qt 程式
用最潮的 Java script 盡情開發 kde qt 程式Fred Chien
 

Tendances (20)

twMVC#43 YARP
twMVC#43 YARPtwMVC#43 YARP
twMVC#43 YARP
 
Nodejs introduce - using Socket.io
Nodejs introduce - using Socket.ioNodejs introduce - using Socket.io
Nodejs introduce - using Socket.io
 
pyspider 介绍 - pycon2014@北京
pyspider 介绍 - pycon2014@北京pyspider 介绍 - pycon2014@北京
pyspider 介绍 - pycon2014@北京
 
Google IoT Core 初體驗
Google IoT Core 初體驗Google IoT Core 初體驗
Google IoT Core 初體驗
 
Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出
 
Node js实践
Node js实践Node js实践
Node js实践
 
twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧
 
twMVC#30 | 你應該瞭解的 container-on-azure-二三事
twMVC#30 | 你應該瞭解的 container-on-azure-二三事twMVC#30 | 你應該瞭解的 container-on-azure-二三事
twMVC#30 | 你應該瞭解的 container-on-azure-二三事
 
twMVC#41 The journey of source generator
twMVC#41 The journey of source generatortwMVC#41 The journey of source generator
twMVC#41 The journey of source generator
 
Node.js长连接开发实践
Node.js长连接开发实践Node.js长连接开发实践
Node.js长连接开发实践
 
學好 node.js 不可不知的事
學好 node.js 不可不知的事學好 node.js 不可不知的事
學好 node.js 不可不知的事
 
Java API for WebSocket 實作介紹
Java API for WebSocket 實作介紹Java API for WebSocket 實作介紹
Java API for WebSocket 實作介紹
 
twMVC#43 Visual Studio 2022 新功能拆解
twMVC#43 Visual Studio 2022 新功能拆解twMVC#43 Visual Studio 2022 新功能拆解
twMVC#43 Visual Studio 2022 新功能拆解
 
2012 php conf slide PIXNET 如何使用 php
2012 php conf slide   PIXNET 如何使用 php2012 php conf slide   PIXNET 如何使用 php
2012 php conf slide PIXNET 如何使用 php
 
PHP 應用之一 socket funion : 偽 WEB Server
PHP 應用之一 socket funion : 偽 WEB ServerPHP 應用之一 socket funion : 偽 WEB Server
PHP 應用之一 socket funion : 偽 WEB Server
 
twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹
 
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
 
twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC#38 How we migrate tfs to git(using azure dev ops) twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC#38 How we migrate tfs to git(using azure dev ops)
 
Node.js 進攻桌面開發
Node.js 進攻桌面開發Node.js 進攻桌面開發
Node.js 進攻桌面開發
 
用最潮的 Java script 盡情開發 kde qt 程式
用最潮的 Java script 盡情開發 kde qt 程式用最潮的 Java script 盡情開發 kde qt 程式
用最潮的 Java script 盡情開發 kde qt 程式
 

En vedette

Mao arduino
Mao arduinoMao arduino
Mao arduinoMao Wu
 
Amazon SES 正確及不正確使用經驗 from 電子豹
Amazon SES 正確及不正確使用經驗 from 電子豹Amazon SES 正確及不正確使用經驗 from 電子豹
Amazon SES 正確及不正確使用經驗 from 電子豹Louis Chang
 
Empathy Map on School-to-Work Transition in Nigeria
Empathy Map on School-to-Work Transition in NigeriaEmpathy Map on School-to-Work Transition in Nigeria
Empathy Map on School-to-Work Transition in NigeriaUkot Umezinne
 
Misura dell'inquinamento luminoso del cielo notturno di Asiago / Measurement ...
Misura dell'inquinamento luminoso del cielo notturno di Asiago / Measurement ...Misura dell'inquinamento luminoso del cielo notturno di Asiago / Measurement ...
Misura dell'inquinamento luminoso del cielo notturno di Asiago / Measurement ...Anna Vedovato
 
Ibn quant research & analysis service 2015
Ibn quant research & analysis service 2015Ibn quant research & analysis service 2015
Ibn quant research & analysis service 2015IBN Technologies Limited
 
20 58-1-pb
20 58-1-pb20 58-1-pb
20 58-1-pbdevioga
 
Final project ppt
Final project pptFinal project ppt
Final project pptBanLan
 
חלב עובדות או מיתוסים אלבום הפרסומים השלם
חלב עובדות או מיתוסים   אלבום הפרסומים השלםחלב עובדות או מיתוסים   אלבום הפרסומים השלם
חלב עובדות או מיתוסים אלבום הפרסומים השלםJonathan Amir
 
חלב עובדות או מיתוסים - קמפיין תגובה למועצת החלב
חלב עובדות או מיתוסים - קמפיין תגובה למועצת החלבחלב עובדות או מיתוסים - קמפיין תגובה למועצת החלב
חלב עובדות או מיתוסים - קמפיין תגובה למועצת החלבJonathan Amir
 
Panduan qiamullail ramadhan rev1
Panduan qiamullail ramadhan rev1Panduan qiamullail ramadhan rev1
Panduan qiamullail ramadhan rev1Adrin Pandurama
 
Panduan qiamullail ramadhan
Panduan qiamullail ramadhanPanduan qiamullail ramadhan
Panduan qiamullail ramadhanAdrin Pandurama
 

En vedette (20)

Mao arduino
Mao arduinoMao arduino
Mao arduino
 
Amazon SES 正確及不正確使用經驗 from 電子豹
Amazon SES 正確及不正確使用經驗 from 電子豹Amazon SES 正確及不正確使用經驗 from 電子豹
Amazon SES 正確及不正確使用經驗 from 電子豹
 
Empathy Map on School-to-Work Transition in Nigeria
Empathy Map on School-to-Work Transition in NigeriaEmpathy Map on School-to-Work Transition in Nigeria
Empathy Map on School-to-Work Transition in Nigeria
 
Misura dell'inquinamento luminoso del cielo notturno di Asiago / Measurement ...
Misura dell'inquinamento luminoso del cielo notturno di Asiago / Measurement ...Misura dell'inquinamento luminoso del cielo notturno di Asiago / Measurement ...
Misura dell'inquinamento luminoso del cielo notturno di Asiago / Measurement ...
 
Ibn quant research & analysis service 2015
Ibn quant research & analysis service 2015Ibn quant research & analysis service 2015
Ibn quant research & analysis service 2015
 
Importance of writing
Importance of writingImportance of writing
Importance of writing
 
20 58-1-pb
20 58-1-pb20 58-1-pb
20 58-1-pb
 
Untitled Presentation
Untitled PresentationUntitled Presentation
Untitled Presentation
 
Región andina
Región andinaRegión andina
Región andina
 
Deschambault[1]
Deschambault[1]Deschambault[1]
Deschambault[1]
 
5 reasons to hire a virtual cfo
5 reasons to hire a virtual cfo5 reasons to hire a virtual cfo
5 reasons to hire a virtual cfo
 
Final project ppt
Final project pptFinal project ppt
Final project ppt
 
חלב עובדות או מיתוסים אלבום הפרסומים השלם
חלב עובדות או מיתוסים   אלבום הפרסומים השלםחלב עובדות או מיתוסים   אלבום הפרסומים השלם
חלב עובדות או מיתוסים אלבום הפרסומים השלם
 
חלב עובדות או מיתוסים - קמפיין תגובה למועצת החלב
חלב עובדות או מיתוסים - קמפיין תגובה למועצת החלבחלב עובדות או מיתוסים - קמפיין תגובה למועצת החלב
חלב עובדות או מיתוסים - קמפיין תגובה למועצת החלב
 
Penis shop
Penis shopPenis shop
Penis shop
 
Panduan qiamullail ramadhan rev1
Panduan qiamullail ramadhan rev1Panduan qiamullail ramadhan rev1
Panduan qiamullail ramadhan rev1
 
Bathory1 196
Bathory1 196Bathory1 196
Bathory1 196
 
Administracion y crecimiento
Administracion y crecimientoAdministracion y crecimiento
Administracion y crecimiento
 
Alcoholism
AlcoholismAlcoholism
Alcoholism
 
Panduan qiamullail ramadhan
Panduan qiamullail ramadhanPanduan qiamullail ramadhan
Panduan qiamullail ramadhan
 

Similaire à Tornado开发实践

Ryu Learning Guide
Ryu Learning GuideRyu Learning Guide
Ryu Learning Guide呈 李
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐zhangsuoyong
 
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统Dahui Feng
 
用简单语言构建复杂系统
用简单语言构建复杂系统用简单语言构建复杂系统
用简单语言构建复杂系统Leo Zhou
 
Openshift by mtchang
Openshift by mtchangOpenshift by mtchang
Openshift by mtchangChang Mt
 
資訊創意課程 - Create A Personal Website 1
資訊創意課程 - Create A Personal Website 1資訊創意課程 - Create A Personal Website 1
資訊創意課程 - Create A Personal Website 1均民 戴
 
KSDG Python and MongoDB for web
KSDG Python and MongoDB for webKSDG Python and MongoDB for web
KSDG Python and MongoDB for webToomore
 
Docker容器微服務 x WorkShop
Docker容器微服務 x WorkShopDocker容器微服務 x WorkShop
Docker容器微服務 x WorkShopPhilip Zheng
 
Lean Message Architecture Highlights
Lean Message Architecture HighlightsLean Message Architecture Highlights
Lean Message Architecture Highlightssunng87
 
LeanMessage 实时通信云架构
LeanMessage 实时通信云架构LeanMessage 实时通信云架构
LeanMessage 实时通信云架构wenny yuan
 
Web开发基础
Web开发基础Web开发基础
Web开发基础dynaturtle
 
HTML5 实战 WebApp 阅读应用– Shiu
HTML5 实战 WebApp 阅读应用– ShiuHTML5 实战 WebApp 阅读应用– Shiu
HTML5 实战 WebApp 阅读应用– ShiuJingchao Di
 
Guide to GStreamer Application Development Manual: CH1 to CH10
Guide to GStreamer Application Development Manual: CH1 to CH10Guide to GStreamer Application Development Manual: CH1 to CH10
Guide to GStreamer Application Development Manual: CH1 to CH10Wen Liao
 
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战icy leaf
 
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用勇浩 赖
 
Hongxing
HongxingHongxing
Hongxingncmooc
 
Android消息推送实现 | 友盟 徐仙明
Android消息推送实现 | 友盟 徐仙明 Android消息推送实现 | 友盟 徐仙明
Android消息推送实现 | 友盟 徐仙明 imShining @DevCamp
 

Similaire à Tornado开发实践 (20)

Ryu Learning Guide
Ryu Learning GuideRyu Learning Guide
Ryu Learning Guide
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐
 
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
 
用简单语言构建复杂系统
用简单语言构建复杂系统用简单语言构建复杂系统
用简单语言构建复杂系统
 
Openshift by mtchang
Openshift by mtchangOpenshift by mtchang
Openshift by mtchang
 
資訊創意課程 - Create A Personal Website 1
資訊創意課程 - Create A Personal Website 1資訊創意課程 - Create A Personal Website 1
資訊創意課程 - Create A Personal Website 1
 
Html5
Html5Html5
Html5
 
Outside
OutsideOutside
Outside
 
KSDG Python and MongoDB for web
KSDG Python and MongoDB for webKSDG Python and MongoDB for web
KSDG Python and MongoDB for web
 
Docker容器微服務 x WorkShop
Docker容器微服務 x WorkShopDocker容器微服務 x WorkShop
Docker容器微服務 x WorkShop
 
Webrtc
WebrtcWebrtc
Webrtc
 
Lean Message Architecture Highlights
Lean Message Architecture HighlightsLean Message Architecture Highlights
Lean Message Architecture Highlights
 
LeanMessage 实时通信云架构
LeanMessage 实时通信云架构LeanMessage 实时通信云架构
LeanMessage 实时通信云架构
 
Web开发基础
Web开发基础Web开发基础
Web开发基础
 
HTML5 实战 WebApp 阅读应用– Shiu
HTML5 实战 WebApp 阅读应用– ShiuHTML5 实战 WebApp 阅读应用– Shiu
HTML5 实战 WebApp 阅读应用– Shiu
 
Guide to GStreamer Application Development Manual: CH1 to CH10
Guide to GStreamer Application Development Manual: CH1 to CH10Guide to GStreamer Application Development Manual: CH1 to CH10
Guide to GStreamer Application Development Manual: CH1 to CH10
 
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战
 
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用
 
Hongxing
HongxingHongxing
Hongxing
 
Android消息推送实现 | 友盟 徐仙明
Android消息推送实现 | 友盟 徐仙明 Android消息推送实现 | 友盟 徐仙明
Android消息推送实现 | 友盟 徐仙明
 

Tornado开发实践