مقدمه

نوشتهٔ Benjamin Treynor Sloss
ویرایش Betsy Beyer

«امید، استراتژی نیست.»
یک ضرب‌المثل سنتی در SRE

این حقیقتی پذیرفته‌شده است که سیستم‌ها خودشان را اداره نمی‌کنند. پس یک سیستم—به‌خصوص یک سیستم محاسباتی پیچیده با مقیاس بسیار بزرگ—چطور باید اداره شود؟


 

رویکرد Sysadmin به مدیریت سرویس

در گذشته، شرکت‌ها برای اجرای سیستم‌های محاسباتی پیچیده از Systems Administrators (Sysadmins) استفاده می‌کردند.

در این رویکرد، sysadmin‌ها مجموعه‌ای از کامپوننت‌های نرم‌افزاری موجود را کنار هم قرار می‌دهند و آن‌ها را deploy می‌کنند تا یک سرویس ایجاد شود. سپس مسئول اجرای سرویس و پاسخ‌گویی به رویدادها و تغییرات هستند. با رشد پیچیدگی و افزایش حجم ترافیک—که رویدادها و تغییرات بیشتری ایجاد می‌کند—تعداد sysadminها نیز باید افزایش یابد. به دلیل تفاوت مهارت‌های sysadmin با توسعه‌دهندگان، این دو گروه معمولاً به دو تیم مجزا تقسیم می‌شوند: Development و Operations (Ops).

رویکرد sysadmin مزایایی دارد: اجرای آن ساده است، نیروی انسانی ماهر در بازار وجود دارد و ابزارها و کامپوننت‌های آماده زیادی برای ساخت سرویس در دسترس هستند.

اما این مدل معایب و هزینه‌هایی نیز دارد:

  • هزینه‌های مستقیم: افزایش هزینه با رشد سرویس، زیرا کارها دستی هستند.

  • هزینه‌های غیرمستقیم: ناشی از تفاوت فرهنگ، انگیزه‌ها، زبان مشترک و درک ریسک بین Dev و Ops. این اختلافات می‌تواند به بی‌اعتمادی و تضاد تبدیل شود.

در مدل سنتی، تیم‌های Dev و Ops معمولاً سر سرعت Release اختلاف دارند:

  • Dev می‌خواهد سریع featureهای جدید را release کند.

  • Ops می‌خواهد سیستم پایدار باقی بماند و outage رخ ندهد، زیرا اکثر outageها حاصل تغییرات هستند.

برای مدیریت این تضاد، Ops معمولاً فرآیندهایی مثل Launch Gates، Change Reviews، Rollout Checklists ایجاد می‌کند، در حالی‌که Dev تلاش می‌کند این محدودیت‌ها را دور بزند (مثلاً با feature flag، incremental rollout، sharding و …).


 

رویکرد Google به مدیریت سرویس: Site Reliability Engineering

تضاد میان Dev و Ops اجتناب‌ناپذیر نیست. Google مدل متفاوتی را انتخاب کرده است: Site Reliability Engineering (SRE) — یعنی استخدام Software Engineers برای اجرای عملیات و نوشتن سیستم‌هایی که کارهای تکراری sysadminها را خودکار کنند.

تعریف ساده:
SRE یعنی وقتی از یک Software Engineer بخواهید یک تیم Operations طراحی کند.

وقتی نویسنده در سال 2003 مدیریت یک تیم Production را برعهده گرفت، بر اساس تجربهٔ مهندسی نرم‌افزار، تیم را طوری طراحی کرد که خودش دوست داشت در آن کار کند. نتیجهٔ امروز آن تیم، SRE مدرن Google است.

ترکیب تیم SRE

  • ۵۰–۶۰٪: Software Engineers استخدام‌شده با معیارهای کامل Google

  • ۴۰–۵۰٪: تقریباً معادل مهندسان نرم‌افزار Google + مهارت‌های ویژه مانند
    UNIX Internals، Networking (Layer 1–3)

ویژگی مشترک:
تمایل و توانایی ساخت ابزار و سیستم برای حل مسائل پیچیده از طریق software automation.

این باعث می‌شود SREها:

  • از کار دستی به‌سرعت خسته شوند،

  • توانایی جایگزینی کارهای دستی با نرم‌افزار را داشته باشند.

