تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

10 مفهوم کلیدی و قدرتمند در دنیای نرم‌ افزار برای برنامه‌ نویسان


۹ خرداد ۱۴۰۴

فرض کنید سیستم شما در لحظه‌ای بحرانی از کار می‌افتد و تمام تلاش‌هایی که برای کنترل اوضاع انجام می‌دهید بی‌نتیجه می‌ماند و همه‌چیز به‌ یک‌باره سقوط می‌کند. چنین سناریویی می‌تواند کابوس هر تیم توسعه‌ای باشد. اما جالب است بدانید شرکت‌های بزرگ تکنولوژی برای مقابله با این‌ مدل شرایط، از الگوها و روش‌هایی استفاده می‌کنند که به آن‌ها این قابلیت را می‌دهد تا حتی در سخت‌ترین موقعیت‌ها هم عملکرد مناسبی داشته باشند.

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

همین الان، بدون کمترین پیچیدگی، سرور مجازی خودتون رو در کمتر از ۳۰ ثانیه، راه‌اندازی کنید.
✅ عملکرد پایدار ✅ ترافیک نامحدود ✅ هزینه به‌صرفه
خرید سرور مجازی ابری

آنچه در ادامه خواهید خواند:

  • 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 جلوی شکستن کل فرایند خرید را می‌گیرد و اجازه نمی‌دهد خطاهای تراکنش، کل روند خرید را مختل کنند.
چگونه یک پیام کامیت مناسب را در گیت بنویسیم (راهنمای کامل)
کامیت مناسب در گیت

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 ایموجی‌های جدید را تست کرد، ابتدا آن‌ها را در ایرلند و اسپانیا منتشر کرد و سپس به صورت جهانی عرضه شد.
همین حالا، فایل‌های خودتون رو در فضایی سریع، پایدار و مقیاس‌پذیر ذخیره کنید.
✅ سازگار با Amazon S3 ✅ عملکرد بالا ✅۲.۵ گیگ فضای رایگان
خرید فضای ذخیره‌سازی ابری

الگوی 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 نقش مهمی در مدیریت پیچیدگی سیستم‌های توزیع‌شده دارند. شناخت و به‌کارگیری این مفاهیم، راه را برای طراحی بهتر و مهاجرت موفق به معماری‌های جدید مانند میکروسرویس‌ها را هموار‌تر می‌کند.

۶ ابزار برای بررسی آسیب‌پذیری امنیتی برنامه‌های Node.js
ابزار برای بررسی آسیب‌پذیری امنیتی برنامه‌های Node.js