
جدیدا یک مقاله ای دارم میخونم که خیلی کامل داره در مورد اصول طراحی سیستم صحبت میکنه، چون که جای خالی همچین مقاله ی مفصل و عالی در وب فارسی کم دیدم تصمیم گرفتم این مقاله به فارسی ترجمه کنم و در اختیار عموم بزارم.
در پروژه های کوچک و شخصی شما ممکن هست که بدون درنظر گرفتن کاربرد هر زبان برنامه نویسی، منابع و تعداد یوزر ها، پروژتون بنویسید و در اختیار عموم قرار بدید.
مثلا پروژتون ممکن که نرم افزار داخلی یک سازمان باشه که فقط برای افراد اون سازمان هست و تعداد یوزر های انقدر بالایی نداره و یا پروژه دانشگاهی باشه که فقط بدرد ارائه میخوره و بس.
یا ممکن که پروژه ای باشه که در ختیار عموم قرار گرفته و کاربران فقط با ارسال درخواست هایی، برنامه با انجام یکسری محاسبات و کارب های غیر پیچیده ای پاسخ مناسبی به کاربر برمیگردونه.
ولی بیان به این فکر کنید که یک پروژه دارید که هزاران و یا میلیون ها کاربر داره و فرایندهای پیچیده ای داره که اگر ساختار برنامه به خوبی روش فکر نشده باشه اون استارتاپ و یا سازمانی ممکن که شکست بخوره، ایجاست که مفاهیمی مثل امنیت، مانیتورینگ، سیستمی برای هندل کردن خطاها و مقیاس پذیری (scaling) باید بدونیم تا در چالش های مختلف بشه سریعا از راه حلی برای مشکل پیش امده پیدا کرد.
در زمانی که کاربر به شما درخواستی ارسال میکنه به مدت زمانی که درخواست به سرور شما میرسه و پاسخ آن را دریافت میکنه میگن Latency یا میزان تاخیر، این مفهوم در طراحی سیستمها، شبکهها و برنامههای کاربردی (مثل بازیهای آنلاین یا تراکنشهای بانکی) نقش حیاتی دارد.
واحد اندازه گیری Latency میلی ثانیه هست و هر چه میزان آن کم تر باشد تجربه کاربری بهتری خواهید داشت.
در هر سیستم ما نیاز داریم بفهمیم که در حالاحاضر نرم افزار و اپلیکیشنی که نوشتیم و بر روی پروداکشن منتشر کردیم در هر ثانیه چقدر داده میتونه پردازش بکنه به این موضوع میگن Throughput یا توان عملیاتی یک سیستم که بر حسب ثانیه اندازه گیری میکنند.
مفهوم Throughput کاربرد های مختلفی داره مثلا در شبکه تعین کننده میزان پهنای باند، در پایگاه داده ها به میزان تعداد تراکنش های پردازش شده در هر ثانیه هست و یا در سرور به میزان کاربرانی که میتوانند درخواست ارسال کنند بدون این که در عملکرد سیستم خللی ایجاد شود.
معمولاً افزایش Throughput (مثلاً با اضافه کردن منابع) میتواند Latency را کاهش دهد. مثلا اضافه کردن خطوط پردازش در یک کارخانه باعث میشود هم محصولات بیشتری تولید شوند (Throughput بالا) و هم هر محصول سریعتر آماده شود (Latency پایین)
وقتی سیستم به حداکثر ظرفیت خود نزدیک میشود، افزایش بیشتر Throughput ممکن است Latency را به شدت افزایش دهد، مثلا وقتی که روی یک سرور ترافیک خیلی زیادی میاد و باعث مشکل خورد اون سرور میشه.
مقیاسپذیری به توانایی یک سیستم برای مدیریت افزایش بار کاری یا حجم کاربران بدون افت کارایی گفته میشود. این مفهوم یکی از اصول کلیدی در طراحی سیستمهای مدرن است که به کسبوکارها کمک میکند با رشد کاربران یا دادهها، عملکرد پایدار و قابل اعتماد ارائه دهند. برای آشنایی کامل با انواع مقیاسپذیری و روشهای Auto Scaling، پیشنهاد میکنم مقاله کامل مقیاسپذیری (Scaling) در طراحی سیستم را مطالعه کنید.
تئوریCAP یکی از اصول پایهای طراحی سیستمهای توزیعشده است که توضیح میدهد چرا در شرایط قطعی شبکه، نمیتوان بهطور همزمان هم یکپارچگی داده، هم دسترسپذیری و هم تحمل قطعی را بهطور کامل تضمین کرد. این مفهوم به مهندسان کمک میکند بفهمند کدام ویژگیها در اولویت طراحی سیستم باید باشند. برای آشنایی دقیقتر با مفاهیم CAP و انواع آن (CP، AP، CA) و کاربرد هرکدام، پیشنهاد میکنم مقاله کامل من در این زمینه را مطالعه کنید. اینجا بخوانید: آشنایی با تئوریCAP در طراحی سیستم
مونولیت (Monolith) به ساختار یکپارچهای در طراحی سیستم گفته میشود که تمام بخشهای برنامه (مثل احراز هویت، پرداخت، مدیریت کاربران) در یک کدبیس و سرویس اجرا میشوند، در حالی که میکروسرویس (Microservice) معماری مدرنتری است که هر بخش سیستم به صورت سرویسهای مستقل و کوچک با دیتابیس و منطق جدا توسعه و دیپلوی میشود. این موضوع باعث میشود هر سرویس بهروزرسانی و مقیاسپذیری جداگانه داشته باشد و مدیریت پروژههای بزرگ سادهتر شود. اگر میخواهی تفاوتها و مزایا و معایب این دو معماری را بهطور کامل و کاربردی یاد بگیری، مقاله تفاوت مونولیت و میکروسرویس در طراحی سیستم را حتما بخوانید.
مقیاسپذیری دیتابیس یعنی توانایی افزایش ظرفیت و سرعت دیتابیس برای پاسخگویی به حجم بالای داده و کاربران بدون کاهش عملکرد. روشهایی مثل ایندکسینگ، پارتیشنبندی، معماری Master-Slave و شاردینگ برای مدیریت بهینه دادهها و حفظ کارایی استفاده میشوند. هر کدام از این روشها مزایا و کاربردهای خاص خود را دارند و بسته به نیاز سیستم انتخاب میشوند. برای آشنایی کامل و کاربردی این مفاهیم، پیشنهاد میکنم مقاله جامع مقیاس پذیری دیتابیس (Scaling of Database) را مطالعه کنید.
ممنون که تا این لحظه همراه من بودید. به خاطر این که مطالب زیاد هست به مرور این مقاله کامل میشه، اگر سوال، انتقاد و یا پیشنهادی داشتید خوشحال میشم در بخش کامنت های این مطلب با من درمیون بزارید.