16
ن مقاله عنوا: سایتعماریرسی م برStack Overflow یه تهویسان مرجع تخصصی برنامه ن وتنظیم کننده :www.barnamenevisan.org [email protected] سایتعماریالی مرسی اجمین مقاله ، به بر در اStack Overflow امی. تم پردازیمط با آن میهای مرتب و سخت افزار بدهیم ارائه به شماوبین سایت محبملی از ایق و کا دقید بتوانیم دند تایل شده ارسی و تحلت کامل ، بر موارد به صور. ره این ک کلی درباید به دست آوردن یک د برایرسیید با برای کنند، بی به چه صورت کار میین سایتمه اجزا در ا ه ه سایت هایز به روز رسانی بخشی اStack Overflow کنید که مربوط بهده می مشاهری را زیر آماوع کنیم. در شر12 نوامبر2013 تا9 فوریه2016 می باشد: 209,420,973 (+61,336,090) : ست های درخواHttp که بهload balancer ه می شوند ها فرستاد. : 66,294,789 (+30,199,477) می شوندرگذاری صفحاتی که با. : 1,240,266,346,053 (+406,273,363,426) ( بایت1.4 ، میزان ترافیکبایت ترا) Http فرستاده می است که شود. : 569,449,470,023 (+282,874,825,991) ( بایت569 ی است دریافتت هاین کل بای میزا)گابایت گی. : 3,084,303,599,266 (+1,958,311,041,954) ( بایت3.08 لی استرسای ان کل بایت ها میزا)بابت ترا.

Stack Overflowتیاس یامعم یسب هلاقم ناونع ناسیون همانب ...Stack Overflowتیاس یامعم یسب : هلاقم ناونع ناسیون همانب یصصzت

  • Upload
    others

  • View
    16

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Stack Overflowتیاس یامعم یسب هلاقم ناونع ناسیون همانب ...Stack Overflowتیاس یامعم یسب : هلاقم ناونع ناسیون همانب یصصzت

Stack Overflow بررسی معماری سایت :عنوان مقاله

وتنظیم کننده : مرجع تخصصی برنامه نویسانتهیه

www.barnamenevisan.org [email protected]

و سخت افزارهای مرتبط با آن می پردازیم. تمامی Stack Overflow در این مقاله ، به بررسی اجمالی معماری سایت

.موارد به صورت کامل ، بررسی و تحلیل شده اند تا بتوانیم دید دقیق و کاملی از این سایت محبوب به شما ارائه بدهیم

ه همه اجزا در این سایت به چه صورت کار می کنند، بیایید با بررسی برای به دست آوردن یک دید کلی درباره این ک

12شروع کنیم. در زیر آماری را مشاهده می کنید که مربوط به Stack Overflowبخشی از به روز رسانی های سایت

:می باشد 2016فوریه 9تا 2013نوامبر

.ها فرستاده می شوند load balancerکه به Httpدرخواست های : (61,336,090+) 209,420,973

.صفحاتی که بارگذاری می شوند (30,199,477+) 66,294,789 :

است که فرستاده می Http( ترابایت، میزان ترافیک 1.4بایت ) (406,273,363,426+) 1,240,266,346,053 :

.شود

.گیگابایت( میزان کل بایت های دریافتی است 569بایت ) (282,874,825,991+) 569,449,470,023 :

. ترابابت( میزان کل بایت های ارسالی است 3.08بایت ) (1,958,311,041,954+) 3,084,303,599,266 :

Page 2: Stack Overflowتیاس یامعم یسب هلاقم ناونع ناسیون همانب ...Stack Overflowتیاس یامعم یسب : هلاقم ناونع ناسیون همانب یصصzت

Stack Overflow بررسی معماری سایت :عنوان مقاله

وتنظیم کننده : مرجع تخصصی برنامه نویسانتهیه

www.barnamenevisan.org [email protected]

که بر روی سایت زده می شود. )فقط از طریق درخواست های SQLکوئری : (170,244,740+) 504,816,843 Http)

ها Redis hitمیزان (5,418,818,063+) 5,831,683,114 :

: 17,158,874 (not tracked in 2013) جستجوی Elastic

