Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Tornado ve Ölçeklenebilirlik

79c95766e7b383725839b79e49a632e0?s=47 Mehmet Köse
November 21, 2013

Tornado ve Ölçeklenebilirlik

Yüksek trafik altındaki web sitelerinin ölçeklendirilmesi, örnek senaryo. NGINX & MONGODB & PYTHON/TORNADO
http://www.ozgurwebgunleri.org.tr/2013/etkinlik-programi/

Tornado & Scalability in Turkish

79c95766e7b383725839b79e49a632e0?s=128

Mehmet Köse

November 21, 2013
Tweet

Transcript

  1. NGINX + MONGODB ILE TORNADO OLCEKLENEBILIRLIK

  2. RESİM ÖĞRETMENİ YAZILIMCI GİRİŞİMCİ flyingottoman.tumblr.com @mehmetkose

  3. “HER PROJE BİR GÜN MİLYONLARCA ZİYARETÇİYE YAYIN YAPABİLMEK AMACI İLE

    KURULUR”
  4. “ “DOĞRU ARAÇLARLA BAŞLARSANIZ, ÖLÇEKLENEBİLİRLİK DOĞRU ARAÇLARLA BAŞLARSANIZ, ÖLÇEKLENEBİLİRLİK SİZİN

    İÇİN LEGO OYNAMAK KADAR KOLAY OLACAKTIR” SİZİN İÇİN LEGO OYNAMAK KADAR KOLAY OLACAKTIR”
  5. BAŞLARKEN PROBLEM : CONCURRENT 10 000 (C10K) Bir sunucunun eşzamanlı

    10k bağlantıdan fazlasını karşılayamaması problemi. ASENKRON PROGRAMLAMA class AsyncHandler(RequestHandler): @tornado.web.asynchronous def get(self): http_client = tornado.httpclient.AsyncHTTPClient() http_client.fetch("http://example.com", callback=self.on_fetch) def on_fetch(self, response): do_something_with_response(response) self.render("template.html")
  6. NEDEN TORNADO?

  7. NEDEN TORNADO? TEK DOSYA

  8. NEDEN TORNADO? TEK DOSYA BLOKLANMAZ

  9. NEDEN TORNADO? TEK DOSYA BLOKLANMAZ ASENKRON

  10. NEDEN TORNADO? TEK DOSYA BLOKLANMAZ ASENKRON KENDİNİ KANITLADI

  11. NEDEN TORNADO? TEK DOSYA BLOKLANMAZ ASENKRON KENDİNİ KANITLADI TOPLULUK

  12. TORNADO 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()
  13. GENELLIKLE KULLANILAN YONTEM *örneğin wordpress ISTEMCI APACHE:80 WORDPRESS MYSQL:3306

  14. TORNADO KULLANIYORUZ ISTEMCI NGINX:80 TORNADO:8888 MYSQL:3306

  15. TORNADO KULLANIYORUZ ISTEMCI NGINX:80 TORNADO:8889 MYSQL:3306 TORNADO:8888 TORNADO:8890

  16. NGINX LOAD BALANCING http { upstream myproject { server 127.0.0.1:8888

    weight=1; server 127.0.0.1:8889; server 127.0.0.1:8890; server 127.0.0.1:8891; } server { listen 80; server_name www.domain.com; location / { proxy_pass http://myproject; } } }
  17. YETERSİZ GELDİĞİNDE ISTEMCI NGINX:80 MONGODB:27017 TORNADO1:8888 TORNADO1:8889 TORNADO2:8888 TORNADO2:8889

  18. TEKRAR YETERSİZ GELDİĞİNDE ISTEMCI NGINX:80 MONGODB:27017 TORNADO1:8888 TORNADO1:8889 TORNADO2:8888 TORNADO2:8889

  19. TEKRAR YETERSİZ GELDİĞİNDE ISTEMCI NGINX:8080 MONGOs:27017 TORNADO1:8888 TORNADO1:8889 TORNADO2:8888 TORNADO2:8889

    VARNISH:80 MONGOD1 MONGOD2 MONGOD3 REDIS
  20. ÖNERİLER

  21. SSD DISK

  22. ASENKRON SURUCU ASENKRON SURUCU

  23. AMAZON S3 AMAZON S3

  24. CEKIRDEK SAYISI CEKIRDEK SAYISI

  25. Nereden Başlamalı? Github.com/facebook/tornado Github.com/finiteloop/socialcookbook Github.com/mongodb/motor api.mongodb.org/python/current/

  26. 32DK.COM 'da Çok Yakında Video Dersler Yayınlıyor Olacağım. Email Abonesi

    Olabilirsiniz.