در این متن هدف بر این است که کنفرانس Energy-Efficient Software Architecture for Developers • Henrik Bærbak Christensen • GOTO 2023 را که در لینک زیر توضیحات و اسلایدها و فایل ویدئو آن آمده است توضیح دهم.
https://gotoaarhus.com/2023/sessions/2544/energy-efficient-software-architecture-for-developers
در این ارائه تلاش بر این است که نشان دهند چندین راه برای کاهش مصرف انرژی در حوزه تولید نرمافزار وجود دارد و چند ویژگی برای رویکرد خود بیان میکند تا مصرف انرژی کاهش پیدا کند به عنوان مثال میگوید:
یکی از سادهترین راههای کاهش مصرف انرژی، خاموش کردن دستگاههایی است که در حال استفاده نیستند. این شامل کامپیوترها، لپتاپها، تلفنهای هوشمند، تبلتها و سایر دستگاههای الکترونیکی است. اگر دستگاهها در حالت آماده به کار باشند، همچنان مقداری انرژی مصرف میکنند. به عنوان مثال، یک کامپیوتر شخصی در حالت آماده به کار میتواند حدود 10 وات انرژی مصرف کند. اگر کامپیوتر شخصی خود را هر شب خاموش کنید، میتوانید سالانه حدود 100 دلار در هزینههای انرژی صرفهجویی کنید. در ادامه ۷ تاکتیکی که در سخنرانی دکتر کریستینس ارائه میشود را به تفکیک توضیح میدهم و در ادامه نیز چند نکته اضافی را بیان میکنم
خاموش کردن دستگاهها در هنگام بیکاری
یکی از سادهترین و موثرترین راههای کاهش مصرف انرژی، خاموش کردن دستگاههایی است که در حال استفاده نیستند میباشد. این شامل کامپیوترها، لپتاپها، تلفنهای هوشمند، تبلتها و سایر دستگاههای الکترونیکی است. حتی اگر دستگاهها در حالت آماده به کار باشند(sleep)، همچنان مقداری انرژی مصرف میکنند.
اگر برنامه کاربردی یک گوشی همراه را ایجاد کردهاید در زمانی که کاربر نرم افزار شما را متوقف میکند شما نرمافزار خود را متوقف کنید زیرا استفاده از سنسورهای دستگاه در زمانی که نیاز ندارید مصرف انرژی را به همراه خواهد داشت.
استفاده از معماری میکروسرویس و پرهیز از استفاده از منابع غیر ضروری
میکروسرویسها یک معماری نرمافزاری هستند که در آن برنامه به چندین سرویس کوچکتر تقسیم میشود. این سرویسها به طور مستقل اجرا میشوند و میتوانند به صورت خودکار مقیاسبندی شوند. استفاده از میکروسرویسها میتواند به کاهش مصرف انرژی کمک کند زیرا سرویسهای غیرفعال میتوانند به راحتی متوقف شوند. به عنوان مثال، اگر یک برنامه وب از میکروسرویسها برای ارائه محتوای مختلف استفاده کند، میتوان سرویسهایی که در حال حاضر مورد نیاز نیستند را متوقف کرد. این کار میتواند به کاهش مصرف انرژی سرور برنامه وب کمک کند. همچنین استفاده از سرویس FAAS در سرویسهای ابری بسیار مفید است زیرا یکی از ویژگیهای این نوع سرویس آماده سازی سریع و آزاد سازی منابع بعد از اجرا توابع میباشد. این رویکرد بسیار کارایی را افزایش میدهد. لذا لازم نیست ما مصرف انرژی برای ایجاد محیط برای اجرای سرویس را فراهم کنیم بلکه این ویژگی را سرویس دهندگان ابری به خوبی برای ما فراهم میکنند. همچنین تاجای ممکن باید سعی بشود کد کمتری را در داخل فایل exe خود قرار دهیم به عنوان مثال ممکن است ما کتابخانه بسیار بزرگی را برای کار بسیار کوچکی استفاده کرده باشیم ولی در هنگام ساخت فایل خروجی نرمافزار تمام کتابخانه در این فایل قرار میگیرند و خود این موضوع باعث میشود فایل حجیمی ارسال شود و اینترنت بیشتری مصرف شود که اصلا ضروری نیست.همچنین کاهش مصرف انرژی در زمینه شبکه بسیار مهم است هر یک بایتی که از سمت مشتری به سمت سرور ارسال میشود یک عامل موثر در تولید کربن میباشد به عنوان مثال دیتایی مانند "version identifier" لازم نیست در تمام ریکوستهای ما باشد. اگر دیتایی را کاربر هنوز لازم ندارد همان ابتدا دانلود نکن سعی کن تا زمانی که کاربر کلیکی انجام نداده است از آن پرهیز کنی
استفاده از اتصالهای مشترک به پایگاه داده یا اجماع سازی درخواستها
هر بار که یک برنامه به پایگاه داده متصل میشود، مقداری انرژی مصرف میکند. بنابراین، استفاده از اتصالهای مشترک به پایگاه داده میتواند به کاهش مصرف انرژی کمک کند. اتصالهای مشترک به پایگاه داده به برنامهها اجازه میدهد تا از یک اتصال موجود به پایگاه داده استفاده کنند، به جای اینکه هر بار یک اتصال جدید ایجاد کنند. این کار میتواند در برنامههایی که به طور مکرر به پایگاه داده دسترسی نیاز دارند بسیار موثر باشد. یک مثال دیگر که بیان میشود این است اگر کاربر هر ۱ ثانیه به سرور متصل میشود برای دریافت آخرین تغییرات اگر میشود این سرعت را کاهش بدهیم و تبدیل به ۱۵ ثانیه یکبار کنیم و جمیع دادههای اتفاق افتاده را ارسال کنیم.
کاهش کیفیت تصاویر و ویدئوها و یا استفاده از منابع نزدیک
تصاویر و ویدئوها میتوانند مقدار زیادی انرژی مصرف کنند. به عنوان مثال، یک فیلم 1080p میتواند به طور متوسط حدود 2 گیگابایت داده مصرف کند. اگر کیفیت تصاویر و ویدئوها را کاهش دهید، میتوانید مصرف انرژی را کاهش دهید. این کار را میتوانید با استفاده از فرمتهای فشردهتر مانند JPEG 2000 یا HEVC انجام دهید. همچنین اگر از تکنیکهایی مانند catch و یا CDN استفاده کنیم لازم نیست دیتاهای مورد نیاز کاربران از سرور اصلی برطرف گردد و از منابع نزدیکتر به کاربر میتوانیم استفاده کنیم.
کاهش استفاده از قفلها و یا اسفتاده از یک فناوری کارآمد استفاده کنید
قفلها برای جلوگیری از دسترسی همزمان چند برنامه به دادههای مشترک استفاده میشوند. با این حال، قفلها میتوانند مقدار زیادی انرژی مصرف کنند. بنابراین، کاهش استفاده از قفلها میتواند به کاهش مصرف انرژی کمک کند. این کار را میتوانید با استفاده از الگوریتمهای قفلگیری کارآمدتر مرتفع گردد. همچنین اگر از زبان برنامه نویسی موثر تر استفاده کنید مانند c++ و یا GO بسیار تاثیر مثبتی در مصرف انرژی خواهد داشت و همچنین الگوریتمهایی کارآمد تر به عنوان مثال چندین روش sorting وجود دارد اما برخی از آنها مصرف انرژی کمتری را به همراه دارد سعی کنید الگوریتمهای خود را بهبود بدهید. همچنین بجای استفاده از الگوی XML از الگوی json استفاده کنید زیرا اطلاعات بسیار کارآمدتر و موثرتر ارسال میشوند. همچنین در یک تستی که خودش انجام داده است استفاده از دیتابیس redis بسیار مصرف انرژی کمتری داشته است نسبت به mongoDB
جلوگیری از رشد غیرقابل کنترل ویژگیها
ویژگیهای جدید میتوانند باعث افزایش پیچیدگی نرمافزار شوند. پیچیدگی بیشتر میتواند باعث افزایش مصرف انرژی شود. بنابراین، مهم است که از رشد غیرقابل کنترل ویژگیها جلوگیری کنید. این کار را میتوانید با استفاده از فرآیندهای توسعهای چابک و با کیفیت انجام دهید. به عنوان مثال، میتوانید از تکنیکهای مهندسی معکوس برای شناسایی ویژگیهای غیر ضروری استفاده کنید. طبق نمودار زیر مصرف انرژی یک کامپیوتر idle برابر ۲۰٪ درصد انرژی یک کامپیوتر زیر بار است و استفاده از منابع اشتراکی در این موضوع بسیار حائز اهمیت است.
استفاده از پردازندههای کممصرف مانند پردازندههای ARM
پردازندههای کممصرف مانند پردازندههای ARM میتوانند به کاهش مصرف انرژی کمک کنند. این پردازندهها به طور خاص برای کاهش مصرف انرژی طراحی شدهاند و میتوانند در دستگاههای کوچک و قابل حمل مانند تلفنهای هوشمند و تبلتها استفاده شوند.
در اینجا چند نکته اضافی برای کاهش مصرف انرژی نرمافزار آورده شده است:
با پیروی از این تاکتیکها، میتوانید به کاهش مصرف انرژی نرمافزار خود کمک کنید