ممکن است تا به حال با آگهی فرصتهای شغلی که به دنبال استخدام یک مهندس SRE هستند روبهرو شده و از خودتان پرسیده باشید که SRE چیست؟
در عصر حاضر، تکنولوژیهای Cloud-Native بیش از هر زمانی مخاطبین بسیار زیادی به خود جذب کرده و شرکتها و استارتاپهای بسیار زیادی برای مدیریت سرویسها و اپلیکیشنهایشان از رویکردهای ابری استفاده میکنند.
اما رویکردهای ابری برای مدیریت و کاراتر شدن نیاز به یکسری متد و روش دارند تا بتوانند به بهترین شیوه ارتباط میان توسعه نرمافزار و مدیریت عملیاتها را برقرار کنند.
SRE رویکردیست که قصد دارد به بهترین شکل ممکن و با استفاده از رویکردهای مهندسی نرمافزار در این مسیر به شما کمک بکند. در این مطلب از وبلاگ همروش قصد داریم با مفهوم SRE آشنا شویم.
SRE یا مهندسی پایداری سایت چیست؟
SRE یا Site Reliability Engineering که در فارسی به آن «مهندسی پایداری سایت» یا «مهندسی قابل اطمینان سایت» گفته میشود رویکردیست که در آن، از قواعد و تکنیکهای مهندسی نرمافزار برای مدیریت و بهینهسازی زیرساختها و عملیاتهای IT استفاده میشود.
هدف اصلی استفاده از SRE این است که سیستمهای نرمافزاری را مقیاسپذیرتر و پایدارتر کرده و به بهینهسازی عملیاتهایی که منتهی به این مسائل میشود کمک کند.
یک مهندس SRE تلاش دارد تا از طریق فاکتورهای مختلفی مانند بالا بردن میزان در دسترس بودن، کارایی، بهینهسازی میزان تاخیر برای بارگذاری محتوا، ذخیرهسازی و… میزان پایداری یک سیستم نرمافزاری را افزایش دهد.
اولین باری که اصطلاح SRE به کار گرفته شد در سال ۲۰۰۳ و توسط یکی از مهندسین گوگل به نام Ben Sloss بود که مطابق با مستندات گوگل به این شکل SRE را تعریف میکند:
SRE فرایندیست که در آن شما با Operationها به عنوان یک مشکل نرمافزاری برخورد میکنید. همچنین یک نقل قول دیگر از این مهندس وجود دارد که میزان اهمیت بالای جایگاه SRE و مهندس SRE در گوگل را نشان میدهد و آن این است که: اگر گوگل از کار بیافتد، تقصیر من است!
حال که به صورت کلی با SRE و مفهوم آن آشنایی پیدا کردیم برای اینکه درک عمیقتری از چیستی SRE پیدا کنیم نیاز است که با اهداف آن آشنا شویم.
اهداف مهم SRE
SRE برای اینکه بتواند به بهترین شیوه نیازهای مدیریتی و بهینهسازی شما را پیادهسازی بکند، ۴ هدف اصلی را پیش میگیرد که هر کدام از این اهداف، روند کاری بخشهای متفاوت اما در نهایت یکپارچه را بهبود میبخشد.
تمرکز روی خودکارسازی
یکی از مهمترین اهدافی که SRE دنبال میکند، کاهش تکرار و انجام دوباره کارها است. به همین دلیل تیمی که روی SRE کار میکند تلاش دارد تا بیشتر کارها را براساس فرایندهای خودکارسازی شده انجام دهد و در نتیجه ابزارهایی را توسعه بدهد که براساس الگو Self-Service کار بکند.
این موضوع باعث میشود تا تیم توسعه بتواند بهتر روی تحویل ویژگیهای جدید متمرکز شود و تیم عملیات یا Operation نیز بهتر روی زیرساختها و مدیریت آنها کار بکند.
پر کردن فضای میان توسعه و عملیات (Development و Operation)
ایجاد فضای همکاری و هماهنگی بین دو تیم توسعه و عملیات همواره یکی از چالشهای اصلی بوده و به همین دلیل همواره یکسری مشکلات ناشناخته بهوجود میآمد که حل کردن آنها چالش برانگیز بود. SRE تلاش دارد تا فضای میان این دو تیم را با پیادهسازی اهداف مشترک حل بکند
ایجاد سرویسها و ابزارهایی برای پشتیبانی از تیم عملیات
رویکرد سنتی مدیریت و توسعه یک اپلیکیشن به این شکل بود که تیم عملیات یا Operation تنها هدفی که دنبال میکرد ارائه uptime بالا (۹۹.۹۹۹ درصد) بود. اما این اتفاق زمانی که قصد داشتیم در لایههای مختلف تغییراتی را اعمال کنیم با چالشهایی مواجه میشد.
اما هدفی که SRE دنبال میکند این است که با استفاده از ابزارها و فرایندهایی مانند خودکارسازی، حتی در صورت وجود تغییرات مختلف، همه چیز را پیشبینی کرده و بتواند سطح بالایی از در دسترس بودن را فراهم کند.
ایجاد تغییرات فرهنگی در سازمان
ورود SRE به یک شرکت، فضای کاری و مدیریت تیمها را تحت الشعاع قرار میدهد. زمانی که از SRE استفاده کنید نیاز است تا روشهای مدیریت و عملیاتی مختلفی را تغییر بدهید.
برای مثال ارتباط تیمها با یکدیگر، روشهای حل مسئله، مدیریت خطا و ریسک و… از جمله چیزهاییست که نیاز به تطبیق با حالت جدید دارد. از این نظر میتوان گفت که SRE باعث میشود تا یک فرهنگ جدید و نوع نگاه جدیدی ایجاد شده و نیاز است که براساس اصول آن حرکت کرد.
فواید و اهمیت مهندسی قابل اطمینان سایت یا SRE
همانطور که گفته شد هدف اصلی که Site Reliability Engineering دنبال میکند، افزایش میزان پایداری یک وبسایت با بهرهگیری از متدها و روشهای مهندسی نرمافزار است. اما اگر بخواهیم به صورت جزئیتر در ارتباط با فواید و مزایای SRE صحبت کنیم باید یک لیست کامل را ارائه دهیم:
افزایش نرخ در دسترس بودن و Uptime
به عنوان یک وظیفه اصلی، SRE از بروز خطا و مشکلاتی که باعث میشود سیستم از کار بیفتد جلوگیری میکند. بنابراین یکی از اصلیترین مزیتهای استفاده از تکنیکهای SRE مطمئن شدن از میزان بالای نرخ در دسترس بودن وبسایت و Uptime آن است.
بهبود تجربه کاربری
از آنجایی که تمرکز اصلی SRE روی بالا بردن میزان Availability وبسایت است در نتیجه مشتریان و کاربران شما میتوانند از اینکه وبسایت همواره در دسترس است مطمئن شوند و اعتبار برند شما نیز افزایش پیدا بکند.
همچنین SRE تلاش دارد تا با کمترین میزان تاخیر، سرویسها را به کاربران ارائه دهد در نتیجه تجربه استفاده از سرویسها برای کاربران مطمئنا مطلوب خواهد بود.
افزایش میزان مقیاسپذیری
با بهینهسازی استفاده از منابع و کاهش اتلافات، شرکتها و استارتاپها میتوانند با استفاده از تکنیکهای SRE، زیرساختها و اپلیکیشنهای خود را بهتر مقیاسدهی و مدیریت کنند.
افزایش امنیت
در SRE یکی از تکنیکها برای بالا بردن میزان پایداری و قابل اطمینان بودن وبسایت، دور نگه داشتن سرویسها از هرگونه خطر و تهدید امنیتیست. از این جهت SRE تلاش میکند تا امنیت وبسایت را بالاتر برده و به شما این اطمینان را بدهد که از استانداردهای امنیتی بالایی برای جلوگیری از هرگونه خرابکاری استفاده میشود.
پیشبینیپذیری
با مانیتور و آنالیز کردن الگوهای مصرفی مختلف، SRE به شما این امکان را میدهد تا بهخوبی کارایی کلی سیستم را پیشبینی کنید و قبل از اینکه خطا یا مشکلی اتفاق بیافتد از آن خبردار شوید. این موضوع نیز به پایدار بودن بیشتر وبسایت کمک خواهد کرد.
صرفهجویی در زمان و هزینه
بیشتر کارهایی که در دنیای SRE انجام میشود از طریق فرایندهای خودکارسازی شده پیش میرود و در نتیجه زمان بسیاری برای انجام عملیاتهای مختلف صرفهجویی میشود، همچنین از آنجایی که اولویت SRE بهینهسازی مصرف منابع است میتوان در هزینهها نیز صرفهجویی کرد.
ایجاد پتانسیلهای همکاری بین تیمهای توسعه و عملیات
پیادهسازی اهداف SRE به کار تیمی گسترده نیاز دارد و دو تیم Operation و Development نیاز دارند که به خوبی در کنار همدیگر کار بکنند. از این جهت SRE با خود یک فرهنگ همکاری را به تیمها خواهد آورد.
وظایف یک مهندس SRE
وظایف و کارهایی که یک مهندس SRE باید انجام دهد به بخشهای مختلفی تقسیم میشود که در استانداردترین حالت ممکن به موارد زیر خلاصه میشود:
مانیتورینگ و هشداردهی
یکی از مهمترین کارهای یک مهندس SRE مانیتور و بررسی زیرساختها به صورت مداوم و مرتب است. برای این موضوع، مهندسین باید ابزارهای مانیتورینگ را پیادهسازی کرده و قبل از اینکه اتفاقی در زیرساختها بیافتد آن را پیشبینی کنند.
البته اینگونه نیست که مهندسین نرم افزار به صورت ۲۴ ساعت به یک سری صفحه نمایش نگاه کنند و نمودارهای مختلف را تحلیل کنند، بلکه متخصص SRE وظیفه دارد تا یکسری ابزار هشداردهی را ایجاد کند تا بتواند در زمان بروز مشکلات به مهندسین اطلاع بدهد.
حل سریع مشکلات
بعد از اینکه مشکل یا خطایی پیش آمد و یا اینکه سیستم مانیتورینگ پیشبینی به وجود آمدن یک مشکل را ارائه داد، متخصص SRE باید برای هر دو سناریو یک راهحل سریع ارائه داده و با همکاری تیمهای مختلف در سریعترین زمان ممکن مشکل را حل کند.
خودکارسازی
همانطور که گفته شد بیشتر کارهایی که در فرایند SRE انجام میشود به صورت خودکارسازی شده بوده و برای این موضوع، مهندسین SRE باید مجموعهای از ابزارهای مختلف را در جهت حل کردن مشکلات و بهینهسازی سرویسها ایجاد کنند.
مدیریت منابع
مهندسین SRE باید منابع موجود را به خوبی تحلیل کرده و براساس زیرساختهای موجود و آنالیز نیازمندیها، یک برنامهریزی درست از میزان استفاده از منابع را ارائه دهند. اینکار باعث میشود تا بتوانیم با اطمینان بیشتر به زیرساختها، فرایند توسعه و استقرار را پیش بگیریم.
همکاری
مهندس SRE باید بتواند بهخوبی با تیمهای مختلف استقرار و پشتیبانی و توسعه نرمافزار ارتباط داشته و در جهت ارائه یک سرویس یکپارچه، پایدار و مقیاسپذیر به صورت هماهنگ با افراد مختلف عمل کند.
تفاوت DevOps و SRE
درحالیکه متخصصین DevOps روی فراهم کردن شرایطی برای ارائه سریع تغییرات مربوط به اپلیکیشنها تمرکز دارند، مهندسین SRE تلاش دارند تا تغییراتی که اعمال میشود، کلیت سرویس یا اپلیکیشن را متوقف نکند و منجر به خطاهای مختلف در آن نشود.
یکی از مهندسین گوگل میگوید: DevOps و SRE دو روی یک سکه هستند و در واقع تلاش دارند تا بین سرعت پیادهسازی تغییرات (استقرار آنها) و امن بودن آنها یک هماهنگی را ایجاد کنند.
مهندسین DevOps بیشتر روی رفع کردن مشکلات در لایه نرم افزار و استقرار آن تمرکز دارند و هدفشان این است که به سرعت ویژگیها و تغییرات برنامه را ارائه دهند.
این درحالیست که در SRE تلاش اصلی روی حل مشکلات لایه عملیات یا Operation بوده و هدف نهایی این است که اپلیکیشن، در نهایت پایداری، مقیاسپذیری و یکپارچه بودن اجرا شود
جمعبندی
با بهرهگیری از متد SRE شما میتوانید براساس الگوهای مهندسی نرمافزار، لایه عملیات یا Operation یک سرویس را مدیریت کرده و از پایداری سرویسهایتان مطمئن شوید.
با ظهور انواع تکنولوژیها و سرویسهای Cloud-Native یادگیری و استفاده از متدی مانند SRE به یک الزام تبدیل شده و برای اینکه بتوانید به بهترین شکل ممکن کلیت سیستم خود را مدیریت کنید بهتر است استفاده از این متد را پیش بگیرید.
در این مقاله از وبلاگ همروش ما با چیستی SRE، مزایا آن، اهداف و کارهایی که انجام میدهد آشنا شدیم. همچنین یک دید کلی از تفاوت SRE با DevOps را دریافت کردیم.
مطمئنا با مطالعه بیشتر و آشنایی پیدا کردن عمیقتر با SRE، میتوانید بهترین رویکرد را برای مدیریت فرایندهای مختلف در کسب و کارتان پیدا کرده و به اهمیت بالای SRE پی ببرید.