نقش SRE چیست؟

واژه SRE سرنام Site Reliability Engineering است، یکی از ابداعات شرکت گوگل در صنعت نرم‌افزار که توسط یکی از مهندسین ارشد این شرکت به نام Ben Treynor اولین بار مورد استفاده قرار گرفته است. Ben این تعریف شغلی را اینگونه توصیف میکند :

“ نقش SRE وقتی بوجود می‌آید که از یک مهندس نرم‌افزار می‌خواهی که کاری عملیاتی/زیرساختی انجام دهد”

چرایی بوجود آمدن نقش SRE

مشکل از جایی شروع شد که تیم‌های توسعه می‌خواستند ویژگی‌های جدید نرم‌افزارشان را سریعتر منتشر کرده و شاهد استفاده از این ویژگی توسط کاربران جدید باشند. در مقابل تیم‌های زیرساخت / عملیات می‌خواستند که نرم‌افزاری پایدار داشته باشند و ویژگی‌های جدید باعث می‌شدند که پایداری سیستم در حال سرویس دهی با مشکل مواجه شود. بطور تاریخی این مشکل بین تیم‌های عملیات و تیم‌های توسعه همیشه وجود داشته که چه تیمی حرف آخر را در مورد انتشار نرم‌افزار بزند. از یک طرف تیم عملیات مایل به عدم انتشار پی در پی ویژگی‌های جدید بود (به این دلیل که احتمال دارد ویژگی جدید پایداری کل سیستم را دچار مخاطره کند)‌ و از طرفی دیگر تیم توسعه همیشه در تلاش بوده که آخرین ویژگی‌های نرم‌افزاری که چه بسا بسیار برای آن عرق ریخته شده است را به نمایش بگذارد.


تفاوت با مدیر سیستم

اگر به سالها قبل بازگردیم و عملکرد مدیران سیستم (Sysadmin) را مرور کنیم، متوجه می‌شویم که آنها نیز برای اتوماتیک کردن برخی از کارهایشان کد میزدند اما نکته‌ایی که در این بین وجود دارد این است که این مکانیزه کردن، بعضاً برای چندین سرویس و یا سرور انجام می‌گرفته؛ برای مثال شاید چیزی ما بین ۱۰ تا ۱۰۰ سرویس مختلف. اما با فراگیر شدن اینترنت و همچنین با به وجود آمدن شرکت‌های بزرگی مانند گوگل، مکانیزه کردن برای سرویس‌هایی که بعضاً بایستی ۱۰هزار نمونه (Instance) از آنها در حال اجرا باشند دیگر یک گزینه نبود بلکه یک امر ضروری محسوب می‌شد. همچنین جدا بودن تیم عملیات از تیم توسعه همانطور که بالاتر نیز به آن اشاره شد باعث می‌شد که یک نیاز برای یک نقش جدید بوجود بیاید که آن نقش چیزی نیست جز SRE.


جایگاه Devops در نقش SRE

برای روشنتر شدن نقش جدید SRE ما بایستی نگاهی به چهارچوب فکری Devops داشته باشیم.

چهارچوب فکری Devops مبتنی بر حذف سیلوهایی میباشد که براساس آن تیم‌های فنی مختلف از یکدیگر جدا شده اند، یکی از ویژگیهایی اصلی چهارچوب فکری ‌Devops قرار دادن سریعتر کد در فاز اجرایی است (Deploy) همچنین پیدا کردن مشکلات و رفع آن‌ها در سریعترین زمان ممکن یکی دیگر از موارد اصلی این تفکر است.

نقش SRE در ذات خود یک پیاده سازی از تعریف Devops میباشد. شاید بتوان انواع دیگری از پیاده سازیهای Devops را نیز پیدا کرد، اما مشخصاً نکته‌ای که SRE را از بقیه تعاریف جدا می‌کند این است که در این تعریفِ شغلی جایگاه مهندس نرم‌افزار به عنوان کسی که کار عملیاتی/زیرساختی انجام میدهد پررنگ‌تر است. به کلامی دیگر یک مهندس نرم‌افزار در سال ۲۰۱۹ به کسی گفته می‌شود که در کنار زدن کدتمیز با مفاهیمی همچون مفاهیم پایه علوم کامپیوتر، تست نرم‌افزار نیز آشنا باشد، سپس از این مهندس نرم‌افزار انتظار می‌رود که در نقش یک SRE با مفاهیمی همچون Deploying ، Configuring ، Monitoring سرویس نیز آشنا باشد.

در واقع این شخص علاوه بر توانمندی های کلاسیک یک مهندس نرم‌افزار می‌بایست با مفاهیم مهندسی سیستم (System Administration) نیز آشنا باشد، این شخص بایستی بتواند یک سرویس را راه اندازی کرده و تنظیمات آن را انجام دهد همچنین نرم‌افزاری که نوشته است را به صورت مقیاس پذیر نصب کرده و مانیتور کند و مهمترین نکته اینکه نرم‌افزار را پایدار کند.

نقش SRE بازتعریف مدیرسیستم نیست، این نقش از زمانی شکل گرفت که چهارچوب فکری Devops پا به عرصه وجود گذاشت و در این حین مسئولیت های جاری دیگری متوجه یک مهندس نرم‌افزار گردید.

فایده این نقش چه میتواند باشد؟

با توجه به صحبت هایی که در بالا شد، شاید بتوان بیشترین فایده این نقش را در این نکته دانست که مهندسین نرم‌افزار تیم شما میتوانند با چالش‌های پیاده سازی، مانیتورینگ و پایدار سازی یک محصول آشنا شوند.