Slide 1

Slide 1 text

NGINX + MONGODB ILE TORNADO OLCEKLENEBILIRLIK

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

NEDEN TORNADO?

Slide 7

Slide 7 text

NEDEN TORNADO? TEK DOSYA

Slide 8

Slide 8 text

NEDEN TORNADO? TEK DOSYA BLOKLANMAZ

Slide 9

Slide 9 text

NEDEN TORNADO? TEK DOSYA BLOKLANMAZ ASENKRON

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

GENELLIKLE KULLANILAN YONTEM *örneğin wordpress ISTEMCI APACHE:80 WORDPRESS MYSQL:3306

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

TEKRAR YETERSİZ GELDİĞİNDE ISTEMCI NGINX:8080 MONGOs:27017 TORNADO1:8888 TORNADO1:8889 TORNADO2:8888 TORNADO2:8889 VARNISH:80 MONGOD1 MONGOD2 MONGOD3 REDIS

Slide 20

Slide 20 text

ÖNERİLER

Slide 21

Slide 21 text

SSD DISK

Slide 22

Slide 22 text

ASENKRON SURUCU ASENKRON SURUCU

Slide 23

Slide 23 text

AMAZON S3 AMAZON S3

Slide 24

Slide 24 text

CEKIRDEK SAYISI CEKIRDEK SAYISI

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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