Özgür Web Günleri 2013 | Python + Tornado + Nginx + Mongodb ile Ölçeklenebilirlik

26
NGINX + MONGODB ILE TORNADO OLCEKLENEBILIRLIK

description

Özgür Web Günleri 2013 Sunumum. Sunu eski ama konular güncel.

Transcript of Özgür Web Günleri 2013 | Python + Tornado + Nginx + Mongodb ile Ölçeklenebilirlik

NGINX + MONGODB ILE TORNADOOLCEKLENEBILIRLIK

RESİM ÖĞRETMENİ YAZILIMCIGİRİŞİMCİflyingottoman.tumblr.com@mehmetkose

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

““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”

BAŞLARKEN

PROBLEM : CONCURRENT 10 000 (C10K)Bir sunucunun eşzamanlı 10k bağlantıdan fazlasını karşılayamaması

problemi.

ASENKRON PROGRAMLAMAclass 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")

NEDEN

TORNADO?

NEDEN

TORNADO?

TEK DOSYA

NEDEN

TORNADO?

TEK DOSYABLOKLANMAZ

NEDEN

TORNADO?

TEK DOSYABLOKLANMAZ

ASENKRON

NEDEN

TORNADO?

TEK DOSYABLOKLANMAZ

ASENKRONKENDİNİ KANITLADI

NEDEN

TORNADO?

TEK DOSYABLOKLANMAZ

ASENKRONKENDİNİ KANITLADI

TOPLULUK

TORNADOHELLO WORLD

import tornado.ioloopimport 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()

GENELLIKLE KULLANILAN YONTEM*örneğin wordpress

ISTEMCI

APACHE:80

WORDPRESS

MYSQL:3306

TORNADO KULLANIYORUZ

ISTEMCI

NGINX:80

TORNADO:8888

MYSQL:3306

TORNADO KULLANIYORUZ

ISTEMCI

NGINX:80

TORNADO:8889

MYSQL:3306

TORNADO:8888 TORNADO:8890

NGINXLOAD 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; } }}

YETERSİZ GELDİĞİNDEISTEMCI

NGINX:80

MONGODB:27017

TORNADO1:8888TORNADO1:8889 TORNADO2:8888

TORNADO2:8889

TEKRAR YETERSİZ GELDİĞİNDEISTEMCI

NGINX:80

MONGODB:27017

TORNADO1:8888TORNADO1:8889 TORNADO2:8888

TORNADO2:8889

TEKRAR YETERSİZ GELDİĞİNDEISTEMCI

NGINX:8080

MONGOs:27017

TORNADO1:8888TORNADO1:8889 TORNADO2:8888

TORNADO2:8889

VARNISH:80

MONGOD1 MONGOD2 MONGOD3

REDIS

ÖNERİLER

SSD DISK

ASENKRON SURUCUASENKRON SURUCU

AMAZON S3AMAZON S3

CEKIRDEK SAYISICEKIRDEK SAYISI

Nereden Başlamalı?● Github.com/facebook/tornado

● Github.com/finiteloop/socialcookbook

● Github.com/mongodb/motor

● api.mongodb.org/python/current/

32DK.COM'da

Çok Yakında Video Dersler Yayınlıyor Olacağım. Email Abonesi Olabilirsiniz.