Sử dụng Tornado khi nào và như thế nào? Khi nào thì vô ích?


84

Ok, Tornado không bị chặn và khá nhanh và nó có thể xử lý rất nhiều yêu cầu đứng một cách dễ dàng.

Nhưng tôi đoán đó không phải là một viên đạn bạc và nếu chúng tôi chỉ chạy một cách mù quáng dựa trên Django hoặc bất kỳ trang web nào khác với Tornado thì nó sẽ không tăng hiệu suất.

Tôi không thể tìm thấy lời giải thích toàn diện về điều này, vì vậy tôi đang hỏi nó ở đây:

  • Khi nào nên sử dụng Tornado?
  • Khi nào là vô ích?
  • Khi sử dụng cần lưu ý những gì?
  • Làm cách nào để chúng tôi có thể tạo trang web không hiệu quả bằng Tornado?
  • Có một máy chủ và một khung web. Khi nào chúng ta nên sử dụng framework và khi nào chúng ta có thể thay thế nó bằng một framework khác?

Câu trả lời:


45

Có một máy chủ và một khung web. Khi nào chúng ta nên sử dụng framework và khi nào chúng ta có thể thay thế nó bằng một framework khác?

Sự phân biệt này hơi mờ. Nếu bạn chỉ phục vụ các trang tĩnh, bạn sẽ sử dụng một trong những máy chủ nhanh như lighthttpd. Mặt khác, hầu hết các máy chủ cung cấp một khung phức tạp khác nhau để phát triển các ứng dụng web. Tornado là một khung công tác web tốt. Twisted thậm chí còn có nhiều khả năng hơn và được coi là một khung mạng tốt. Nó có hỗ trợ cho rất nhiều giao thức.

Tornado và Twisted là các framework cung cấp hỗ trợ phát triển ứng dụng web / mạng không đồng bộ, không chặn.

Khi nào nên sử dụng Tornado? Khi nào thì vô ích? Khi sử dụng cần lưu ý những gì?

Về bản chất của nó, I / O Async / Non-Blocking hoạt động tuyệt vời khi nó là I / O chuyên sâu và không chuyên sâu về tính toán. Hầu hết các ứng dụng web / mạng đều phù hợp với mô hình này. Nếu ứng dụng của bạn yêu cầu thực hiện một số tác vụ tính toán chuyên sâu nhất định thì nó phải được giao cho một số dịch vụ khác có thể xử lý tốt hơn. Trong khi Tornado / Twisted có thể thực hiện công việc của máy chủ web, phản hồi các yêu cầu web.

Làm thế nào chúng tôi có thể tạo trang web không hiệu quả bằng Tornado?

  1. Làm bất kỳ điều gì nhiệm vụ tính toán chuyên sâu
  2. Giới thiệu các hoạt động chặn

Nhưng tôi đoán đó không phải là một viên đạn bạc và nếu chúng tôi chỉ chạy một cách mù quáng dựa trên Django hoặc bất kỳ trang web nào khác với Tornado thì nó sẽ không tăng hiệu suất.

Hiệu suất thường là một đặc điểm của kiến ​​trúc ứng dụng web hoàn chỉnh. Bạn có thể làm giảm hiệu suất với hầu hết các khuôn khổ web, nếu ứng dụng không được thiết kế đúng cách. Hãy nghĩ về bộ nhớ đệm, cân bằng tải, v.v.

Tornado và Twisted cung cấp hiệu suất hợp lý và chúng rất tốt để xây dựng các ứng dụng web hiệu quả. Bạn có thể kiểm tra các lời chứng thực cho cả xoắn và lốc xoáy để xem chúng có khả năng gì.


1
Cảm ơn bạn đã trả lời. Tôi chỉ muốn làm rõ một số điểm: Tôi có thể sử dụng Flask hoặc Django bihind Tornado và nhận được tất cả các lợi ích của nó (nếu tôi không thực hiện bất kỳ nhiệm vụ cắm trại nào) mà không cần thay đổi mã ứng dụng không?
Vladimir Sidorenko

