آنچه در این مقاله میخوانید
10 مفهوم کلیدی و قدرتمند در دنیای نرم افزار برای برنامه نویسان
۹ خرداد ۱۴۰۴
فرض کنید سیستم شما در لحظهای بحرانی از کار میافتد و تمام تلاشهایی که برای کنترل اوضاع انجام میدهید بینتیجه میماند و همهچیز به یکباره سقوط میکند. چنین سناریویی میتواند کابوس هر تیم توسعهای باشد. اما جالب است بدانید شرکتهای بزرگ تکنولوژی برای مقابله با اینگونه مشکلات از الگوها و روشهایی استفاده میکنند که به آنها این قابلیت را میدهد تا حتی در سختترین موقعیتها هم عملکرد مناسبی داشته باشند.
مفاهیمی که در ادامه از وبلاگ لیارا برای شما شرح خواهیم داد نهتنها میتواند نجاتدهنده سیستمهای شما باشند، بلکه به شما این امکان را میدهد که به راحتی مشکلات و باگها را رفع کنید.
همین الان، بدون کمترین پیچیدگی، سرور مجازی خودتون رو در کمتر از ۳۰ ثانیه، راهاندازی کنید.
✅ عملکرد پایدار ✅ ترافیک نامحدود ✅ هزینه بهصرفه
خرید سرور مجازی ابری
آنچه در ادامه خواهید خواند:
- 10 مفهوم کلیدی و قدرتمند در نرم افزار
- جمع بندی
10 مفهوم کلیدی و قدرتمند در نرم افزار
در ادامه، با 10 مفهوم کلیدی و مهم در دنیای نرمافزار آشنا خواهید شد، هدف از شناخت بهتر آنها این است که بتوانید گزینههایی انتخاب کنید که بیشترین هماهنگی را با نیازها و اهدافتان داشته باشد.
الگوی Sidecar
الگوی Sidecar یک الگوی طراحی است که در معماری میکروسرویسها از آن استفاده میشود. در این الگو، یک فرآیند (یا کانتینر) اضافی در کنار برنامه اصلی اجرا میشود تا بتواند قابلیتهایی مانند ثبت لاگها، امنیت یا شبکهسازی را فراهم کند.