قانون ۵۰٪ Google

Google یک سقف ۵۰٪ کار عملیاتی (Ops Work) برای SRE تعریف کرده است:
مثل on-call، tickets، manual procedures.
نیم دیگر زمان باید صرف Engineering / Development شود.

اگر این بالانس به‌هم بخورد، بخشی از بار عملیات به Dev منتقل می‌شود تا Dev نیز انگیزه پیدا کند سیستم را پایدارتر طراحی کند.


 

مزایا و چالش‌های مدل SRE

مزایا

  • سرعت نوآوری بالا

  • پذیرش تغییر

  • نیاز به نیروی انسانی کمتر (scaling sublinear)

  • از بین رفتن شکاف Dev/Ops

  • کراس‌ترینیگ طبیعی بین تیم‌ها

چالش‌ها

  • فرایند استخدام سخت (نیاز به مهارت‌های قوی نرم‌افزار و سیستم)

  • کمبود منابع آموزشی در صنعت

  • نیاز به پشتیبانی مدیریتی قوی

  • تصمیمات سخت مثل توقف release پس از اتمام Error Budget


 

DevOps یا SRE؟

اصطلاح DevOps از ۲۰۰۸ مطرح شد و اصولی مثل:

  • مشارکت IT در کل چرخهٔ توسعه،

  • reliance بر automation،

  • استفاده از engineering practices در operations

در DevOps و SRE مشترک هستند.
می‌توان گفت:

  • DevOps = تعمیم اصول SRE برای صنایع مختلف

  • SRE = پیاده‌سازی سخت‌گیرانه و مهندسی‌شدهٔ DevOps در Google


 

اصول SRE

SRE مسئول موارد زیر است:
Availability، Latency، Performance، Efficiency، Change Management، Monitoring، Emergency Response، Capacity Planning.

۱. تمرکز پایدار بر Engineering

SRE باید کم‌تر از ۵۰٪ زمان خود را روی Ops بگذارد.
اگر تیم بیش‌ازحد Ops کار کند:

  • tickets به Dev برمی‌گردد

  • Dev به on-call چرخه اضافه می‌شود

  • تا حجم Ops دوباره به زیر ۵۰٪ برسد

۲. On-call و Incident Response

هدف: حداکثر ۲ alert در هر شیفت ۸–۱۲ ساعته
Postmortemها باید blameless باشند و حتی برای incidentهایی که alert ندادند نوشته شوند.

۳. Error Budget

راه‌حل تضاد Dev و SRE.

اگر SLO مثلاً 99.99% باشد:
Error Budget = 0.01%

این بودجه برای risk کردن در feature launch استفاده می‌شود.

Outage دیگر «بد» نیست؛ بخشی طبیعی از innovation است.

۴. Monitoring

سه خروجی معتبر:

  • Alerts → اقدام فوری انسان

  • Tickets → اقدام غیر فوری

  • Logging → جهت diagnosis

Alertها نباید نیاز به interpretation انسانی داشته باشند.

۵. Emergency Response

MTTR مهم‌ترین معیار است.
استفاده از playbook باعث ~۳ برابر بهبود MTTR می‌شود.
تمریناتی مانند Wheel of Misfortune برای آمادگی تیم اجرا می‌شود.

۶. Change Management

۷۰٪ outageها ناشی از تغییر است.
راهکار:

  • Progressive Rollout

  • Automated Rollback

  • Accurate Detection

۷. Capacity Planning

باید هم organic growth و هم inorganic growth لحاظ شود.
نیازمند load testing منظم و forecasting دقیق است.

۸. Provisioning

رابطهٔ مستقیم با capacity planning و change management دارد، ریسک‌پذیر است و باید دقیق انجام شود.

۹. Efficiency & Performance

چون SRE مسئول provisioning است، باید بر utilization نظارت کند.

SRE بر سه عامل اصلی کنترل دارد:

  • Load

  • Capacity

  • Software Efficiency


 

پایان

SRE یک تغییر اساسی نسبت به روش‌های سنتی Ops است. SRE مجموعه‌ای از اصول، روش‌ها و انگیزه‌هاست که در نهایت تبدیل به یک شاخهٔ مستقل در مهندسی نرم‌افزار شده است.