مهندسی قابلیت اطمینان سایت (Site Reliability Engineering) ، با بهره گیری از اصول مهندسی نرم افزار در عملیات و فرایندهای زیرساختی، به سازمان ها در ایجاد سیستم های نرم افزاری بسیار قابل اعتماد و توسعه پذیر کمک می کند. SRE بر روی حوزه های کلیدی از جمله در دسترس بودن سیستم نرم افزاری، عملکرد، تاخیر، بهره وری، ظرفیت و پاسخ به حادثه تمرکز دارد. کسانی که وظایف را انجام می دهند به عنوان مهندسین SRE شناخته می شوند.
مهندسی قابلیت اطمینان سایت (SRE) با استفاده از ابزارهای نرم افزاری، وظایف زیرساخت های فناوری اطلاعات مانند مدیریت سیستم و نظارت بر برنامه را خودکار سازی یا اتوماسیون می کنند. سازمان ها از SRE استفاده می کنند تا اطمینان حاصل کنند که برنامه های نرم افزاری آنها در میان به روز رسانی های مکرر تیم های توسعه، قابل اعتماد هستند. SRE قابلیت اطمینان سیستم های نرم افزاری توسعه پذیر را بهبود می بخشد زیرا مدیریت یک سیستم بزرگ با استفاده از نرم افزار، پایدارتر از مدیریت دستی صدها ماشین است.
اصطلاح “مهندسی قابلیت اطمینان سایت” در سال ۲۰۰۳ توسط معاون مهندسی گوگل Ben Sloss ابداع شد و در واقع تلاش برای ایجاد سیستمهای پایدار، امن و بدون اختلال برای خدمات آنلاین است. اگر شما به بهینه سازی قابلیت اطمینان و کیفیت کلی نرم افزار خود فکر می کنید، مهم است که اصول SRE و همچنین مهارت ها و طرز فکر مهندسان SRE را درک کنید. در ادامه به شرح این موضوعات می پردازیم:
مطالب مرتبط : DevOps چیست؟ آشنایی با اصول DevOps به زبان ساده
مهندسی قابلیت اطمینان سایت چگونه عمل می کند؟
مهندسی قابلیت اطمینان سایت (SRE) با استفاده از اصول مهندسی نرم افزار، زیرساختها و خدمات قابل اطمینان و انعطاف پذیر را برای سازمانها فراهم می کنند. مهندسان SRE حاصل میکنند که سیستمها در همه حال قابل اطمینان، انعطاف پذیر و در دسترس خواهند بود و سرعت انجام سرویس ها منجر به وقفه سرویس دهی یا مشکلات امنیتی نمی شود. SRE ها مسئول نظارت و نگهداری سیستمها هستند و اتوماسیون را برای محیطهای مورد نیاز فراهم میکنند.
مهندسان قابلیت اطمینان سایت در ارائه فریم ورک ها و پلتفرمها برای استقرار خدمات و برنامهها نقش مهمی را ایفا می کنند. وقتی مشکلی پیش میآید، مهندسان SRE اغلب نقش مدافعان اولیه را به عهده دارند و به طور مداوم با تیمهای توسعه همکاری میکنند تا به برنامههایی که تحت حمله قرار دارند، رسیدگی کنند.
شاید مهمترین نقش مهندسان SRE در طراحی قابلیت اطمینان باشد. قابلیت اطمینان را نمی توان به عنوان یک سرویس خریداری کرد. بنابراین باید سیستمهایی را با طراحی قابلیت اطمینان ایجاد کرد.
مهندسی قابلیت اطمینان سایت شامل مشارکت مهندسان SRE در یک تیم نرم افزاری است. تیم SRE معیارهای کلیدی را برای قابل اطمینان بودن سیستم تعیین می کند و یک بودجه خطا بر اساس سطح تحمل ریسک سیستم، در نظر می گیرد. اگر تعداد خطاها کم باشد، تیم توسعه می تواند ویژگی های جدیدی را منتشر کند ولی اگر خطاها بیش از بودجه مجاز باشد، تیم ایجاد تغییرات جدید را متوقف می کند و مشکلات موجود را حل می کند. به عنوان مثال، مهندس SRE بر معیارهای عملکرد و تشخیص رفتار برنامه نظارت می کند. اگر مشکلاتی در برنامه وجود داشته باشد، تیم SRE گزارشی را به تیم مهندسی نرم افزار ارسال می کند. توسعه دهندگان موارد گزارش شده را برطرف می کنند و برنامه به روز شده را منتشر می کنند.
مزایای مهندسی قابلیت اطمینان سایت
مهندسی قابلیت اطمینان سایت (SRE) با ترکیب اصول مهندسی نرم افزار و تجربهی عملی در طراحی، ساخت و نگهداری سیستمهای نرم افزاری، قابلیت اطمینان، توسعه پذیری و بهره وری را در سازمانها افزایش می دهد.
مزایای SRE عبارتند از:
- افزایش قابلیت اطمینان و زمان فعالیت سیستم ها(uptime): SRE بر جلوگیری از وقوع و کاهش حادثهها تمرکز دارد تا اطمینان حاصل کند که سیستمها و برنامهها همیشه در دسترس هستند و عملکرد مناسبی دارند.
- بهبود قابلیت توسعه پذیری: با بهینه سازی استفاده از منابع و کاهش هدررفت، SRE میتواند به سازمانها در توسعه پذیری زیرساخت ها و برنامهها به صورت کارآمد کمک کند.
- بهبود تجربه کاربری: SRE میتواند تضمین کند که برنامهها و سرویس ها همیشه در دسترس و پاسخگو باشند. این عامل میتواند به طور مستقیم بر رضایت مشتری، اعتبار برند و درآمد تأثیر بگذارد.
- بهینه سازی و پیشرفت مداوم: SRE بر استفاده از دادهها و معیارها برای شناسایی زمینههای بهبود، بهینه سازی و نوآوری مداوم تأکید دارد.
- افزایش امنیت: SRE تضمین می کند که سیستمها و برنامهها امن باشند و با استانداردها و مقررات صنعتی سازگار باشند.
- پیش بینی عملکرد: SRE با نظارت و تجزیه و تحلیل الگوها، می تواند مشکلات عملکردی را پیش بینی کند و از وقوع مشکل جلوگیری کند، تا سیستمها و برنامهها به صورت پیوسته کار کنند و قابل پیش بینی باشند.
- صرفهجویی در هزینه: SRE میتواند با اتوماسیون وظایف روزمره و بهینه سازی استفاده از منابع، نیاز به دخالت دستی را کاهش داده و در زمان و پول صرفه جویی کند.
- همکاری بین تیم های توسعه و عملیات: SRE بر همکاری تیمها با وظایف و مالکیت مشترک تأکید دارد و فرهنگ همکاری و مسئولیت پذیری را ترویج می کند.
معیارهای کلیدی مهندسی قابلیت اطمینان سایت
تیمهای SRE کیفیت ارائه خدمات و قابلیت اعتماد را با استفاده از معیارهای زیر اندازه گیری می کنند.
- اهداف سطح سرویس(SLO)
SLO اهداف و معیارهای مشخص و قابل اندازه گیری است که مطمئن هستید نرم افزار میتواند با هزینه مناسب به آن ها دست یابد. برخی از این معیارها عبارتند از:
- uptime، یا زمانی که یک سیستم در حال کار است
- ظرفیت یا توان عملیاتی سیستم
- خروجی سیستم
- نرخ دانلود، یا سرعتی که برنامه بارگیری (Load) میشود
یک SLO وعدهای تحویل کاراز طریق نرم افزار به مشتری است. به عنوان مثال، شما برای برنامه شرکت خود یک SLO با زمان آپتایم (uptime) 99.95٪ تعیین میکنید.
- شاخص های سطح سرویس(SLI)
SLI اندازه گیری واقعی معیارهایی است که یک SLO تعریف میکند. در شرایط واقعی، ممکن است نتایجی بگیرید که با SLO مطابقت یا تفاوت داشته باشد. به عنوان مثال، برنامه شما تا ۹۹.۹۲٪ آپتایم است که کمتر از SLO وعده شده است.
- توافق نامههای سطح سرویس (SLA)
SLA اسناد قانونی هستند که بیان میکنند زمانی که یک یا چند SLO برآورده نشده باشد، چه اتفاقی خواهد افتاد. به عنوان مثال، SLA بیان میکند که تیم فنی پس از دریافت گزارش، باید مشکل مشتری را در ۲۴ ساعت حل کند. اگر تیم شما نتواند مشکل را در مدت مشخص حل کند، ممکن است مجبور شوید به مشتری وجهی را پرداخت کنید.
- بودجه خطا (Error budgets)
بودجه خطا میزان تحمل عدم رعایت SLO است. به عنوان مثال، یک آپتایم ۹۹.۹۵٪ در SLO به این معناست که زمان مجاز خرابی (downtime) سیستم ۰.۰۵٪ است. اگر زمان خرابی بیشتر از بودجه خطا باشد، تیم نرم افزار تمام منابع و توجه خود را به افزایش ثبات برنامه اختصاص میدهد.
- موشکافی بی طرفانه (Blameless Postmortem)
موشکافی بی طرفانه یک فرایند تحلیلی است که پس از وقوع یک مشکل یا خطا، توسط تیم SRE به منظور یادگیری از اتفاق بوجود آمده و جلوگیری از تکرار آن انجام میشود. مهمترین اصل این فرایند، انجام تحلیلی شفاف و بی طرفانه بر روی علت اصلی مشکل است. این روش، به افراد امکان میدهد که مشکلات را بدون ترس از انتقاد همکاران خود، بررسی و رفع کنند .
نقش ها و مسئولیت های SRE
با پیشرفت فناوری و وابستگی کسب و کارها به زیرساخت های دیجیتال ، نقش مهندسان SRE اهمیت پیدا کرده است. در ادامه، برخی از وظایف استاندارد مهندسان SRE را شرح می دهیم:
- نظارت و هشداردهی: یکی از وظایف اصلی مهندسان SRE ، راه اندازی ابزارها و سیستمهای نظارت بر زیرساخت دیجیتال برای تشخیص مشکلات قبل از تبدیل شدن آن ها به مشکلات قابل توجه است. مهندسان SRE سیستمهای هشداردهی را تنظیم میکنند تا در صورت تشخیص مشکلات، افراد مناسب را مطلع کنند.
- پاسخ به مشکلات به وجود آمده : SRE به سرعت و به طور مؤثر به مشکلات به وجود آمده پاسخ میدهد. علت اصلی مشکل را شناسایی می کند و با نهادهای مرتبط ارتباط برقرار می کند.
- توسعه اتوماسیون و ابزارها:SRE ها ابزارها و سیستمهای مورد استفاده برای مدیریت زیرساختهای دیجیتال یک شرکت را توسعه و نگهداری میکنند. این شامل توسعه اسکریپتهای اتوماسیون برای سادهسازی فرآیندها و کاهش خطر خطاهای انسانی است. SRE همچنین حوزه هایی را که میتوان ابزارها را بهبود داد شناسایی میکنند و ابزارهای جدیدی را برای تأمین نیازهای متغیر کسب و کار ایجاد می کنند.
- پیش بینی و برنامه ریزی ظرفیت مورد نیاز:SRE اطمینان مییابد که زیرساخت دیجیتال یک شرکت میتواند نیازهای کسبوکار را برآورده کند. این شامل تجزیه و تحلیل الگوها برای پیشبینی و تضمین ظرفیت مورد نیاز برای تأمین تقاضای آینده است.
- همکاری با سایر تیم ها: مهندسان SRE به طور نزدیک با تیمهای دیگر همکاری میکنند تا اطمینان حاصل شود که زیرساخت دیجیتال شرکت قابل اعتماد، توسعه پذیر و امن است.
یک مهندس SRE عالی چه ویژگیهایی دارد؟
مهندسان SRE عالی ریسک پذیر، متفکر و نوآور هستند. آنها نیاز توسعه سیستم از ۱۰۰ کاربر به ۱۰۰,۰۰۰ کاربر و حتی ۱,۰۰۰,۰۰۰ کاربر را تشخیص می دهند و در عین حال قابلیت اطمینان و انعطاف پذیری و آماده به کار سیستم را حفظ می کنند.
SRE ها بر روی سیستمها تحلیل و بررسی های لازم را انجام می دهند و در نظر میگیرند که تصمیمات گرفته شده در مرحله توسعه چگونه بر روی محیطهای تولید تأثیر میگذارد و نیازهای سیستمهای تولید چگونه طراحی را تحت تأثیر قرار میدهد.
موفقیت SRE ها نیازمند تست مداوم، پذیرش شکست و تطبیق با تغییرات است. آنها فرآیندهای تکراری را اتوماسیون میکنند تا از بروز خطای انسانی جلوگیری کنند و زمان بیشتری را به نوآوری اختصاص دهند.
مهندسان SRE باید با تیمهای دیگر همکاری کنند و از تکنولوژیها و شیوههای جدید آگاه شوند. اشتراک گذاری تجربیات و یادگیری از دیگران نیز بسیار مهم است.
به طور کلی مهندسان SRE باید از دیدگاهی انعطاف پذیر و سازگار با هر موقعیتی برخوردار باشند.
DevOps در مقایسه با SRE
تیمهای DevOps بر ساده سازی و سرعت تغییر تمرکز دارند. تیم هایSRE اطمینان حاصل می کنند که تغییرات، نرخ خرابی کلی را افزایش نمیدهد. در واقع، آنها دو روی یک سکه هستند: DevOps سرعت را اتوماسیون میکند، در حالی که SRE اطمینان را اتوماسیون میکند. این تعادلی بین سرعت و ایمنی است.
DevOps در طول چرخهٔ توسعه از چپ به راست حرکت میکند و با استفاده از اتوماسیون، قابلیتهای جدید را سریعتر ارائه میدهد. در مقابل، SRE با استفاده از نیازهای سطح تولید در مرحله توسعه، از راست به چپ حرکت میکند و تمرکز بر کاهش نرخ خرابی و کاهش زمان لازم برای بازیابی سرویس دارد. SRE اطمینان می دهد که با وجود تغییرات زیاد، این تغییرات عملکرد سیستم ها را مختل نمی کند.
از طرفی SRE و DevOps در مورد SLOها ، رویکرد یکسانی دارند.
SLOها در مورد حمایت از اهداف تجاری هستند. شرکتها ممکن است به سیستمهایی با قابلیت اطمینان ۹۹% نیاز داشته باشند یا اینکه بخواهند پایگاه کاربری خود را افزایش دهند یا تجربهٔ کاربران را بهبود بخشند. تحقق این اهداف بر عهده DevOps است. اما در پشت این اهداف، معیارهای فنیای وجود دارند و تحقق این معیارها وظیفهٔ کارکنان SRE است. در واقع SRE پیاده سازی عملی DevOps است و تضمین می کند که تیم DevOps تعادل مناسب بین سرعت و ثبات را برقرارکند.
به عبارت دیگر، SLO یک راه عالی برای ترکیب DevOps و SRE است.
اگر مایلید در مورد تفاوت ها و شباهت های SRE و DevOps بیشتر بدانید ، پیشنهاد می کنم مطلب زیر را مطالعه بفرمائید:
نتیجه گیری
تضمین قابلیت اطمینان سایت هرگز و هرگز یک “مسئله حل شده” نخواهد بود. خدمات و برنامههای جدید در کنار تقاضاهای متغیر شرکتها به این معناست که همیشه کار برای تیمهای SRE وجود دارد و همیشه فضایی برای بهبود وجود دارد.