Özgür Web Günleri 2013 | Python + Tornado + Nginx + Mongodb ile Ölçeklenebilirlik
-
Upload
mehmet-koese -
Category
Engineering
-
view
197 -
download
1
description
Transcript of Ö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”
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")
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()
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
Nereden Başlamalı?● Github.com/facebook/tornado
● Github.com/finiteloop/socialcookbook
● Github.com/mongodb/motor
● api.mongodb.org/python/current/