Introduction to Tornado

Tornado là một web framwork được viết bằng Python và được phát triển bởi các lập trình viên của FriendFeed.com. Vào năm 2009, khi Facebook mua lại, Facebook đã open source dự án này. Tornado là một web framework khá đơn giản nhưng điều khiến Tornado khác với các web framework hiện giờ là khả năng xử lý các request không đồng bộ, non blocking I/O và khả năng mở rộng tốt. Hiện tại đang có khá nhiều các dịch vụ web đang sử dụng framework này có thể kể đến như:

Để cài đặt Tornado, bạn có thể càt đặt setuptools trước và dùng nó để cài đặt tornado như sau:

sudo apt-get install python-setuptools

** sudo easy_install tornado**

hoặc truy cập vào http://www.tornadoweb.org để tại về bản mới nhất (stable version: 3.0.2) Để thiết lập 1 web server với tornado rất đơn giản. Dưới đây là toàn bộ source code cho 1 web server đơn giản khi ta truy cập đến trang chính, server sẽ trả về "Hello, world":

import tornado.ioloop
import tornado.web`

class MainHandler(tornado.web.RequestHandler):
def get(self):
    self.write("Hello, world")

application = tornado.web.Application([
(r"/", MainHandler),
])

if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

Phần code của hàm main sẽ sinh ra một IOLoop và web server lắng nghe trên cổng 8888. Khi có truy cập đến "/" (tức là http://localhost:8888/) thì dựa trên regular expression : r"/", tornado sẽ chuyển request này cho MainHandler xử lý. Trong class này, ta implement một hàm get() để xử lý tất cả các request GET.

Hình dưới đây sẽ cho ta cái nhìn tổng quát về hoạt động của 1 Tornado server :

Tornado

Tornado's Architecture

Tuy là 1 framework đơn giản so với các web framework khác, Tornado vẫn hỗ trợ khá nhiều tính năng, có thể kể đến như :

  • Templates (với các đoạn code Python nhúng bên trong)
  • Localization (tự động dịch các đoạn text sang ngôn ngữ tương ứng với yêu cầu của người dùng)
  • XSS, CSRF protection
  • Xác thực bằng secure cookie hoặc bên thứ ba (Google, Twitter, Facebook, OAuth, ...)
  • Static file caching
  • ... Các web server (ví dụ như Apache) là** threaded server**, với mỗi request đến, server sẽ sinh ra 1 thread mới để handle request đó. Tuy nhiên, khi số lượng request lên đến vài chục nghìn, việc sinh thread mới sẽ trở lên khá tốn kém tài nguyên của server. Thêm vào đó, các thư viện cần phải là thread-safe, tức là nhiều thread có thể sử dụng thư viện đó tại cùng 1 thời điểm. Tornado sử dụng non-blocking IO và là event driven server nên việc xử lý hàng nghìn request ko phải là vấn đề. Tuy nhiên, để phát huy tối đa khả năng của Tornado, các thư viện sử dụng cùng với nó cũng phải hoạt động theo cơ chế non-blocking. Sau đây là kết quả benchmark của Tornado so với các web server khác.

https://developers.facebook.com/blog/post/301/

(Source : https://developers.facebook.com/blog/post/301/)

Tornado là một web server framework đơn giản, thích hợp cho những service cần xử lý số lượng lớn request cùng lúc như chat server hoặc các dịch vụ theo thời gian thực, hoặc cần giữ kết nối (long polling). Tuy nhiên, nếu bạn cần 1 framework theo mô hình MVC thì Django mới là lựa chọn hợp lý.

Slideshare :

Introduction to Tornado from Framgia