در پشت پرده ی ارسال تا اجرای یک درخواست چه اتفاقاتی میافتد؟
زمانی که کلمه ی معماری را میشنوید یا در مطلبی این کلمه را میخوانید اولین تصویری که در ذهن تان مجسم میکنید چیست؟
اغلب زمانی که به این کلمه بر میخوریم یک ساختمان با یک اسکلت بندی را در ذهن مجسم میکنیم که در ادامه ی کار تبدیل به یک بنای زیبا با کاربردی خاص خود خواهد شد. باید بگوییم نه تنها ساختمانها بلکه تمامی ابزار ها، وسایل و حتی وب سایتها و وب اپلیکیشنها نیز دارای یک معماری و ساختار هستند. در این مقاله قصد داریم به تشریح معماری وب سایت بپردازیم.
وب سایتها و وب اپلیکیشن ها
در این مقاله به دفعات از واژگان وب سایت و وب اپلیکیشن استفاده میکنیم. پس لازم دانستیم تا مختصری درباره ی این دو موضوع، مطالبی را ارائه دهیم:
وب اپلیکیشن یا برنامه ی تحت وب، نرم افزاری است که با استفاده از مرورگر وب و از طریق شبکههای محلی یا اینترنت مورد استفاده قرار میگیرد. برای مثال، سرویس جیمیل یک وب اپلیکیشن است. وب اپلیکیشنها برنامه هایی هستند که تنها از طریق وب قابل استفاده هستند. در وب اپلیکیشنها بیشتر به بحث عملکرد و کارکرد، توجه میشود و محتوایشان چندان اهمیت ندارد و معمولا پر محتوا نیستند. اما یک وب سایت فضایی از اینترنت است که یک یا چندین صفحه را در بر میگیرد. به بیانی دیگر مجموعه ای از صفحات وب متصل به هم که دارای یک صفحه ی اصلی هستند و بر روی یک سرور قرار دارند را وب سایت میگویند. وب سایتها با هدف ارائه ی اطلاعات کاملی از یک شخص، سازمان، شرکت، کسب و کار و... به کاربران وب، طراحی میشوند و به طور ویژه بر محتوا تمرکز دارند.
ساختار یک وب سایت چگونه است؟
شاید تا به حال از خود پرسیده باشید که در پشت پرده ی یک وب سایت چه خبر است . اگر یک وب سایت را به طور کلی به دو بخش Client (کاربر) و Server (سرویس دهنده) تقسیم بندی کنیم، در این تقسیم بندی منظور از client، کاربری است که یک موضوع برای مثال GraphQL چیست؟ را در اینترنت جستجو میکند. برای پاسخ به این درخواست اینترنت تعدادی وب سایت را که حاوی محتوای مربوط به این درخواست هستند، برای مثال وب سایت www.7learn.com را در لیست نتایج جستجو به کاربر نشان میدهد.
محتوای مقاله ی فوق یک داده است و در دنیای کامپیوتر برای ذخیره ی هر داده ای به یک فضا نیاز است به بیان دیگر هر وب سایت در اینترنت روی یک فضا ذخیره شده است که به این فضا هاست گفته میشود. و در اینجا سرور به کامپیوتری میگویند که تحت شبکه ی اینترنت، اطلاعات موجود در هاست را برای کاربر ارسال میکند. در نتیجه زمانی که ما روی لینک مقاله ای که در یک وب سایت قرار دارد کلیک میکنیم ، در اصل ما از سرور آن وب سایت درخواست کرده ایم که مطلب را به ما نشان دهد و سرور نیز با ساز و کاری خاص، نتیجه را به ما نشان میدهد.
در پشت پرده ی ارسال تا اجرای یک درخواست چه اتفاقاتی میافتد؟
درباره ی ساز و کار خاص سرور صحبت کردیم و اما این ساز و کار چگونه است؟ فرض کنید ما موضوع چگونه رزومه ای بنویسیم که کارفرما نتواند نادیده بگیرد را در اینترنت سرچ میکنیم. درخواست ما واحدهای زیر را طی میکند. در ادامه به تشریح این واحدها میپردازیم:
واحد اول DNS
DNS مخفف Domain Name Server است. DNS سرور به یک پایگاه داده ی بزرگ میگویند که شامل مجموعه ای از دامنهها و IPهای مرتبط است. زمانی که روی یک لینک از یک وب سایت کلیک میکنیم، نام آن وب سایت برای مثال www.7learn.com به یک آدرسIP مثلا 185.122.44.32در سمت سرور تبدیل میشود. DNS برای اینترنت مانند یک دفترچه تلفن است و همان طور که از روی نام یک شخص شماره ی تلفن همراه یا ثابت او را در دفترچه تلفن مییابیم، اینترنت نیز با استفاده از نام دامنه که همان نام وب سایت است، آدرسIP یا شماره ی متناظر با آن را مییابد. پیشنهاد میکنیم برای دریافت اطلاعات بیشتر درباره ی DNS مقاله ی DNS یا دی ان اس چیست را مطالعه کنید.
در معماری وب سایت وظیفه ی DNSها چیست؟
DNS یکی از اصلیترین کامپوننتها در معماری وب سایت است. کامپوننتها ابزار هایی هستندکه وظیفه ی ارسال و دریافت اطلاعات به اینترنت را به عهده دارند. در نتیجه اطلاعات، که در اینجا در قالب لینک مورد جستجو میباشد، توسط DNS به اینترنت ارسال میگردد.
واحد دوم Load Balancer
Load Balancer به معنای متعادل کننده ی بار ترافیکی است. برای درک کار این سرویس، لازم است پیش نیاز هایی را به صورت خلاصه بیان کنیم:
زمانی که یک وب اپلیکیشن یا وب سایت را روی هاست بارگذاری میکنیم، سایت ما آماده ی بازدید کاربران و بازدیدکنندگان است. با افزایش تعداد بازدیدکنندگان و کاربران، اصطلاحا ترافیک سایت ما افزایش میباید. هر هاست قادر به مدیریت کردن مقدار معینی ترافیک سایت است و اگر ترافیک سایت ما بیشتر از توان هاست ما باشد، وب سایت یا وب اپلیکیشن ما اصطلاحا Down میشود به این معنی که سرور ما قادر به سرویس دهی نیست.(البته لازم به ذکر است یک وب سایت امکان دارد بنا به دلایل مختلفی Down شود)
به توانایی یک سیستم یا اپلیکیشن برای مدیریت افزایش ترافیک بازدید کنندگان مقیاس پذیری گفته میشود .پیشنهاد میکنیم برای دریافت اطلاعات بیشتر مقاله مقیاس پذیری یا Scaling چیست را مطالعه نمایید.
دو نوع مقیاس پذیری داریم، مقیاس پذیری افقی و مقیاس پذیری عمودی که با پرداختن به یکی از آنها از down شدن وب سایت یا وب اپلیکیشن میتوان جلوگیری کرد.
مقیاس پذیری عمودی:
در این روش با خرید یک هاست با سروری قویتر به سادگی مشکل را حل میکنیم .
مقیاس پذیری افقی:
در این روش ما چندین سرور را خریداری میکنیم و به جای تمرکز کردن بر روی یک سرور، حجم داده و ترافیک را روی این سرورها توزیع میکنیم. با این کار چون هر سرور وظیفه ی خاص خود را انجام میدهد، در نتیجه ترافیک بین این سرورها توزیع شده، توان مدیریت بالا میرود و وب سایت یا وب اپلیکیشن down نمیشود.
در معماری وب سایت از بین دو روش فوق، از مقیاس پذیری افقی به دلیل مزیت هایی که دارد استفاده میشود. برای دانستن این مزیتها پیشنهاد میکنیم مقاله مقیاس پذیری افقی چیست را مطالعه کنید. از Load Balancer در مقیاس پذیری افقی استفاده میشود که وظیفه دارد، در زمان ارسال درخواست توسط کاربر، تصمیم بگیرد از کدام سرور، نتیجه ی درخواست بارگذاری شود.
واحد سوم Web Application Servers
وب سرورها نرم افزار هایی هستند که با برقراری ارتباط با مجموعه ای از زیر ساختهای موجود در سمت سرور مانند پایگاه داده، سرویس ذخیره سازی کش، صف مربوط به اصطلاحا Job ها، سرویسهای جست و جو، میکرو سرویسها و صفهای داده یا دادههای کاربران، اطلاعات درخواستی کاربران را پیدا کرده و به صورت صفحههای HTML به سمت مرورگر کاربران ارسال میکند.
در فایل چیت شیت Sql server به بررسی مجموعه دستورات این نرم افزار مدیریت پایگاه داده پرداختیم
واحد چهارم Data Base
پیشتر درباره ی هاست صحبت کردیم و گفتیم فضایی است که وب سایت روی آن بارگذاری میشود. حال میخواهیم کمی تخصصیتر در این باره صحبت کنیم. در اصل وب سایتها و وب اپلیکیشنها در سمت سرور روی Data Base یا پایگاه داده ذخیره میشوند. این پایگاه داده، امکاناتی مانند: تعریف ساختار داده، وارد کردن داده ی جدید، جستجو در حجم زیادی از دادهها و پیدا کردن داده ی مد نظر، بروزرسانی و یا حذف داده ی موجود، انجام محاسبات روی کل دادهها و ... را برای برنامه نویسها فراهم میکند. اگر با پایگاههای داده آشنایی ندارید، مقاله ی پایگاه داده چیست را مطالعه نمایید.
واحد پنجم Caching Service
در دنیای کامپیوتر Cache به حافظه ای گفته میشود که اطلاعات برای دسترسی سریع پردازشگر(CPU) در آن قرار میگیرند. در دنیای وب نیز وب سایتها یا وب اپلیکیشنها برای صرفه جویی در زمان بارگذاری یک صفحه ی وب و همچنین صرفه جویی در مصرف پهنای باند از سرویسی به نام Cache استفاده میکنند که دارای دو تکنولوژی گسترده به نامهای Redis و Memcache است.
زمانی که برای اولین بار درخواست بارگذاری صفحه ای از یک وب سایت را به سمت سرور آن وب سایت ارسال میکنیم، وب سایت صفحه را برای ما از پایگاه داده، در قالب صفحه ی HTML بارگذاری میکند و در حافظه ی Cache خود ذخیره میکند . حال وقتی یک بار دیگر درخواست بارگذاری همان صفحه را از وب سایت داشته باشیم آن صفحه از حافظه ی Cache وب سایت بارگذاری میشود.
در ادامه برای درک بهتر این موضوع چند مثال را ذکر میکنیم:
- گوگل نتایج جستجو از درخواست هایی مانند « کتاب اثر مرکب دارن هاردی » یا «زندگی نامهٔ سعدی » را در حافظۀ کَش خود ذخیره میکند تا در هر بار درخواست کاربر، دوباره آنها را جستجو نکند.
- اینستاگرام بسیاری از اطلاعاتی را که یک کاربر در هنگام ورود به سیستم میبیند، مانند دیتای مربوط به یک پُست، صفحه ی پروفایل دوستان و غیره، را در حافظۀ کَش خود ذخیره میکند.
- سون لرن صفحه ی HTML مربوط به پایگاه دانش را در حافظۀ کَش خود ذخیره میکند تا در صورت نیاز برای بارگذاری مجدد، صفحه ی مد نظر با سرعت بیشتری بارگذاری شود.
واحد ششم Job Queue & Servers
در اکثر وب اپلیکیشنها باید Jobهایی به صورت غیر هم زمان و در پشت صحنه انجام شوند و این جابها به طور مستقیم به پاسخ متناظر با درخواست کاربر مرتبط نیستند.
وب اپلیکیشنها برای انجام وظایف(job) های خود به صورت غیر هم زمان از معماریهای مختلفی استفاده میکنند که یکی از محبوبترین آنها اصطلاحاً Job Queue نامیده میشود که از دو کامپوننت تشکیل شده که یکی از کامپوننتها صَفی است که وظایفی را شامل میشود که باید اجرا شوند و کامپوننت دوم یک یا چند سرور هست که باید تَسکهای موجود در صف را اجرا کنند که اصطلاحاً Worker نامیده میشوند.
در ادامه، جاب سرورها هر یک از این وظیفهها را پردازش کرده و Queue (صَف) مربوط به Job (تَسک یا عملیات مربوطه) را بررسی میکنند که اگر تَسکی موجود بود، آن را از صف خارج کرده و انجام دهند.
واحد هفتم Full-Text Search Service
اگر دقت کرده باشید زمانی که در گوگل، برای مثال عنوان انواع پایگاه داده را جستجو میکنیم، گوگل لیستی از مطالبی که یک یا چند کلمه در عنوان درخواست شده مشترک باشد را به ما نشان میدهد. به عکس زیر دقت کنید:
در مثال فوق و در نتایجی که داریم عبارت پایگاه داده در تمامی موارد لیست مشترک است. سرویسی که چنین قابلیتی را در اختیار وب سایتها یا وب اپلیکیشن هایی همچون گوگل قرار میدهد، Full-Text Search Service نام دارد. این سرویس از روشی به نام Inverted Index برای این کار، استفاده میکند.
واحد هشتم Services
هنگامی که یک وب سایت یا وب اپلیکیشن به اندازه ای مشخص رشد میکند و دارای تعداد قابل توجهی کاربر میشود، برای افزایش رضایت و همچنین کارایی سایت یا اپلیکیشن خود، احتیاج به سرویسهای خاص خواهد داشت. نمونه ای از این سرویسها به شرح زیر است :
- Account Service: این سرویس اطلاعات مربوط به یک کاربر برای مثال نام کاربری ، عکس پروفایل و ... را در تمامی کامپوننتهای موجود در وب سایت در قالب یک بخش ذخیره میکند که با این کار ، مدیران وب سایت میتوانند با بررسی رفتار کاربران در سایت، محتوای مورد علاقه ی آنها را برایشان فراهم کنند، که باعث ایجاد یک تجربه ی کاربری بهتر با کاربران میشود.
- Payment Service: این سرویس در وب سایتهای فروشگاهی کاربرد دارد که امکان پرداخت آنلاین را فراهم میکنند که این کار با برقراری ارتباط آنلاین با درگاه بانکها صورت میگیرد.
- HTML → PDF Service: با استفاده از این سرویس امکانی فراهم میشود که بتوان از فایلهای HTML خروجی PDF تهیه کرد که نمونه ی این سرویس در رزومه سازهای آنلاین دیده میشود.
واحد نهم Data
در دنیای امروز دادهها و اطلاعات نقش بسیار مهمی را در حیات یا مرگ شرکتها و استارتاپها بازی میکنند. به همین دلیل زمانی که یک وب اپلیکیشین به اندازه ی مشخصی توسعه پیدا کرد، توسعه دهندگان آن وب اپلیکیشن، یک خط لوله داده (Pipeline) را اعمال میکنند تا با جمع آوری، تجزیه و تحلیل دادهها آن اپلیکیشن را توسعه دهند.
یک خط لوله داده معمولی دارای سه مرحله ی زیر است:
مرحله ی اول: اپلیکیشن، دادههای مربوط به تعامل کاربر را به بخش Fire hose ارسال میکند. این دادهها در Fire hose پردازش میشوند. در نتیجه ی این پردازش، دادهها یا به یک نوع داده ی دیگر تبدیل میشوند یا همان داده ی قبلی باقی میماند که با یکسری اطلاعات حاصل پردازش، اندازه ی بزرگتری دارند. پردازش این دادهها با دو تکنولوژی رایج AWS Kinesis و Kafka انجام میشود.
مرحله ی دوم: دادههای پردازش شده در یک حافظه ی ابری ذخیره میشوند. تکنولوژی AWS Kinesis دارای ابزار هایی است که پیکر بندی این دادههای خام را در حافظه ی ابری (S3) بسیار ساده میکند.
مرحله ی سوم: در نهایت این دادههای پردازش شده را میتوان در یک انبار داده ی بزرگ، اصطلاحا Warehouse بارگذاری کرد تا تحلیلگران داده، دادهها را در آن، مورد بررسی و آنالیز قرار دهند. برای تجزیه و تحلیل داده اغلب شرکتها و استارتاپهای بزرگ از فناوری به نام oracle استفاده میکنند. البته اگر مجموعه ی دادهها خیلی زیاد باشد، از یک تکنولوژی شبیه به NoSQL MapReduce Hadoop برای آنالیز دادهها استفاده میکنند.
قدم دیگری که در نمودار معماری وب سایت دیده نمیشود بارگیری دادهها از پایگاه دادههای عملیاتی برنامه و سرویس ها، در انبار داده است. به عنوان مثال در Storyblocks هر شب فیلمهای VideoBlocks،AudioBlocks،Storyblocks، خدمات حساب و پایگاههای داده ی پورتال به Redshift بارگذاری میشود این امر با تعیین محل دادههای اصلی تجارت در کنار دادههای رویداد تعامل کاربر، به تحلیلگران، یک مجموعه داده ی جامع ارائه میدهد.
واحد دهم Cloud Storage
Cloud Storage به معنای فضای ذخیره سازی ابری میباشد. ذخیره سازی اطلاعات در سرورهای مبتنی بر ذخیره سازی ابری یک روش ساده و مقیاس پذیر برای ذخیره، دسترسی و به اشتراک گذاری اطلاعات در اینترنت است. با استفاده از سیستم ذخیره سازی ابری میتوانیم هر آنچه که در سیستم محلی خود ذخیره کرده بودیم را در اختیار کاربران خود قرار دهیم.
واحد یازدهم CDN
CDN مخفف Content Delivery Network میباشد که به معنای شبکه ی توزیع محتوا است. در واقع CDN بیانگر شبکه ی عظیمی از سرور هایی میباشد که در نقاط مختلف دنیا وجود دارد واین سرورها در بخشهای مختلف جغرافیایی پخش شده اند.
محتوای وبسایتها با به کارگیری شبکه ی توزیع محتوا و با توجه به موقعیت جغرافیایی کاربران از طریق نزدیکترین شبکه به کاربران ارائه داده میشود. این شبکهها در سرعت بخشیدن به تحویل محتوا و پهنای باند در وب سایتهای بزرگ و جهانی مثل یاهو، گوگل، فیس بوک و… تاثیر بسزایی دارند.
به عنوان مثال فرض کنید که سرور اصلی وب سایت سون لرن در مشهد قرار دارد و یک سرور میانی در تهران قراردارد و ما از زنجان قصد داریم تا محتوای وب سایت سون لرن را مشاهده کنیم، در اینجا اطلاعات سایت از سرور میانی واقع در تهران به دلیل اینکه از لحاظ جغرافیایی نزدیکتر از مشهد میباشد، بارگذاری میشود.
جمع بندی:
زمانی که ما یک وب سایت را در گوگل جستجو میکنیم گوگل با استفاده از یک روش Full-Text Search Service وب سایت هایی که دارای محتوای مورد نظر ما هستند را برای ما لیست میکند. پس از انتخاب وب سایت مورد نظر، آدرس دامنه ی سایت به یک آدرس IP متناظر میشود. در این مرحله، در سمت سرور، Load Balencer تصمیم گیری میکند که کدام سرور سایت، اطلاعات درخواستی را ارسال کند. پس از تعیین، سرور حافظه ی cash service را چک میکند. اگر اطلاعات درخواستی در این حافظه موجود بود، ارسال درخواست وارد مرحله ی بعد میشود و اگر موجود نبود اطلاعات را از پایگاه داده بارگذاری میکند و سپس بعد از طی یکسری مراحل اطلاعات به Fire hose برای پردازش ارسال میشود. در مرحله ی بعد دادهها برای آنالیز به Data warehouse منتقل شده و یک کپی از دادهها نیز به فضای ذخیره سازی ابری یا همان Cloud storage فرستاده میشود. در نهایت داده به شبکه ی CDN جهت توزیع فرستاده میشود و داده از طریق این شبکه به مرورگر کاربر به صورت صفحه ی HTML ارسال شده و مرورگر این کدها را رندر کرده به کاربر نشان میدهد.
دراین مقاله به معماری وب سایت در سمت سرور پرداختیم و مراحل ارسال یک در خواست تا دریافت آن را تشریح کردیم. برای درک بیشتر مفاهیم معماری وب در سمت سرور باید با ساز و کار شبکههای کامپیوتری آشنایی داشته باشیم. در این مقاله تلاش ما بر این بوده است که مفاهیم را به گونه ای بیان کنیم که برای کسانی که با شبکه آشنایی ندارند نیز قابل درک باشد. مراحل فوق برای کاربر قابل مشاهده نیست. به این بخش سایت که کاربر قادر به مشاهده ی آن نیست، در برنامه نویسی اصطلاحا Back-end میگویند و به بخشی که برای کاربر قابل مشاهده است، در برنامه نویسی اصطلاحا Front-end میگویند.