Site Reliability Engineering یا به اختصار SRE و Development & Operations که به اختصار DevOps نامیده میشود دو دیسیپلین کاربردی در صنعت توسعهٔ نرمافزار هستند که در گذشته برخی SRE را رقیبی برای DevOps میدانستند ولی به نظر میرسد که در کل تفاوت چندانی با یکدیگر نداشته و در بسیاری از جاها همپوشانی هم دارند. به عبارتی، DevOps و SRE در فرآیند توسعهٔ نرمافزار نه تنها رقیب یکدیگر نیستند بلکه مکمل یکدیگرند که برای به حداقل رساندن موانع از یکسو و همچنین تحویل سریعتر و بهتر نرمافزار از سوی دیگر توسط دولوپرها به کار گرفته میشوند.
بدون اندازهگیری دقیق درصد در دسترس بودن اپلیکیشن و داشتن تعریف روشنی از اینکه اساساً در دسترس بودن به چه معنا است، تیمهای نرمافزاری مختلف نقطهنظرات متفاوتی با یکدیگر دارند و همین شد که پس از سال ۲۰۰۰ میلادی، برای گوگل انگیزهای شد تا مفهومی تحت عنوان SRE را خلق کند (برای کسب اطلاعات بیشتر در این زمینه، میتوانید به مقالهٔ SRE: آشنایی با مقولهٔ مهندسی ضریب اطمینان و اهمیت در کمپانی گوگل مراجعه نمایید.)
در مقال، فلسفهٔ DevOps از آنجایی شروع شد که توسعهدهندگان کد را با درک کمی از نحوهٔ اجرای آن پس از دیپلوی نرمافزار مینوشتند به طوری که دولوپرها زحمت اطمینان حاصل کردن از اجرای صحیح کدهای جدید را به دوش اعضای تیم عملیاتی (همچون متخصصین سرور و غیره) میانداختند که مسئول نگهداری و اجرای برنامهها بودند که همین مسئله در اغلب موارد منجر به شکلگیری تنش بین این دو گروه میشد چرا که اولویتهای هر یک از این گروهها با یکدیگر همخوانی نداشت!
DevOps به عنوان یک فرهنگ کاری و مجموعهای از روشهایی که هدف آن کاهش فاصلهٔ بین فرایند توسعهٔ نرمافزار و تَسکهای عملیاتی بود ظهور کرد اما در عین حال لازم به ذکر است که DevOps به صراحت نمیتواند چگونگی موفقیت در این حوزهها را تعیین کند به طوری که دوآپس مانند یک کلاس انتزاعی (اینترفیس) در برنامهنویسی است که رفتار کلی سیستم را تعریف میکند اما جزئیات پیادهسازی را به برنامهنویس محول میکند (برای کسب اطلاعات بیشتر، به مقالهٔ DevOps (دوآپس) چیست؟ مراجعه نمایید.)
پیش از این گفتیم که SRE توسط گوگل برای تأمین نیازهای داخلی این کمپانی به طور مستقل از DevOps تکامل یافت که به نظر میرسد روشی به منظور پیادهسازی تکنیکهای دوآپس است اما واقعیت امر آن است که SRE شامل دستورالعملهای بیشتری برای اندازهگیری و اطمینان حاصل کردن از اصطلاحاً Up Time اپلیکیشن میباشد؛ به عبارت دیگر، SRE چگونگی موفقیت در بخشهای مختلف DevOps را تعیین میکند به طوری که برای درک کاملتر این تفاوتها، بهتر است مجدد به مثال کلاسهای انتزاعی که پیش از این اشارهای به آنها داشتیم باز میگردیم.
اگر DevOps را به عنوان یک اینترفیس در یک زبان برنامهنویسی فرض کنیم، آنگاه SRE کلاسی است که از آن اینترفیس ایمپلیمنت میشود و درست مثل آنچه در برنامهنویسی اتفاق میافتد و کلاسها معمولاً رفتار و ویژگیهای بیشتری از آنچه که اینترفیسهایشان تعریف کردهاند را پوشش میدهند یا ممکن است که از چندین و چند اینترفیس مختلف ویژگیهای خود را دریافت کنند، SRE نیز تَسکها و دستورالعملهای بیشتری را شامل میشود که لزوماً در تعریف آکادمیک DevOps مشخص نشدهاند.