Nếu có - sự khác biệt so với chạy nói với flup là gì? Cảm ơn bạn.
Vladimir Sidorenko

Tôi muốn phân tích cú pháp nguồn cấp RSS trong ứng dụng Tornado. Bạn có xem xét điều đó khá chuyên sâu về mặt tính toán không?
Susheel Javadi

6

Tôi xin lỗi vì đã trả lời một câu hỏi cũ, nhưng tôi đã xem qua câu hỏi này và tự hỏi tại sao nó không có thêm câu trả lời. Để trả lời câu hỏi của Bart J:

Tôi muốn phân tích cú pháp nguồn cấp RSS trong ứng dụng Tornado. Bạn có xem xét điều đó khá chuyên sâu về mặt tính toán không?

Điều đó phụ thuộc vào loại phân tích cú pháp bạn đang làm và trên phần cứng nào :) Thời gian là một khoảng thời gian dài, vì vậy nếu ứng dụng của bạn mất hơn nửa giây để phản hồi, nó sẽ có vẻ chậm chạp - hãy lập hồ sơ ứng dụng của bạn.

Chìa khóa của hệ thống nhanh là kiến ​​trúc tuyệt vời, chứ không phải quá nhiều chi tiết cụ thể như khung công tác bạn đang sử dụng (Twisted, Tornado, Apache + PHP). Tornado có phong cách xử lý không đồng bộ và đó thực sự là điều mà tôi nghĩ đến rất nhiều. Node.js, Twisted và Yaws là những ví dụ về các máy chủ web không đồng bộ khác có quy mô rất tốt vì cách tiếp cận nhẹ và phong cách xử lý không đồng bộ.

Vì thế:

Khi nào nên sử dụng Tornado?

Khi nào là vô ích?

Tornado rất tốt để xử lý nhiều kết nối, vì nó có thể phản hồi với một ứng dụng khách đến, gửi một trình xử lý yêu cầu và không nghĩ về ứng dụng khách đó cho đến khi gọi lại kết quả được đẩy lên hàng đợi sự kiện. Vì vậy, đối với chất lượng cụ thể Tornado nên được sử dụng khi bạn muốn mở rộng quy mô tốt khi xử lý nhiều yêu cầu. Việc xử lý không đồng bộ tạo điều kiện cho việc tách chức năng và truy cập dữ liệu không chia sẻ. Điều đó thực sự phù hợp với thiết kế không trạng thái như REST hoặc các Kiến trúc hướng dịch vụ khác . Bạn cũng không phải đối phó với các luồng hoặc quy trình sinh sản với chi phí vốn có quá nhiều và bạn có thể tiết kiệm một số rắc rối về khóa / IPC.

Mặt khác, Tornado sẽ không tạo ra nhiều khác biệt, nếu chương trình phụ trợ và / hoặc kho lưu trữ dữ liệu của bạn mất nhiều thời gian để xử lý các yêu cầu. Nó giúp thực hiện các thiết kế đồng thời và các dịch vụ Web nói riêng. Kiến trúc đồng thời giúp dễ dàng mở rộng thiết kế của bạn và giữ cho khớp nối thấp. Đó là kinh nghiệm của tôi với Tornado ít nhất.


Điều gì sẽ xảy ra nếu bạn có một vài thao tác trong dịch vụ của mình đòi hỏi nhiều tính toán (giả sử> 1 giây)? Vẫn có thể thực hiện loại xử lý đó theo cách không chặn?
tigeronk2

@ tigeronk2 Có, nhưng bạn sẽ phải chạy tính toán trong một luồng / quy trình khác.
Morten Jensen

Hoặc có khả năng chạy quy trình chuyên sâu như một dịch vụ khác để đạt được khả năng mở rộng và tách biệt với chi phí nhỏ so với quản lý quy trình khác. Nhìn vào liên kết Kiến trúc hướng dịch vụ.
Tyeth

Phân tích cú pháp RSS theo định nghĩa gần như không phải là quá trình xử lý nặng, trừ khi bạn làm rất sai.
tripleee
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.