Top Banner
NGINX + MONGODB ILE TORNADO OLCEKLENEBILIRLIK
26

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

Jul 07, 2015

Download

Engineering

Mehmet Köse

Özgür Web Günleri 2013 Sunumum. Sunu eski ama konular güncel.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Özgür Web Günleri 2013 | Python + Tornado + Nginx + Mongodb ile Ölçeklenebilirlik

NGINX + MONGODB ILE TORNADOOLCEKLENEBILIRLIK

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

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

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

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

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

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

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

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

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

NEDEN

TORNADO?

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

NEDEN

TORNADO?

TEK DOSYA

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

NEDEN

TORNADO?

TEK DOSYABLOKLANMAZ

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

NEDEN

TORNADO?

TEK DOSYABLOKLANMAZ

ASENKRON

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

NEDEN

TORNADO?

TEK DOSYABLOKLANMAZ

ASENKRONKENDİNİ KANITLADI

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

NEDEN

TORNADO?

TEK DOSYABLOKLANMAZ

ASENKRONKENDİNİ KANITLADI

TOPLULUK

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

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()

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

GENELLIKLE KULLANILAN YONTEM*örneğin wordpress

ISTEMCI

APACHE:80

WORDPRESS

MYSQL:3306

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

TORNADO KULLANIYORUZ

ISTEMCI

NGINX:80

TORNADO:8888

MYSQL:3306

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

TORNADO KULLANIYORUZ

ISTEMCI

NGINX:80

TORNADO:8889

MYSQL:3306

TORNADO:8888 TORNADO:8890

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

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

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

YETERSİZ GELDİĞİNDEISTEMCI

NGINX:80

MONGODB:27017

TORNADO1:8888TORNADO1:8889 TORNADO2:8888

TORNADO2:8889

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

TEKRAR YETERSİZ GELDİĞİNDEISTEMCI

NGINX:80

MONGODB:27017

TORNADO1:8888TORNADO1:8889 TORNADO2:8888

TORNADO2:8889

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

TEKRAR YETERSİZ GELDİĞİNDEISTEMCI

NGINX:8080

MONGOs:27017

TORNADO1:8888TORNADO1:8889 TORNADO2:8888

TORNADO2:8889

VARNISH:80

MONGOD1 MONGOD2 MONGOD3

REDIS

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

ÖNERİLER

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

SSD DISK

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

ASENKRON SURUCUASENKRON SURUCU

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

AMAZON S3AMAZON S3

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

CEKIRDEK SAYISICEKIRDEK SAYISI

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

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

● Github.com/finiteloop/socialcookbook

● Github.com/mongodb/motor

● api.mongodb.org/python/current/

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

32DK.COM'da

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