زمان استفاده از الگوی Sidecar
- زمانی که نیاز دارید قابلیتهایی مانند (مانیتورینگ یا لاگگیری) را بدون هیچگونه تغییری در برنامه اصلی پیادهسازی کنید.
- زمانی که در معماری میکروسرویسها، هر سرویس به یک پروکسی یا سرویس جانبی برای انجام وظایف خاص نیاز دارد.
یک مثال ساده برای شناخت بهتر الگوی Sidecar:
فرض کنید در یک رستوران، آشپز (برنامه اصلی) فقط روی پخت غذا تمرکز میکند، در حالی که گارسون (Sidecar) مسئول مدیریت سفارشها و تحویل غذا به مشتریان است. این تقسیم وظایف باعث میشود آشپز بتواند بدون حواسپرتی روی کار اصلی خود تمرکز کند، بار مسئولیتها به درستی توزیع شود و در نهایت، عملکرد کلی بهبود پیدا کند.
مثال کاربردی الگوی Sidecar:
در Kubernetes، ابزار Istio از Envoy Proxy بهعنوان یک Sidecar استفاده میکند که در کنار هر Pod قرار میگیرد و وظایفی مانند مدیریت ترافیک، امنیت و مانیتورینگ را بر عهده دارد.
هر سرویس در این معماری همراه با یک Sidecar اجرا میشود که وظایف مهمی مانند مدیریت ترافیک شبکه، ثبت لاگها، و کنترلهای امنیتی را انجام میدهد.
این معماری به Istio اجازه میدهد بدون نیاز به تغییر در کد اصلی سرویسها، ترافیک شبکه را بهصورت بهینه مدیریت و مسیریابی کند.
همچنین وقتی خوشههای Kubernetes گسترش مییابند، سرویسهای جدید میتوانند بدون هیچ تغییری در کد برنامه، قابلیتهایی مانند مانیتورینگ و امنیت را از طریق Sidecar ها بهصورت خودکار دریافت کنند.
اسکریپتنویسی شل، کلید خودکارسازی کارها در لینوکس
اسکریپتنویسی شل
Backpressure
Backpressure یک روش کنترلی است که وقتی یک سرویس با حجم زیادی از ورودیها مواجه میشود، بهصورت خودکار سرعت پردازش یا پذیرش درخواستهای جدید را کاهش میدهد. این کار کمک میکند تا از فشار بیشازحد و احتمال خرابی جلوگیری شود.
زمان استفاده از Backpressure:
- در صفهایی مانند Kafka یا RabbitMQ، جایی که افزایش بیشازحد پیامها میتواند مصرفکنندگان را تحت فشار قرار دهد.
- در محدودسازی نرخ درخواستهای API، جایی که هدف جلوگیری از بار زیاد روی سیستم است از آن استفاده میشود.
یک مثال ساده برای شناخت بهتر Backpressure:
تصور کنید که یک رستوران در تایمهای شلوغ، تعداد مشتریان را محدود میکند تا از فشار زیاد به آشپزخانه و هرج و مرج جلوگیری کند.
مثال کاربردی Backpressure:
- Google Cloud Pub/Sub بهعنوان یک سیستم صف پیام (Message Queue)، برای مدیریت حجم بالای پیامها در سرویسهای ابری استفاده میشود.
- زمانی که سرویسهای مختلف در Google Cloud تحت فشار قرار میگیرند، پیامها بهصورت موقتی در صف نگهداشته میشوند تا از افت عملکرد و خرابی جلوگیری کنند.
- این مکانیزم به سیستم اجازه میدهد تا با کنترل بار، پایداری خود را حفظ کند.
الگو Circuit Breaker
الگوی Circuit Breaker یک الگوی مقاومتی است که از تماسهای مکرر با سرویسهایی که در حال شکست هستند جلوگیری میکند و برای مدتی ترافیک را قطع میکند تا از بروز مشکلات جلوگیری کند.
زمان استفاده از الگو Circuit Breaker:
- زمانی که با سرویسهای خارجی در ارتباط هستید که احتمال اختلال یا خرابی در آنها وجود دارد.
- در سیستمهای توزیعشده که ممکن است خرابی یک بخش، کل سیستم را تحت تأثیر قرار دهد
یک مثال ساده برای شناخت بهتر الگو Circuit Breaker:
مانند قطع شدن جریان برق در یک خانه، زمانی که یک دستگاه خراب میشود. مدارشکن، جریان برق را قطع میکند تا از آسیب بیشتر جلوگیری کند.
مثال کاربردی الگو Circuit Breaker:
- Netflix برای مدیریت ارتباط با سرویسهای خراب از ابزار Hystrix استفاده میکند.
اگر موتور پیشنهاد دهنده دچار مشکل شود، Hystrix خودکار مدارشکن را فعال میکند و به جای اینکه رابط کاربری خراب شود، پیشنهادات پیشفرض را نشان میدهد.
همچنین، اگر سرویس پرداخت مشکل پیدا کند، Hystrix جلوی شکستن کل فرایند خرید را میگیرد و اجازه نمیدهد خطاهای تراکنش، کل روند را مختل کنند.
میکروسرویس (Microservice) چیست؟ آشنایی با مزایا و معایب میکروسرویس
میکروسرویس (Microservice)
Thundering Herd Problem
Thundering Herd زمانی رخ میدهد که چندین فرآیند یا سرویس همزمان درخواست یکسانی را پردازش کنند. این مشکل باعث ایجاد فشار زیاد بر روی سیستم میشود.
زمان استفاده از Thundering Herd Problem:
- زمانی که چندین مشتری همزمان کش را بروزرسانی میکنند.
- رویدادهای پربازدید مانند حراجهای بلک فرایدی از آن استفاده میشود.
نحوه حل مشکل Thundering Herd Problem
- استفاده از تایمرهای تصادفی برای پخش کردن درخواستها.
- پیادهسازی کشها، به صورتی که مشتریان بتوانند کشها را در زمانهای مختلف بهروز رسانی کنند.
مثال کاربردی Thundering Herd Problem:
- Amazon از DAX برای جلوگیری از مشکلات Thundering Herd استفاده میکند.
- به جای اینکه هزاران کاربر مستقیماً به دیتابیس حمله کنند، ابتدا پاسخهای کششده را دریافت میکنند.
- در فروش Prime Day زمانهای انقضای کش را بهصورت تصادفی تنظیم میکند تا تمام درخواستها همزمان به دیتابیس نرسد.
استراتژی Canary Release
Canary Release یک استراتژی پیادهسازی تدریجی است که در آن ویژگیهای جدید ابتدا برای درصد کمی از کاربران منتشر میشود و سپس به سایر کاربران میرسد.
زمان استفاده از استراتژی Canary Release:
- زمانی که تغییرات با ریسک بالا را پیادهسازی میکنید.
- زمانی که میخواهید تأثیر واقعی کاربران را قبل از انتشار کامل ارزیابی کنید.
مثال کاربردی استراتژی Canary Release:
- Facebook ویژگیهای جدید را ابتدا برای درصد کمی از کاربران منتشر میکند و سپس آن را به همه کاربران جهانی میرساند.
- برای تست یک طراحی جدید UI یا ویژگی جدید (مانند دارک مود)، ابتدا آن را به 1 درصد از کاربران نمایش میدهند.
- اگر این ویژگی موفق باشد، به تدریج برای سایر کاربران فعال میشود.
- برای مثال، زمانی که Facebook ایموجیهای جدید را تست کرد، ابتدا آنها را در ایرلند و اسپانیا منتشر کرد و سپس به صورت جهانی عرضه شد.