Tagدرخواست های از طریق (57,716+) 3,661,134 :

.می شود SQlمیلی ثانیه که صرف اجرای کوئری های (48,848,481+) 607,073,066 :

.ها می شود Redis hit میلی ثانیه که صرف (88,950,843-) 10,396,073 :

: 147,018,571 (+14,634,512) ms (40.8 hours) طریق از های درخواست میلی ثانیه که صرف Tag ها می

.شود

.می شود ASP.netمیلی ثانیه که صرف پردازش ها در : 1,609,944,3) 01- (1,118,232,744

درخواست های بارگذاری و 49,180,275 برای ( ASP.Net در میلی ثانیه 19.12 )میلی ثانیه (5.29-) 22.71 :

نمایش صفحه

درخواست های بارگذاری صفحه 6,370,076 برای ( ASP.Net در میلی ثانیه )8.81 میلی ثانیه (53.2-) 11.80

اصلی

نظر شما را جلب کرده باشد، و این در حالی است 2013شاید کاهش قابل توجه زمان پردازش سیستم در مقایسه با سال

شته است. این موضوع به دو دلیل اتفاق افتاده است که میلیون افزایش دا 61که تعداد درخواست ها نسبت به آن سال،

. است 2015یکی از آن ها ارتقای سخت افزار سیستم در اوایل سال

Page 3: Stack Overflowتیاس یامعم یسب هلاقم ناونع ناسیون همانب ...Stack Overflowتیاس یامعم یسب : هلاقم ناونع ناسیون همانب یصصzت

Stack Overflow بررسی معماری سایت :عنوان مقاله

وتنظیم کننده : مرجع تخصصی برنامه نویسانتهیه

www.barnamenevisan.org [email protected]

بنابراین تغییرات این دو سال اخیر سیستم چه بوده است؟ بجز جایگزینی های تعدادی سرور و مجهز کردن شبکه ها ،

سخت افزارهای سیستم که سایت، امروزه بر روی آن ها در حال برترین از برخی کار دیگری انجام نشده است.

:توجه کنید ( 2013اجراست، در زیر آورده شده اند: )به تغییرات آن نسبت به سال

(تا از آن ها، جدید است 2که سخت افزار مربوط به ) Microsoft SQL Serverعدد 4

(به تازگی ، جدید خریداری شده است که سخت افزار مربوط به آن ها) IIS Web Serverعدد 11

(که سخت افزار مربوط به آن ها به تازگی ، جدید خریداری شده است) Redis Serverعدد 2

(تا از آن ها، جدید است 2که سخت افزار مربوط به ) Tag Engine serverعدد 3

( هستند 2013همان سیستم های ) Elasticsearch serverعدد 3

(.اضافه شده اند CloudFlareتا از آن ها برای پشتیبانی از 2که ) HAProxy Load Balancerعدد 4

ارتقا 10Gbpsدارند که تا Nexus 5596 Core + 2232TM Fabric Extendersعدد شبکه )که هر کدام یک 2

