Tornado ne zaman ve nasıl kullanılır? Ne zaman işe yaramaz?


84

Tamam, Tornado engellemez ve oldukça hızlıdır ve birçok bekleyen talebi kolayca karşılayabilir.

Ama sanırım bu sihirli bir değnek değil ve Django tabanlı veya Tornado ile başka bir siteyi kör bir şekilde çalıştırırsak, herhangi bir performans artışı sağlamayacaktır.

Bunun kapsamlı bir açıklamasını bulamadım, bu yüzden burada soruyorum:

  • Tornado ne zaman kullanılmalıdır?
  • Ne zaman işe yaramaz?
  • Kullanırken nelere dikkat edilmelidir?
  • Tornado kullanarak nasıl verimsiz site yapabiliriz ?
  • Bir sunucu ve bir web çerçevesi var. Framework'ü ne zaman kullanmalıyız ve onu ne zaman başka bir çerçeveyle değiştirebiliriz?

Yanıtlar:


45

Bir sunucu ve bir web çerçevesi var. Framework'ü ne zaman kullanmalıyız ve onu ne zaman başka bir çerçeveyle değiştirebiliriz?

Bu ayrım biraz bulanık. Yalnızca statik sayfalar sunuyorsanız, lightthttpd gibi hızlı sunuculardan birini kullanırsınız. Aksi takdirde, çoğu sunucu, web uygulamaları geliştirmek için değişen bir çerçeve karmaşıklığı sağlar. Tornado, iyi bir web çerçevesidir. Twisted daha da yeteneklidir ve iyi bir ağ oluşturma çerçevesi olarak kabul edilir. Bir çok protokolü destekler.

Tornado ve Twisted, engellemesiz, eşzamansız web / ağ uygulaması geliştirmeyi destekleyen çerçevelerdir.

Tornado ne zaman kullanılmalıdır? Ne zaman işe yaramaz? Kullanırken nelere dikkat edilmelidir?

Doğası gereği, Async / Non-Blocking I / O, I / O yoğun olduğunda ve hesaplama yoğun olmadığında harika çalışır. Çoğu web / ağ oluşturma uygulaması bu model için uygundur. Uygulamanız belirli hesaplama yoğun görevlerin yapılmasını gerektiriyorsa, daha iyi idare edebilecek başka bir hizmete devredilmesi gerekir. Tornado / Twisted, web isteklerine yanıt vererek web sunucusunun işini yapabilir.

Tornado kullanarak nasıl verimsiz site yapabiliriz?

  1. Hesaplama açısından yoğun herhangi bir iş yapın
  2. Engelleme işlemlerini tanıtın

Ama sanırım bu sihirli bir değnek değil ve Django tabanlı veya Tornado ile başka bir siteyi kör bir şekilde çalıştırırsak, herhangi bir performans artışı sağlamayacaktır.

Performans genellikle tam web uygulama mimarisinin bir özelliğidir. Uygulama düzgün tasarlanmadıysa, çoğu web çerçevesiyle performansı düşürebilirsiniz. Önbelleğe alma, yük dengeleme vb. Hakkında düşünün.

Tornado ve Twisted, makul performans sağlar ve yüksek performanslı web uygulamaları oluşturmak için iyidirler. Neler yapabileceklerini görmek için hem bükülmüş hem de kasırga referanslarına göz atabilirsiniz.


1
Cevap için teşekkür ederim. Sadece bazı noktaları açıklığa kavuşturmak istiyorum: Uygulama kodunu değiştirmeden Flask veya Django bihind Tornado'yu kullanabilir miyim ve tüm avantajlarından (herhangi bir kamputasyon görevi yapmazsam) elde edebilir miyim?
Vladimir Sidorenko

Cevabınız evet ise - flup ile söylemeye çalışmakla karşılaştırıldığında ne fark olacak? Teşekkür ederim.
Vladimir Sidorenko

Tornado uygulamasında RSS beslemelerini ayrıştırmak istiyorum. Bunun hesaplama açısından oldukça yoğun olduğunu düşünüyor musunuz?
Susheel Javadi

6

Eski bir soruyu cevapladığım için üzgünüm ama buna rastladım ve neden daha fazla cevabı olmadığını merak ettim. Bart J'nin sorusuna cevap vermek için:

Tornado uygulamasında RSS beslemelerini ayrıştırmak istiyorum. Bunun hesaplama açısından oldukça yoğun olduğunu düşünüyor musunuz?

Bu, ne tür bir ayrıştırma yaptığınıza ve hangi donanıma bağlı olduğuna bağlıdır :) Uzun süre uzun bir süredir, bu nedenle uygulamanızın yanıt vermesi yarım saniyeden fazla sürerse, yavaş görünecektir - uygulamanızın profilini çıkarın.

Hızlı sistemlerin anahtarı harika mimaridir, örneğin hangi çerçeveyi kullandığınız kadar spesifik değildir (Twisted, Tornado, Apache + PHP). Tornado'nun eşzamansız bir işleme stili var ve bence çoğu da buna bağlı. Node.js, Twisted ve Yaws, hafif bir yaklaşım ve eşzamansız işleme stili nedeniyle çok iyi ölçeklenen diğer eşzamansız web sunucularının örnekleridir.

Yani:

Tornado ne zaman kullanılmalıdır?

Ne zaman işe yaramaz?

Tornado, gelen bir istemciye yanıt verebildiği, bir istek işleyicisi gönderebildiği ve sonuç geri araması olay kuyruğunda basılıncaya kadar o istemciyi düşünmediği için birçok bağlantıyı idare etmek için iyidir. Bu nedenle, bu özel kalite için Tornado, çok sayıda talebi ele alırken iyi ölçeklendirmek istediğinizde kullanılmalıdır. Eşzamansız işlem, işlevsel ayrıştırmayı ve paylaşılmayan veri erişimini kolaylaştırır. Bu, REST veya diğer Hizmet Odaklı Mimariler gibi devletsiz tasarımlarla gerçekten iyi sallanır . Ayrıca, iş parçacığı veya süreçlerin doğuştan gelen ek yükü ile çok fazla uğraşmak zorunda değilsiniz ve bazı kilitleme / IPC sorunlarından kurtulabilirsiniz.

Öte yandan, arka uç ve / veya veri deponuzun istekleri işlemesi uzun sürerse, Tornado pek bir fark yaratmayacaktır. Özellikle eş zamanlı tasarımlar ve Web servislerinin yapılmasına yardımcı olur. Eşzamanlı mimari, tasarımınızı ölçeklendirmeyi ve bağlantıyı düşük tutmayı kolaylaştırır. En azından Tornado ile olan deneyimim bu.


Hizmetinizde hesaplama açısından yoğun (örneğin> 1sn) birkaç işleminiz varsa ne olur? Bu tür bir işlemi engellemesiz bir şekilde yapmak hala mümkün mü?
tigeronk2

@ tigeronk2 Evet, ancak hesaplamayı başka bir işlemde / işlemde çalıştırmanız gerekecek.
Morten Jensen

Veya başka bir işlemi yönetmeye kıyasla küçük bir ek yük ile ölçeklenebilirlik ve ayırma elde etmek için başka bir hizmet olarak yoğun süreci potansiyel olarak çalıştırın. Hizmet odaklı mimariler bağlantısına bakın.
Tyeth

RSS'yi ayrıştırma, çok çok yanlış yapmadığınız sürece, neredeyse tanımı gereği ağır bir işlem değildir.
üçlü
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.