تو می دانی که بدهی فنی – به معنی کد یا فرآیندهای ناکارآمد که به طور مکرر اجرا می شوند – می توانند تمرکز تیم های فناوری اطلاعات را پرت کنند و برای کسب و کار هزینه بردارند. سالهاست که به مهندسان فناوری اطلاعات توصیه شده است ریشه کن کردن بدهی های فنی گامی کلیدی در جهت بهبود کارایی عملیاتی است.
اما دلیل دیگری وجود دارد که چرا باید از بدهی فنی متنفر باشید: این برای محیط زیست مضر است.
از این گذشته، فرآیندهای ناکارآمد منجر به مصرف انرژی بیشتر می شوند. و مصرف انرژی بالاتر از نقطه نظر پایداری بد است. اگر می خواهید یک را در آغوش بگیرید استراتژی محاسبات سبز، حذف بدهی فنی باید بخشی از برنامه های شما باشد.
برای نشان دادن این موضوع، بیایید یک مثال کلاسیک از بدهی فنی در دنیای واقعی را بررسی کنیم، و اینکه چگونه بر مصرف برق و کارایی انرژی تأثیر میگذارد.
مثال بدهی فنی: VMs در مقابل کانتینرها
یک سناریوی بدهی فنی که امروزه بسیاری از مهندسان ITOps می توانند از آن قدردانی کنند اجرای برنامه ها در داخل ماشین های مجازی زمانی که ظروف انتخاب بهتری خواهند بود.
ماشینهای مجازی کارایی کمتری دارند زیرا به اجرای یک سیستم عامل مهمان کامل نیاز دارند. در مقابل، یک برنامه کانتینری به جای نیاز به سیستم عامل مهمان خود، منابع را با سیستم عامل سرور میزبان به اشتراک می گذارد.
توانایی کانتینرها برای به اشتراک گذاشتن منابع به معنی کاهش قابل توجه مصرف انرژی از جمله مزایای دیگر است.
برای اینکه بفهمم ظرفهای انرژی چقدر میتوانند صرفهجویی کنند، آزمایشی سریع برای مقایسه مصرف انرژی لینوکس اوبونتو در VM و Ubuntu که به عنوان یک کانتینر اجرا میشود، انجام دادم.
من VM را با استفاده از ماشین مجازی Kernel مستقر کردم:
kvm -m 2048 ubuntu-22.04-live-server-amd64.iso
و من یک ظرف Ubuntu Docker را با استفاده از:
docker run -it ubuntu
هیچ ماشین مجازی یا کانتینری دیگری روی سیستم اجرا نمیشد و هیچ برنامهای در VM یا ظرف اوبونتو اجرا نمیشد.
بعد از اینکه چند دقیقه به ماشین مجازی و کانتینر دادم تا بعد از راه اندازی اولیه جا بیفتند، دویدم پاور تاپ، ابزاری است که میزان مصرف انرژی فرآیندهای در حال اجرا در لینوکس را گزارش می کند. این چیزی است که نشان داد:
Power est. Usage Events/s Category Description 467 mW 33.7 ms/s 103.6 Process [PID 119643] qemu-system-x86_64 -enable-kvm -m 2048 ubuntu-22.04-live-server-amd64.iso 44.7 mW 55.0 µs/s 11.3 Process [PID 1488] /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 33.3 mW 155.0 µs/s 8.4 Process [PID 1557] /usr/bin/containerd 23.6 mW 131.0 µs/s 5.9 Process [PID 1001] /usr/bin/containerd 22.7 mW 34.4 µs/s 5.7 Process [PID 120396] runc 18.8 mW 75.4 µs/s 4.7 Process [PID 1021] /usr/bin/containerd 9.69 mW 32.8 µs/s 2.4 Process [PID 1017] /usr/bin/containerd 9.26 mW 12.1 µs/s 2.3 Process [PID 1905] containerd-shim
(در خروجی بالا، من خطوطی را که با ماشین مجازی یا فرآیندهای کانتینر ارتباطی نداشتند حذف کردم.)
همانطور که می بینید، PowerTop گزارش می دهد که ماشین مجازی 467 مگاوات برق مصرف می کند. این در حالی است که فرآیندهای مربوط به کانتینر داکر در مجموع 05/162 مگاوات برق مصرف می کنند.
از منظر مصرف انرژی، این باعث می شود نمونه کانتینری اوبونتو حدود 280 درصد کارآمدتر باشد.
همچنین به خاطر داشته باشید که من فقط یک کانتینر در حال اجرا داشتم. این احتمال وجود دارد که کل صرفه جویی در مصرف برق حتی بیشتر شود اگر من چندین کانتینر را با چندین VM مقایسه کنم زیرا برخی از فرآیندهای کانتینری که PowerTop ردیابی می کند می توانند بین کانتینرها به اشتراک گذاشته شوند. اما با KVM، هر VM باید به عنوان فرآیند سنگین وزن خود اجرا شود.
بدهی فنی واقعا چقدر انرژی را هدر می دهد؟
بدیهی است که ما در اینجا فقط در مورد تفاوت میلی وات در مصرف انرژی صحبت می کنیم. در آزمایش من، انرژی صرفه جویی شده با استفاده از یک ظرف به جای VM (305 میلی وات) برابر است با حدود 1/28 کل انرژی مورد نیاز برای روشن کردن یک لامپ LED استاندارد (8500 میلی وات) برای یک ساعت. این از منظر پایداری بسیار ناچیز است.
اما در مقیاس، تفاوت می تواند اضافه شود. اگر صدها یا هزاران برنامه را به طور مداوم اجرا می کنید، قادر به اجرای آنها در کانتینرها – که همانطور که دیدیم، می تواند مصرف انرژی را تا حدود 2.8 کاهش دهد – می تواند در مقدار بسیار زیادی برق صرفه جویی کند.
این به ویژه اگر هزینه های انرژی جانبی (مانند سرمایش) مرتبط با منابع تشنه انرژی را علاوه بر مصرف وات مستقیم هر فرآیند، در نظر بگیرید.
محدودیت در مقایسه VM و مصرف انرژی کانتینر
مسلماً نتایج فوق دارای محدودیت هایی هستند. برای اولین بار، من ماشین مجازی KVM را روی یک تصویر ISO زنده سرور اوبونتو راهاندازی کردم، که با تصویر پایه ظرف اوبونتو که هنگام اجرای کانتینر استفاده کردم، یکسان نیست. بنابراین این کاملاً یک مقایسه سیب به سیب نیست. همچنین ممکن است با آزمایش تخصیص حافظه های مختلف یا خاموش کردن فرآیندهای غیر ضروری در داخل سیستم عامل مهمان، کارایی انرژی VM را بهبود بخشم. یک VM که در واقع روی یک دیسک مجازی نصب شده است نیز ممکن است انرژی کمتری نسبت به یک دستگاهی که به عنوان یک سیستم زنده بر اساس یک فایل ISO اجرا می شود مصرف کند.
با این حال، بعید به نظر می رسد که هر یک از این متغیرها بر نتایج کلی آزمایش من تأثیر بگذارد. مهم نیست که کدام ترفندها را اعمال می کنید، تقریباً مطمئناً کانتینرها نسبت به ماشین های مجازی از نظر انرژی کارآمدتر و در نتیجه پایدارتر هستند.
نتیجه
اگرچه اکثر تیمهای ITOps میدانند که اجرای برنامهها در داخل کانتینرها کارآمدتر است، اما ممکن است مهاجرت به کانتینرها را به تعویق بیاندازند زیرا زمان کافی برای انجام این کار ندارند. کاربردهای Refactor یا یاد بگیر فناوری ظروف پیچیده.
اما با ناکامی در پذیرش فناوری کارآمدتر، این تیم ها با بدهی فنی مواجه می شوند. این نه تنها باعث افزایش هزینه ها و ایجاد ناکارآمدی های عملیاتی می شود (مانند زمان راه اندازی کندتر برای ماشین های مجازی در مقایسه با کانتینرها)، بلکه تأثیر منفی واضحی بر پایداری به شکل مصرف انرژی بیشتر دارد.
