به کمک جانگو به میلیون‌ها کاربر سرویس دهید

رضا محمدی

مدیر محصول در کافه‌بازار

دومین کنفرانس پایتون ایران – ‏۱۱ اردیبهشت ماه ۱۳۹۴

کمی تاریخچه و آمار

PC صبور

این دستگاه دو سال به کاربران کافه‌بازار سرویس داد.

روزهای آخر، کار بیش از یک میلیون کاربر در روز را راه می‌انداخت.

 

 

 

روحش شاد، یادش گرامی باد.

سربازان تازه نفس

هم‌اکنون بیش از دوجین سرور که اکثراً مجهز به دو سی‌پی‌یوی ®Xeon هستند در سرویس‌دهی به حدود ۲۰ میلیون دستگاه فعال (در دو ماه) با همدیگر همکاری می‌کنند.

پهنای باند بلعیده‌شده

کاربران بازار به طور متوسط در حال بلعیدن حدود 8Gb/s محتوا از سرورهای به اصطلاح خودمون CDN بازار هستند.

 

 

پیک انتهای راست تصویر مربوط به آپدیت Clash of Clans است. 

هر چند از ابتدای کار از Django استفاده کردیم، در طی این سال‌ها چندین بار معماری کدهایمان تغییر کرده است.

Scaling = تعویض همهٔ اجزای ماشین، در حالی که با سرعت ۱۰۰ مایل در ساعت می‌رانیدش.

Mike Krieger

Co-founder @ Instagram

نسخه‌ای برای سرویس‌دهی میلیونی بی سردرد:

در ابتدای کار سرویس‌دهی به میلیون‌ها کاربر از طریق سرورهای متعدد را پیش‌بینی کنید.

نسخه‌ای مناسب برای

شکست کسب و کار

Scaling در یک کسب و کار موفق گریزناپذیر است.

Django

المپیاد فیزیک جهانی ۲۰۰۷ – اصفهان

The Web framework
for perfectionists
with deadlines

Apache HTTP Server

۱۰۰ کاربر همزمان

آپاچی به ازای هر کانکشن رم زیادی را اشغال می‌کرد، چرا که تمامی ماژول‌ها را لود می‌کرد.

کانکشن‌ها در ایران کند بودند، و لذا مدت بیشتری از آنچه در سناریوهای متداول مطرح است باز می‌ماندند.

 

 

 

بدین ترتیب نهایتاً به معماری فعلی رسیدیم...

NGINX + Gunicorn 

GUNICORN

پروسهٔ master صبر می‌کند تا کاربر درخواستش را کامل بیان کند، سپس درخواست را به یکی از workerها پاس می‌دهد. worker پس از محاسبهٔ نتیجه، آنرا فوراً به master اعلام می‌کنند و برای درخواست بعدی آماده می‌شوند. master این جواب را متناسب با سرعت کانکشن به کاربر می‌رساند.

NGINX

سریع و سبک

 

برای محتوای پویا باید به سرویس‌دهندهٔ اصلی پروکسی‌اش کنید.


location ^~ /json {
    proxy_pass_header Server;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Scheme $scheme;
    proxy_pass http://gunicorn_json;
    client_max_body_size 40K;
    access_log /var/log/nginx/json.log for_gunicorn;
}

PostgreSQL

Replication – Multiple Active DBs


DATABASES = {
    'default': { ... },
    'readonly': { ... }
}

ApplicationPurchase.objects.using('readonly')
                   .filter(app=app)
                   .aggregate(Sum('amount'), Count('amount'))

Memcached & Redis

وقتی که اطلاعات Device ها در یک کامپیوتر جا نمی‌شود.

Horizontal Partitioning

aka. Sharding

Scaling برای انسان‌ها

⚔   تیم‌های مستقل

☸   در راستای محصول

♔  مسئول سیستم
☼  او کی آر

به کمک جانگو به میلیون‌ها کاربر سرویس دهید

By Reza Mohammadi

به کمک جانگو به میلیون‌ها کاربر سرویس دهید

  • 2,278