(.داده شده اند

(.جایگزین شده اند Cisco 5525-X ASAsکه با ) Fortinet 800Cعدد فایروال 2

(.جایگزین شده اندCisco 3945 Routerکه با ) Cisco ASR-1001عدد روتر 2

(.که جدید هستند) Cisco ASR-1001-xعدد روتر 2

به اما است، نکرده چندانی تغییر 2013به چه چیزی نیاز داریم؟ این سایت از سال Stack Overflowبرای راه اندازی

افزار های جدیدی که در باال به آن ها اشاره کردیم، ما در اولین مرحله کار، مربوط به بهینه سازی و سخت مسائل دلیل

سرور ضروری کاهش داده بودیم. ما قبال این مورد را چندین بار بر روی سیستم تست کرده ایم که 1سطح نیازمان را تا

.فقط در چند مورد محدود، موفقیت آمیز بوده است

Page 4: Stack Overflowتیاس یامعم یسب هلاقم ناونع ناسیون همانب ...Stack Overflowتیاس یامعم یسب : هلاقم ناونع ناسیون همانب یصصzت

Stack Overflow بررسی معماری سایت :عنوان مقاله

وتنظیم کننده : مرجع تخصصی برنامه نویسانتهیه

www.barnamenevisan.org [email protected]

و میزان بزرگی سایت در ذهن مان ایجاد شده است، بیایید به چگونگی ساخت این حاال که ایده هایی درباره مقیاس

صفحه های وب زیبا بپردازیم. به این دلیل که بخش های زیادی از سیستم در محیط کامال پوشیده و ایزوله ایجاد شده

گرفته دقت به باید و نداند، تصمیمات مربوط به معماری و سازگاری قطعات با یکدیگر، تصمیمات چندان راحتی نیست

کارهایی با مقیاس باال را تحت پوشش خودمان قرار بدهیم. در این مقاله یک ابتدا که است این اینجا در ما هدف. شوند

. بررسی اجمالی از لحاظ منطقی بر روی نکات و تجهیزات سخت افزاری خواهیم داشت

rack Aی به چه صورت هستند، تصویر زیر آورده شده است که برای این که بتوانید ببینید دقیقا تجهیزات سخت افزار

(.نیز دارد rack Bرا نمایش می دهد. )که یک نمونه مشابه به نام

Page 5: Stack Overflowتیاس یامعم یسب هلاقم ناونع ناسیون همانب ...Stack Overflowتیاس یامعم یسب : هلاقم ناونع ناسیون همانب یصصzت

Stack Overflow بررسی معماری سایت :عنوان مقاله

وتنظیم کننده : مرجع تخصصی برنامه نویسانتهیه

www.barnamenevisan.org [email protected]

یایید به سراغ بررسی را مشاهده کنید. حاال ب آلبوماگر می خواهید تصاویر بیشتری را در این زمینه ببینید، می توانید این

یک تصویر کلی منطقی از سیستم اصلی ای که در حال حاضر بر روی سایت فعال زیر در بخش های مختلف برویم .

:است را می بینید

Page 6: Stack Overflowتیاس یامعم یسب هلاقم ناونع ناسیون همانب ...Stack Overflowتیاس یامعم یسب : هلاقم ناونع ناسیون همانب یصصzت

Stack Overflow بررسی معماری سایت :عنوان مقاله

وتنظیم کننده : مرجع تخصصی برنامه نویسانتهیه

www.barnamenevisan.org [email protected]

قوانین اساسی

قوانینی که در اینجا مطرح می شوند، یک سری قوانین کلی هستند که به صورت گسترده و در همه سطوح مورد استفاده

.قرار می گیرند. بنابراین آن ها را هر بار و در هر مرحله تکرار نمی کنیم

Page 7: Stack Overflowتیاس یامعم یسب هلاقم ناونع ناسیون همانب ...Stack Overflowتیاس یامعم یسب : هلاقم ناونع ناسیون همانب یصصzت

Stack Overflow بررسی معماری سایت :عنوان مقاله

وتنظیم کننده : مرجع تخصصی برنامه نویسانتهیه

www.barnamenevisan.org [email protected]

همه موارد و تجهیزات به میزان بیش از حد نیاز نیز موجود هستند. )یعنی در صورت نیاز، می توانیم از تجهیزات اضافی

استفاده کنیم.(

.دارند 2x 10Gbpsهمه سرور ها و تجهیزات شبکه حداقل دو اتصال

که به دو منبع تغذیه UPSجود دارند که به وسیله دو واحد و نیز منبع دو سرور ها دو منبع تغذیه دارند، همچنین همه

.بزرگتر و قوی تر متصل هستند، پشتیبانی می شوند

.دارندB و rack Aهمه سرور ها یک رابط مجزا بین

، که البته در این جا ما بیشتر بر (Coloradoدر مجزا متصل هستند) data centerهمه سرور ها و سرویس ها به یک

.روی مرکز واقع در نیویورک صحبت می کنیم

اینترنت ها

ما را پیدا کنید. دسترسی و پیدا کردن سایت ما باید برای کاربران سریع باشد، بنابراین ما DNSدر ابتدا شما نیا دارید تا

هایی در اختیار دارند. DNS serverگذاشتیم، زیرا آن ها تقریبا در همه نقاط دنیا، CloudFlareاین کار را بر عهده ی

، وظیفه CloudFlareانجام می دهیم و APIرا با استفاده از یک DNSما به روز رسانی رکوردهای موجود بر روی

مخصوص DNS سرورهای را انجام می دهد. اما از آنجایی که ما با مسائل امنیتی مهمی سر و کار داریم، DNSزبانی می

.خودمان را نیز داریم

,Level 3, Zayo)ی ما عبور می کند ISPاز یکی از چهار HTTP trafficما را پیدا کردید ، DNSبعد از این که

