Özgür web günleri 2013 | python + tornado + nginx + mongodb ile Ölçeklenebilirlik
DESCRIPTION
Özgür Web Günleri 2013 Sunumum. Sunu eski ama konular güncel.TRANSCRIPT
““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/