الگوی Blue-Green Deployment
الگوی Blue-Green Deployment یک استراتژی بدون زمان قطعی است که در آن دو محیط (Blue و Green) وجود دارد و پس از تست، ترافیک بین آنها جابهجا میشود. این استراتژی اغلب در موارد زیر استفاده میشود:
زمان استفاده از الگوی Blue-Green Deployment:
- هنگام اجرای بهروزرسانیهای حیاتی و حساس، مانند سیستمهای بانکی یا درمانی.
- زمانی که لازم است در صورت بروز مشکل، بلافاصله به نسخه قبلی بازگردید.
یک مثال ساده برای شناخت بهتر الگوی Blue-Green Deployment:
تصور کنید که یک هتل یکی از بخشهای خود را باز نگه میدارد (Blue) در حالی که بخش دیگر در حال بازسازی است (Green)، و بعد از تکمیل بازسازی، زمانی که همهچیز آماده شد، هتل مهمانها را (ترافیک) از بخش قدیمی به بخش جدید منتقل میکند.
مثال کاربردی الگوی Blue-Green Deployment:
- Google Search Console برای بهروزرسانی الگوریتمهای خود از روش Blue-Green استفاده میکند.
- اگر الگوریتم جدید دچار مشکل شود، Google بهسرعت به نسخه قدیمی (Blue) باز میگردد.
- در صورت بهروزرسانیهای عمده مانند بهبود PageRank , Google ابتدا نسخه جدید موتور جستجو را بر روی نسخه Green تست میکند و سپس ترافیک کامل را به آن هدایت میکند.
بهترین نکات مربوط به کدنویسی تمیز (clean code)
نکات مربوط به کدنویسی
Strangler Fig Pattern
الگوی Strangler Fig یک روش تدریجی برای جایگزینی برنامههای مونولیتیک با معماری میکروسرویس است. بهصورتی که سیستم در حین تغییرات بهدرستی کار کند و قطع نشود.
زمان استفاده از الگو Strangler Fig Pattern:
- زمانی که از یک سیستم قدیمی به سیستم جدید مهاجرت میکنید.
- زمانی که بهجای بازنویسی تمام سیستم بهصورت همزمان، نیاز دارید تا ریسکها را کاهش دهید.
یک مثال ساده برای شناخت بهتر الگوی Strangler Fig Pattern:
تصور کنید یک شهر جادههای جدیدی میسازد که اطراف جادههای قدیمی قرار میگیرند و به تدریج جادههای قدیمی را حذف میکند.
مثال کاربردی الگو Strangler Fig Pattern:
- Spotify بهصورت تدریجی از یک برنامهی مونولیتیک به معماری میکروسرویسها مهاجرت کرد. آنها ابتدا APIهایی را در اطراف سیستم اصلی ایجاد کردند و بهمرور بخشهایی مانند پخش موسیقی، مدیریت پلیلیست و پرداخت را به سرویسهای مستقل تبدیل نمودند. این رویکرد به آنها اجازه داد تا بدون بازنویسی کامل و ایجاد قطعی در سرویس، بهصورت مرحلهای به معماری جدید منتقل شوند.
Snowflake Server
سرور Snowflake به سروری گفته میشود که بهصورت دستی پیکربندی شده و بازتولید آن بسیار دشوار است. این عمل باعث میشود این سرورها شکننده و آسیبپذیر باشند.
یک مثال ساده برای شناخت بهتر الگوی Snowflake Server:
مانند یک سرآشپز که بدون دستورالعمل خاصی یک غذا را تهیه میکند، بنابراین بازسازی آن دشوار خواهد بود.
مثال کاربردی Snowflake Server:
- Google برای جلوگیری از سرورهای Snowflake از Terraform و Kubernetes برای خودکارسازی زیرساختها استفاده میکند.
- هر سرویس Google Cloud میتواند از یک فایل پیکربندی بازسازی شود و تنظیمات یکسانی را تضمین کند.
- اگر یک مرکز داده Google دچار مشکل شود، آنها میتوانند بهسرعت سرورهای مشابهی در منطقه دیگری راهاندازی کنند.
هفت نشانه یک برنامه نویس بد
برنامه نویس بد
الگوی Twelve-Factor App
الگوی Twelve-Factor App یک روش برای ساخت برنامههایی است که بتوانند به راحتی در محیطهای ابری، اجرا و قابل نگهداری باشند. این الگو از بهترین روشها مانند استفاده از متغیرهای محیطی برای تنظیمات، مدیریت لاگها به صورت جریان رویدادها استفاده میکند.
زمان استفاده از الگو Twelve-Factor App:
- هنگام طراحی برنامههای ابری بومی (Cloud-native)
- زمان مهاجرت به میکروسرویسها
یک مثال ساده برای شناخت بهتر الگوی Snowflake Server:
مشابه طراحی یک خانه مدولار است که هر اتاق (سرویس) قواعد مشترکی را دنبال میکند، بنابراین اعمال تغییرات راحتتر خواهد بود.
مثال کاربردی الگوی Snowflake Server::
- Heroku پلتفرم ابری خود را بر اساس اصول اپلیکیشنهای 12 عاملی طراحی کرده است.
- برنامهها در Heroku پیکربندیهای خود را در متغیرهای محیطی ذخیره میکنند که باعث میشود مقیاسپذیری آنها سادهتر باشد.
Dark Launch
Dark Launch روشی است که در آن یک قابلیت جدید در برنامه پیادهسازی میشود، اما تا زمانی که بهصورت کنترلشده فعال نشود، برای کاربران قابل مشاهده نیست.
یک مثال ساده برای شناخت بهتر Dark Launch:
مانند یک رستوران است که یک منوی محرمانه جدید را معرفی میکند و تقاضا را قبل از انتشار کامل تست میکند.
مثال کاربردی Dark Launch:
- Instagram ویژگیهای جدید را در حالت Dark Launch بهصورت پنهانی منتشر میکند و قبل از نمایش به کاربران، آنها را آزمایش میکند.
- هنگام آزمایش تغییرات در الگوریتمها، این ویژگیها را در پسزمینه پیادهسازی میکنند و تنها بر روی کارکنان داخلی این تاثیرات را اعمال میکنند.
- ویژگی پستهای پیشنهادی در Instagram ماهها پیش از آنکه که کاربران آن را ببینند، به صورت پنهانی راهاندازی شد تا مهندسان بتوانند آن را بهینهسازی کنند.
۶ قابلیت YAML که اکثر برنامهنویسان از آنها بیاطلاع هستند
قابلیت YAML
جمع بندی
در این مقاله با 10 مفهوم مهم و پرکاربرد در معماری نرمافزار آشنا شدیم که به توسعهدهندگان کمک میکند برنامههایی مقیاسپذیر و پایداری را بسازند. الگوهایی مانند Sidecar , Circuit Breaker و Backpressure نقش مهمی در مدیریت پیچیدگی سیستمهای توزیعشده دارند. شناخت و بهکارگیری این مفاهیم، راه را برای طراحی بهتر و مهاجرت موفق به معماریهای جدید مانند میکروسرویسها هموارتر میکند.