Cogent, و Lightower در York) New و سپس از طریق یکی از چهار روتر ما به مقصد می رسد. ما با استفاده از

BGP که نسبتا استاندارد محسوب می شود.( به(ISP ها متصل می شویم تا بتوانیم روند ترافیک را کنترل کنیم و

دو X-1001-ASR و ASR-1001ینه ای را برای عبور ترافیک ها فراهم کنیم. از هر کدام از روتر های مسیرهای به

سرویس دهی می کنند، بنابراین نیازی به active/activeها را در حالت ISPتا از 2عدد در اختیار داریم که هر کدام،

قرار دارند ، ولی ترافیک اضافی 10Gbpsدخالت نیروی انسانی نیست. همه ی این تجهیزات در یک شبکه فیزیکی

ها نیز به آن متصل هستند. load balancerاضافی به صورت جداگانه قرار می گیرد که VLANسیستم بر روی یک

.هدایت خواهید شد load balancerزمانی که از روترها عبور کردید، به سمت یک

Page 8: Stack Overflowتیاس یامعم یسب هلاقم ناونع ناسیون همانب ...Stack Overflowتیاس یامعم یسب : هلاقم ناونع ناسیون همانب یصصzت

Stack Overflow بررسی معماری سایت :عنوان مقاله

وتنظیم کننده : مرجع تخصصی برنامه نویسانتهیه

www.barnamenevisan.org [email protected]

داریم ، اما این 10Gbps ،MPLS ، به میزان center dataاالن، زمان خوبی برای گفتن این نکته است که ما، مابین دو

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

.، مزایا و معایب خودش را داردبهره می گیریم که این موضوع

Load Balancer ها (HAProxy)

load balancer ، هاHAProxy 1.5.15 را بر رویCentOS 7 اجرا می کنند، اما ترجیح ماLinux است. در این

.از بین می رود HAProxyنیز در TLS (SSL) trafficحالت،

دو جفت load balancerدارند، هر 10Gbps LACPبر خالف سایر سرور ها که یک اتصال دوگانه شبکه ای

10Gbps در اختیار دارد.: که یکی از آن ها برای شبکه خارجی و دیگری برایDMZ .این مورد استفاده قرار می گیرد

یشتری از حافظه را اشغال می کنند تا بتوانند به صورت بهینه تری، به مدیریت روابط مربوط به و یا میزان ب 64GB موارد،

SSL ها بپردازند. زمانی که می توانیمTLS session های بیشتری را برای استفاده مجدد در حافظه نگه داریم، نیاز ما به

تر خواهد بود. این گفته ، به این معنی است که ارتباطات جایگزین برای محاسبات مورد نیاز برای همان کاربر کم

session ها که سریع تر و ارزان تر هستند ،می توانند چندین بار مورد استفاده قرار بگیرند.

load balancer روی بر که هایی سایت های درخواست بررسی به ما. دارند ای ساده تنظیمات خودشان ها IP های

هایی backendو مسائل امنیتی ( و سپس آن ها را به DNSزیم )اغلب برای مدیریت مختلفی قرار دارند، می پردا

هدایت می کنیم. تنها چیزی که در اینجا حائز اهمیت است ، محدودیت رتبه بندی و برخی host headerمتناسب با

header capture که از الیه( هاweb در )ارسال می شوندHAProxy syslog message است که ما به وسیله همین

.ویژگی می توانیم میزان بازدهی و راندمان را به ازای هر درخواست به دست بیاوریم

(IIS 8.5, ASP.Net MVC 5.2.3, and .Net 4.6.1) الیه وب

load balancer اصلی"سرور که ما آن ها را 9ها ترافیک مورد نیاز برای-primary" وب 2 می نامیم و همچنین

و همه سایت Stack Overflow, Careersمواردی مانند primaryرا تامین می کنند. سرور های ”dev/meta“سرور

)زیرا این سایت ها meta.stackexchange.com و meta.stackoverflow.comهای پرسش و پاسخ مشابه بجز

-multiهم خودش یک Q&Aسرور نیاز دارند. (را بر روی خودشان اجرا می کنند. برنامه 2برای اجرا شدن ، حداقل به

tenant که این برنامه درخواست های مربوط به همه ی سایت های محسوب می شود، به این معناQ&A پرسش و(

Page 9: Stack Overflowتیاس یامعم یسب هلاقم ناونع ناسیون همانب ...Stack Overflowتیاس یامعم یسب : هلاقم ناونع ناسیون همانب یصصzت

Stack Overflow بررسی معماری سایت :عنوان مقاله

وتنظیم کننده : مرجع تخصصی برنامه نویسانتهیه

www.barnamenevisan.org [email protected]

را که بر Q&A به مربوط های شبکه پاسخ( را مدیریت و سرویس دهی می کند. به عبارت دیگر،ما می توانیم تمامی

ر مانند نامه های دیگبر. کنیم اجرا یکجا صورت به را دارند قرار واحد و یک سرور application poolروی یک

Careers, API v2, Mobile API و غیره به صورت جداگانه فعالیت می کنند. در تصویر زیر می توانید الیه های

primary و dev را مشاهده کنید:

Page 10: Stack Overflowتیاس یامعم یسب هلاقم ناونع ناسیون همانب ...Stack Overflowتیاس یامعم یسب : هلاقم ناونع ناسیون همانب یصصzت

Stack Overflow بررسی معماری سایت :عنوان مقاله

وتنظیم کننده : مرجع تخصصی برنامه نویسانتهیه

www.barnamenevisan.org [email protected]

:را می توانید مشاهده کنید Opserver در )الیه وب ( web tierبر روی Stack Overflowدر تصویر زیر گستردگی

و در زیر می توانید مرتب سازی وب سرور ها از نظر بهینه سازی را مشاهده کنید:

Page 11: Stack Overflowتیاس یامعم یسب هلاقم ناونع ناسیون همانب ...Stack Overflowتیاس یامعم یسب : هلاقم ناونع ناسیون همانب یصصzت

Stack Overflow بررسی معماری سایت :عنوان مقاله

وتنظیم کننده : مرجع تخصصی برنامه نویسانتهیه

www.barnamenevisan.org [email protected]

( HTTP.SYS و . IIS, ASP.Net MVC 5.2.3, .Net 4.6.1) سرویس الیه

وجود دارد. که در حال service (service tier.)پشت پرده همه این وب سرویس ها مشابه است و الیه ای به نام

نیز اجرا می کند. این الیه، سرویس های داخلی را برای پشتیبانی از Windows 2012R2را بر روی IIS 8.5 حاضر

: تولید الیه وب و سایر سیستم های داخلی اجرا می کند. دو عاملی که در اینجا نقش مهم و حیاتی دارند عبارتند از

“Stack Server” کهtag engine را اجرا می کند و مبتنی برhttp.sys است و دیگریProvidence API است که

.است IISمبتنی بر

های پشتیبان انجام می دهند، و این دقیقا زمانی است APIو tag engineاین بسته های سرویس ، کارهای سنگین را با

باشد. به عنوان مثال، بارگذاری همه پست ها و تگ 9xزونگی که افزونگی نیاز داریم ولی این افزونگی نباید از نوع اف

های مربوط به آن ها که هر یک ثانیه یک بار باید از پایگاه داده خوانده شوند، کار چندان سبکی نیست. ما نمی خواهیم

را نیز برای ما تامین بار بر روی الیه وب انجام بگیرد. سه بار برای این کار، کافی است و همچنین امنیت 9این بارگذاری

می کند. ما همچنین پیکربندی متفاوتی برای این بسته های سرویس در بخش سخت افزاری در نظر می گیریم تا بتوانند

وظایف محاسباتی و سایر وظایف محوله را به بهینه ترین صورت انجام بدهند.اگر بخواهیم به صورت خیلی خالصه شما را

Page 12: Stack Overflowتیاس یامعم یسب هلاقم ناونع ناسیون همانب ...Stack Overflowتیاس یامعم یسب : هلاقم ناونع ناسیون همانب یصصzت

Stack Overflow بررسی معماری سایت :عنوان مقاله

وتنظیم کننده : مرجع تخصصی برنامه نویسانتهیه

www.barnamenevisan.org [email protected]

را بازدید می کنید، questions/tagged/java/می توانیم اینطور بگوییم که زمانی که شما آشنا کنیم ”tag engine“با

کار این را به کار می اندازید تا سوال های مشابه این مورد را برای شما پیدا کرده و بیاورد. tag engineدر حقیقت

.نیز به همین صورت انجام می شود search/ بخش در همچنین

)Redis/Sub (Cache & Pub

بیلیون عملیات در یک ماه، میزان 160در سایت مان به میزان کمی استفاده می کنیم. به رغم وجود حدودا Redisما از

:ر می باشداست. در برخی موارد، حتی از این مقدار نیز کمت %2کمتر از CPUاستفاده از

بر روی وب سرور ها HTTP Cacheمربوط به ”L1“ .در اختیار داریم L1/L2 cache، یک سیستم Redisما در

باز می گردد و مقدار مورد نظر را واکشی و یا استخراج می کند. مقادیر ما Redisپس از انجام عملیات، به ”L2“ .است

ذخیره می شوند. برای یک کاربر ، ما از Protobuf formatدر net-dot-protobufبا استفاده از

sStackExchange.Redi استفاده می کنیم کهopen source نیز هست. زمانی که یک وب سرور ، مقداری را دریافت

API، فراخوانی SQLوجود ندارد، آن مقدار را از منبع می گیرد.)با استفاده از یک کوئری به L2 و L1می کند که در

Page 13: Stack Overflowتیاس یامعم یسب هلاقم ناونع ناسیون همانب ...Stack Overflowتیاس یامعم یسب : هلاقم ناونع ناسیون همانب یصصzت

Stack Overflow بررسی معماری سایت :عنوان مقاله

وتنظیم کننده : مرجع تخصصی برنامه نویسانتهیه

www.barnamenevisan.org [email protected]

رار می دهد. در درخواست بعدی سرور ، ق Redisمحلی و هم در cacheو غیره( و سپس مقدار گرفته شده را هم در

.وجود خواهد داشت L2/Redisموجود نباشد، ولی به صورت قطعی در L1ممکن است مقدار در

مخصوص به خودش را L1/L2 cachingما همچنین سایت های پرسش و پاسخ زیادی را اجرا می کنیم که هر سایت،

مربوط به پایگاه داده انجام IDبا L2/Redisو در (key prefix) یبا پیشوند کلید L1ها در cachingدارد. که این

.می شود

که همه نمونه های سایت را اجرا می کنند، ما همچنین یک نمونه ماشینی Redis (master/slave)سرور اصلی 2در کنار

شابه در صفحه اصلی به کار یادگیرنده داریم که بین دو سرور مجزا قرار می گیرد . این ماشین برای تشخیص سواالت م

.می رود و با هدف مورد نظر ما نیز انطباق بیشتری دارد

Providence ،384GBآن استفاده شده است( و سرور های 90GBرم دارند)که Redis ،256GBسرور های اصلی

(.آن استفاده شده است 125GBرم دارند. )که

Redis عالوه برcache مکانیسم ،publish و subscriber نیز دارد که با استفاده از آن، یک سرور می تواند یک پیام

زیرمجموعه در پایینی سطوح کاربران–کند و سپس تمامی مشترکان آن سرور، می توانند آن پیام را ببینند. publishرا

که بر روی سرور L1های cache نیز می توانند پیام را دریافت کنند. ما از این مکانیسم برای پاک کردن Redis های

های دیگر قرار دارند)که اغلب زمانی استفاده می شود که بر روی وب سرور ، برای ایجاد یکپارچگی، عمل حذف انجام

.ها هستند websocketاما عالوه بر این مورد، یک استفاده مفید دیگر نیز دارد که شود می استفاده می شود(

)NetGainWebsockets (

برای کاربران مانند اطالعیه های مورد نیاز کاربر )که در نوار real-timeها برای به روز رسانی های websocketما از

ارد دیگر باالی صفحه نمایش داده می شوند(، تعداد رای های مربوط به نظرسنجی ها، سواالت و کامنت های جدید و مو

.استفاده می کنیم

های خاصی استفاده می کنند که در الیه وب قرار دارند. این مورد، یک برنامه socketخودشان از socketسرور های

در بهترین حالت، ما :etGainStackExchange.N . ما قرار دارد open sourceبسیار سبک است که در کتابخانه

همزمان داریم. این میزان، شامل تعداد زیادی از مرور گرها می شود.برخی از websocketاتصال باز 500,000حدود

Page 14: Stack Overflowتیاس یامعم یسب هلاقم ناونع ناسیون همانب ...Stack Overflowتیاس یامعم یسب : هلاقم ناونع ناسیون همانب یصصzت

Stack Overflow بررسی معماری سایت :عنوان مقاله

وتنظیم کننده : مرجع تخصصی برنامه نویسانتهیه

www.barnamenevisan.org [email protected]

websocketماه نیز باز باقی مانده اند. ما از دلیل این اتفاق مطمئن نیستیم. در زیر الگویی از 18این مرورگر ها بیش از

.ن این هفته را مشاهده می کنیدهای همزما

ها استفاده کنیم؟ نکته این جاست که آن ها در حقیقت راندمان کار ما را تا میزان بسیار زیادی websocketچرا باید از

باال می برند. ما با استفاده از آن ها می توانیم داده های بیشتری را با صرف منابع کمتر ، وارد سیستم کنیم ، که در این

صورت دسترسی به آن ، برای کاربر نیز سریع تر خواهد بود. البته استفاده از آن ها می تواند مشکالتی نیز به همراه

.داشته باشد که در مقاله های بعدی راجع به آن ها صحبت خواهیم کرد

)Elasticsearch(جستجو

Page 15: Stack Overflowتیاس یامعم یسب هلاقم ناونع ناسیون همانب ...Stack Overflowتیاس یامعم یسب : هلاقم ناونع ناسیون همانب یصصzت

Stack Overflow بررسی معماری سایت :عنوان مقاله

وتنظیم کننده : مرجع تخصصی برنامه نویسانتهیه

www.barnamenevisan.org [email protected]

کته زیادی در این مبحث وجود ندارد که از شنیدن آن متعجب و شگفت زده شویم. الیه وب در حال حاضر جستحوها را ن

ولی کارایی )که بسیار سبک استStackExchange.Elastic و با استفاده از Elasticsearch 1.4به راحتی از طریق

کردن این ویژگی open sourceبسیار باالیی دارد ( انجام می دهد . بر خالف اغلب موارد،ما هیچ فکر و تصمیمی برای

ای که ما از آن استفاده می کنیم، محسوب می شود. ما از API برای سبک جایگزین یک فقط مورد این نداریم زیرا

elastic برای/search یم که سواالت مشابه را تشخیص می دهد، و در زمان پرسیدن سوال، موارد مشابه استفاده می کن

.را برای کاربر نمایش می دهد

سایت هر و دارد، گره سه( وجود دارد Elasticدر هر مرکز، یک بخش از ) Elasticهر شاخه و به عبارتی هر بخش از

های اضافی خودشان را دارند. تنها موردی که تنظیمات ما را indexها نیز هر کدام Career .خودش را دارد index نیز

خارج می کند، این است که سه تا از سرور ها نسبت به سرور های عادی elasticکمی از حالت استاندارد در دنیای

ر دامنه های یکسان برنامه ها )د.دارند 10Gbpsو دو شبکه SSD ،192GB RAMسنگین تر هستند ، زیرا حافظه

را انجام می دهد ، به صورت tag engineکه میزبانی Stackنیز استفاده کرده ایم ( در سرور Net Core.این جا از

نیز می پردازد. ما در اینجا از یک حقه ساده مانند Elasticsearchکردن آیتم ها در indexپیوسته به

ROWVERSION درSQL Server استفاده می کنیم . در این روش اگرچه ترتیب آیتم ها برایش مهم است ولی ما

دلیل اصلی ای که ما از .کنیم گذاری مجدد indexبه سادگی می توانیم هر آیتمی را که اخیرا تغییر کرده است را

Elasticsearch به جای مواردی مانندSQL full-text search استفاده می کنیم ، مقیاس پذیری باالتر و همچنین

ها بسیار گران تر هستند، در حالی که Elasticsearchها در مقایسه با SQL CPU . درآمدزایی بیشتر آن است

Elastic ات بیشتری نیز دارد. چرا از ارزان تر است و امکانSolr استفاده نمی کنیم؟ ما می خواهیم جستجوهایمان را در

نرفته ایم، نیز این است x.2روی پشتیبانی نمی شود. دلیل این که ما هنوز بر Solr در کل شبکه انجام بدهیم و این مورد

کنیم و ما هنوز زمان کافی برای این کار و indexکه برای این کار نیاز داریم تا همه موارد را برای به روز رسانی دوباره

.مهاجرت به نسخه های باالتر را پیدا نکرده ایم

(SQL Server) پایگاه داده

خودمان استفاده کرده ایم. همه داده ها در single source of truthبه عنوان SQL Serverما از

Elastic و Redis ازSQL Server گرفته می شوند. ما دو سرورSQL همراه باAlwaysOn Availability

Groups اجرا می کنیم. هر کدام از این بخش ها ، یکmaster دارد )که همه بارگذاری های الزم را برعهده دارد.( و

DR data centerنیز وجود دارد. ) در Coloradoدر replicaدر نیویورک دارد. عالوه بر این موارد، یک replicaیک

Page 16: Stack Overflowتیاس یامعم یسب هلاقم ناونع ناسیون همانب ...Stack Overflowتیاس یامعم یسب : هلاقم ناونع ناسیون همانب یصصzت

Stack Overflow بررسی معماری سایت :عنوان مقاله

وتنظیم کننده : مرجع تخصصی برنامه نویسانتهیه

www.barnamenevisan.org [email protected]

Dellاولین بخش )یا شاخه ( مجموعه ای از سرور های .به صورت ناهمزمان فعالیت می کنند ها replicaهمه ی .(

R720xd 384است که هر کدامGB RAM ،4TB فضایPCIe SSD 2، وx 12 هسته دارند. این بخش، میزبانی

Stack Overflow ،PRIZM و پایگاه داده های موبایل را بر عهده دارد.

و PCIe SSDفضای 768GB RAM ،6TBاست، که هر کدام Dell R730xdاز سرورهای بخش دوم، مجموعه ای

2x 8 هسته دارند. این بخش، سایر موارد را اجرا می کند. که شاملCareers Exception log, Chat, Open ID, و

بهینه سازی بر روی الیه پایگاه ,Server Fault(Super Userسایت های پرسش و پاسخ دیگر است . )به عنوان مثال

داده ، موردی است که ما می خواهیم آن را در پایین ترین سطح نگه داریم، ولی در حال حاضر به چند دلیل ، میزان آن

هایی هستند replica ، 03 و 01های ما هستند ، master ، 04 و NY-SQL02کمی باال رفته است. در حال حاضر ،

ساعت گذشته را نمایش می دهد. 24، آن ها را به کار گرفته ایم. تصویر زیر SSDکه ما پس از یک به روز رسانی

ها Queryاگرچه بعضی از بسیار ساده است ، که این سادگی باعث باال بودن سرعت آن می شود . SQL استفاده از

منصفانه است . ما یکسری قسمت های مربوط SQlمیتواند به قدر دیوانه کننده ای سخت باشند ، اما تعامل ما با

استفاده میکنند . به عبارت Dapper از جدید های توسعه و ها سازی پیاده همه تقریبا اما ، داریم LINQ to SQl به

از مانده باقی موارد این در پایگاه داده خود دارد و ما درنظر داریم store procedureیک stack overflow : دیگر

. منتقل کنیم code بخش به را قبل