12 تکنیک برنامه نویسی برای کاهش هزینه های کلود

یکشنبه 22 خرداد 1401

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

 12 تکنیک برنامه نویسی برای کاهش هزینه های کلود

امروزه برخی از توسعه دهندگان معتقدند که مدیریت هزینه های محاسباتی یکی از وظایف مهم گروه devops به شمار می آید. کدنویس ها نرم افزار را ایجاد کرده و اقدام به انتشار آن می کنند و انتظار دارند که شخص دیگری نگران هزینه های آن نرم افزار باشد.

توسعه دهندگان هوشمند امروزه می دانند که تصمیم های کدنویسی آنها می تواند تاثیر بسیار زیادی روی هزینه های شرکتی که در حال کار کردن در آن هستند داشته باشد. کدهای حجیم معمولا کندتر اجرا می شوند و برای اجرا شدن نیز نیازمند منابع ابری و مبتنی بر کلود بیشتری هستند. انتخاب الگوریتم های بهتر و همینطور نوشتن کدهای دقیق تر چیزی فراتر از انتظارات ماست. زمانی که یک کد به خوبی نوشته می شود هزینه کمتری را برای اجرا شدن خواهد داشت.

تاثیر شیوه برنامه نویسی روی هزینه های کلود

توسعه دهندگان همیشه نمی توانند اتصالات را ببینند. نوشتن کد بر روی دستگاه خود همیشه آسان است چرا که شما درباره رم و فضای اضافی دیسک اطلاع دارید و می دانید که هزینه بیشتری را برای شما نخواهد داشت. اگر شما هم دو ترابایت فضای دیسک دارید ممکن است متوجه نشوید که کد شما چقدر از آن را مصرف می کند. در صورتی که یک الگوریتم جدید دو برابر مصرف دیسک بیشتری داشته باشد دسکتاپ شما یک مکث کوچک نیز نخواهد داشت و علاوه بر این کسی متوجه میلی ثانیه ها در یک دستگاه نخواهد شد. اما زمانی که میزان محاسبات شما دو برابر می شود هزینه های کلود شما نیز به همان نسبت به طور قابل توجهی افزایش پیدا می کند.

محاسبات ابری مدرن امروزه در بسیاری از اپلیکیشن ها کاربردهای زیادی دارد. توسعه دهندگان محیط های کلود به خوبی می دانند که در زمان کدنویسی خود باید قدرت تصمیم گیری هوشمندانه را داشته باشند. این به آن معناست که توسعه دهندگان باید از ذخیره سازی غیرضروری داده های خود نیز جلوگیری کنند.

در ادامه قصد داریم 12 مورد از تکنیک های برنامه نویسی که می توانند باعث کاهش هزینه های کلود شما شوند را معرفی کنیم که بدون شک آشنایی با آنها برای شما مفید و سودمند خواهد بود.

کدهای سریع تر بنویسید

اکثر توسعه دهندگان زمان زیادی را صرف بهینه سازی کدهای خود نمی کنند. اگر در یک ثانیه این کد روی لپتاپ آنها اجرا شود متوجه نمی شوند که در طول زمان 20 درصد، 30 درصد یا حتی 50 درصد کندتر کار می کند. دلیل این موضوع نیز این است که برنامه همچنان در چند ثانیه به آنها پاسخ می دهد. با این حال این تفاوت ها زمانی که میلیون ها بار روی سرور اجرا می شوند افزایش پیدا می کند. زمانی که شما بخش ها و قطعات مختلف نرم افزار خود را بارها و بارها بررسی کرده و بازنویسی می کنید می توایند محاسبات ابری را کاهش داده و در نتیجه باعث کاهش هزینه های کلود نرم افزار خود شوید.

سعی کنید ردیابی رم خود را تا جای امکان کاهش دهید

میزان رم که در نرم افزارهای شما مورد استفاده قرار می گیرد از اهمیت بالایی در کاهش هزینه های کلود برخوردار است. در بسیاری از موارد دو برابر کردن میزان مصرف رم می تواند به طور مستقیم روی هزینه های کلود تاثیرگذار بوده و این هزینه ها را نیز دو برابر کند. برنامه نویسان و توسعه دهندگان می توانند با اجتناب از نگهداری داده ها در حافظه ردپای رم خود را به میزان زیادی کاهش دهند. برخی از الگوریتم های Stream کردن مانند کلاس های Stream زبان برنامه نویسی جاوا برای کار کردن با فایل های بزرگ داده بدون بارگیری همه آنها در داخل حافظه طراحی و ساخته شده اند. پروژه Apache DataSketches پاسخ های تقریبی را برای مسائل مرتبط با بیگ دیتا بدون اشغال حافظه فراهم می کند.

به عنوان یک مزیت جانبی مصرف دقیق رم نیز می تواند الگوریتم های شما را سریع تر کند. گاهی اوقات سیستم عامل شروع به بارگذاری داده ها روی دیسک شما با استفاده از حافظه مجازی می کند. این کار باعث می شود تا از خرابی نرم افزار شما جلوگیری شود ولی فراموش نکنید که به میزان زیادی باعث کند شدن برنامه های شما خواهد شد.

برای کاهش هزینه های کلود از تصاویر و ویدئوهای با وضوح کمتر استفاده کنید

استفاده از تصاویر و ویدئوهای با وضوح پایین تر می تواند به روش های مختلف باعث کاهش هزینه های کلود شما شود. اولین دلیلی که برای این موضوع وجود دارد این است که ذخیره آنها برای شما ارزان می شود. ثانیا هرگونه هزینه استخراج داده کمتر می شود. علاوه بر این باید دقت داشته باشید که برنامه شما برای کاربران به میزان زیادی جذاب تر می شود.

حجم تمام تصاویر ثابتی که استفاده می کنید باید به حداقل برسد. محاسبه میزان این کمینه سازی متاسفانه ساده نیست چرا که در برخی از مواقع کیفیت بصری به اندازه ای کاهش می یابد که برای کاربران کاملا آشکار می شود. یافتن یک مقدار مناسب برای این کمینه سازی یک تصمیم در زمان طراحی نرم افزار است که برخی از برنامه نویسان آمادگی چنین تصمیم گیری هایی را ندارند.

امروزه برخی از نرم افزارهایی که از تصاویر آپلود شده استفاده می کنند نیز می توانند پس از دریافت تصاویر، تصویر کوچکتر و نسخه هایی با وضوح کمتر را تولید کنند. ابزارهایی مانند ImageMagik و فرمت هایی مانند WebP می توانند برای انجام چنین کاری بسیار مفید باشند.

برای کاهش هزینه های کلود داده های غیرضروری را کنار بگذارید

بسیاری از توسعه دهندگان دارای یک عادت بسیار بد هستند و آن این است که بسیاری از داده های غیرضروری را ذخیره می کنند به این امید که روزی بتوانند از آنها استفاده کنند. آنها جدول های پایگاه داده خود را با ستون های بیهوده پرده و هرگز سطرهای جدول های پایگاه داده های خود را حذف نمی کنند. اگر سخت افزار برای خود شما باشد و درایو دیسک دارای فضای زیادی باشد داده های اضافی هیچ هزینه ای را برای شما نخواهند داشت ولی نباید فراموش کنید که در خصوص هزینه های کلود این مسئله کاملا متفاوت است. شما در این جا باید به این موضوع فکر کنید که آیا واقعا به تمام این اطلاعات نیاز پیدا خواهید کرد و آنها اطلاعات ارزشمندی هستند؟ آیا کاربر نیازمند جزئیات زیادی است؟ تخلیه برخی از این اطلاعات که کاربرد چندانی ندارند باعث صرفه جویی در هزینه های ذخیره سازی و بازیابی اطلاعات می شود.

حافظه دیسک را محدود کنید

استفاده از دیسک لوکال یا محلی در محیط های مبتنی بر کلود نه تنها می تواند خطرناک باشد بلکه می تواند هزینه های کلود شما را نیز به میزان زیادی افزایش دهد. فضای دیسک محلی اغلب به گونه ای طراحی می شود که به اندازه کافی سریع باشد تا سیستم عامل را به طور کارآمد حفظ کند. بسیاری از توسعه دهندگان کد خود را روی یک حافظه شخصی با یک یا چند ترابایت فضای ذخیره سازی ایجاد می کنند. این در حالی است که ذخیره سازی در فضای ابری و مبتنی بر کلود به ندرت این قدر ارزان و بدون محدودیت خواهد بود. محیط های مبتنی بر کلود اغلب اغلب به طور مستقیم برای ذخیره سازی بر اساس حجمی که شما دارید صورت حساب خود را صادر می کنند و به همین علت نیز بهترین رویکردی که توسعه دهندگان می توانند داشته باشند این است که از کمترین فضای ذخیره سازی ممکن استفاده کنند. شما می توانید راه هایی را در نظر بگیرید که نه تنها فایل های موقتی که برنامه شما ایجاد می کند بلکه کتابخانه های سیستم و بسته های نرم افزاری مورد نیاز شما را نیز به حداقل برساند.

برای کاهش هزینه های کلود لاگ های خود را پاک کنید

فایل های لاگ برای شناسایی مشکلات و دیباگ کردن پروژه های نرم افزاری مورد استفاده قرار می گیرند و عملکرد خوبی را نیز ارائه می دهند اما زمانی که کدهای شما در حال تولید هستند نیازی نیست که همه این فایل ها را نگهداری کنید. تمام اطلاعات اضافی شما به همراه دیسک محلی با نگهداری این فایل ها اشغال می شوند. زمانی که شما یک سیستم ثبت گزارش را ایجاد می کنید باید آن را به شکلی پیکربندی کنید که به طور دائمی لاگ ها را پاک کند. بسیاری از پکیج های گزارش مانند Log4j را می توان به شکلی تنظیم کرد که حداقل تعداد لاگ ها را حفظ کرده و آنها را به طور دائمی حذف کند.

برای کاهش هزینه های کلود به سمت serverless حرکت کنید

معماری Serverless تنها زمانی صورت حساب مالی را برای شما صادر می کند که کدهای شما در حال اجرا باشند و همین عامل نیز می تواند به میزان زیادی روی کاهش هزینه های کلود شما تاثیرگذار باشد. حتی برنامه ها و نرم افزارهایی که دارای یک جریان ثابت از کاربران هستند بیشتر از آنچه که انتظار دارید می توانند از مزایای Serverless بهره ببرند.

امروزه بسیاری از نرم افزارهایی که به صورت Serverless نوشته می شوند می توانند با یک کدنویسی دقیق عملکرد بهتری را به همراه داشته باشند و در عین حال هزینه های کلود را نیز به طور مستقیم کاهش دهند. دقت داشته باشید که هزینه های فضای ابری با میلی ثانیه ها محاسبه می شود و تنها زمانی که پردازنده اشغال می شود این هزینه برای شما محاسبه خواهد شد. به همین علت شما به عنوان یک توسعه دهنده نرم افزار باید بازخوردهای سریع دریافت کنید چرا که می توانید زمان پاسخگویی به درخواست های کاربران را به صورت مستقیم مدیریت کنید و مشاهده کنید که تغییرات کدی که دارید چه تاثیری روی آن خواهد داشت.

نکاتی مهم درباره Serverless و هزینه های کلود

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

داده های قدیمی را آرشیو کنید

همانطور که داده های شما بزرگتر می شوند شما به میزان کمتری به آنها دسترسی پیدا خواهید کرد. شما می توانید با راه اندازی یک نرم افزار به راحتی داده های قدیمی تر خود را به یک مکان ارزان تر منتقل کنید. برخی از ارائه دهندگان محیط های مبتنی بر کلود یک فضای ذخیره سازی سرد را به شما ارائه می دهند که هزینه کمتری برای شما دارد. اطلاعاتی که در این فضا ذخیره می شوند برای بازیابی نیازمند چند ثانیه یا حتی چند دقیقه خواهند بود. سرویس های ابری دیگر مانند Wasabi یا Backblaze در ذخیره سازی آرشیوی متخصص هستند و عملکرد بهتری را در این زمینه به شما ارائه می دهند. همین عامل نیز باعث می شود تا صورت حساب مشتریان آنها به میزان زیادی کاهش پیدا کند. شاید برای شما جالب باشد که بدانید در ذخیره سازی آرشیوی بسیاری از این سرویس ها هزینه ای را برای بازیابی اطلاعات از شما دریافت نمی کنند. بنابراین به محض این که احساس کردید داده ای را نیاز ندارید می توانید آن را آرشیو کنید که این کار بسیار مقرون به صرفه خواهد بود.

CSS layout های خود را ساده سازی کنید

اگر به تگ های HTML تولید شده توسط برخی از فریم ورک ها نگاه کنید متوجه می شوید که برخی از layout های آنها چقدر عجیب و مسخره هستند. در واقع شما با این کار تنها تگ های Div را مشاهده خواهید کرد که به صورت تودرتو به کار رفته اند که تولید و تحویل آنها می تواند هزینه های کلود شما را به میزان زیادی افزایش دهد. یک طراح وب حرفه ای می تواند تنها با ایجاد یک layout ساده تر و با استفاده دقیق از ابزارهای CSS به کاهش 30 درصدی پهنای باند مورد نیاز برای یک سایت و در نتیجه کاهش هزینه ها کمک کند.

برای کاهش هزینه های کلود سایت های استاتیک ایجاد کنید

امروزه برخی از فریم ورک ها مانند React به قدرت محاسباتی کمتری نسبت به سایر فریم ورک ها نیاز دارند و این مسئله زمانی خود را بیشتر نشان می دهد که شما از ویژگی هایی مانند رندر سمت سرور استفاده کنید. تمام کدهایی که شما در سایت خود استفاده می کنید می توانند هزینه های کلود شما را در طول یک ماه افزایش دهند. راهکاری که از نظر فلسفی دقیقا مخالف این سبک کدنویسی است ایجاد کدهای استاتیک برای سایت می باشد. برای این کار می توانید از ساختارهای تغییرناپذیر HTML، CSS و جاوا اسکریپت استفاده کنید. استفاده از یک شبکه تحویل محتوا می تواند به میزان زیادی روی کاهش هزینه های شما نیز تاثیرگذار باشد.

نکاتی مهم درباره ساخت سایت های استاتیک

امروزه فریم ورک های مختلفی که برای طراحی سایت وجود دارند این فلسفه یعنی طراحی و ساخت سایت های استاتیک را پذیرفته اند. Jekyll، Hugo، Gridsome و Pelican تنها چند مورد از ابزارهایی هستند که تمام محتوای شما را در مجموعه ای از فایل های فشرده و بدون تغییر پکیج بندی می کنند. البته شما هنوز هم می توانید شخصی سازی صفحات را با فراخوانی های AJAX ایجاد کنید.

محاسبات و عملیات ذخیره سازی را به صورت خارجی پیاده سازی کنید

همانطور که مرورگرها قدرتمندتر می شوند برخی از فریم ورک ها نیز انتقال محاسبات به طور مستقیم به سمت کلاینت را نیز برای شما ساده تر می کنند. یک کد WebAssembly یا جاوا اسکریپت خوب می تواند بیشتر بار محاسبات را به دستگاه کلاینت وارد کند و به این ترتیب هزینه های کلود شما را به میزان زیادی کاهش دهد. برخی از توسعه دهندگان از لایه های کلود خود می کاهند تا کمی بیشتر از یک پایگاه داده به همراه کمی منطق تجاری نرم افزار در آن باشد. برخی از برنامه نویسان امروزه همه کارهای خود را با HTML ایستا، یک نسخه سمت سرور از PostgreSQL و خروجی های جیسون انجام می دهند.

نکته جالب تر دیگر این است که مرورگرها همچنین گزینه های پیچیده تری برای ذخیره اطلاعات به صورت محلی مانند استاندارد HTML Web Storage و W3C Indexed Database API را به شما ارائه می دهند. این موارد تنها محدود به رشته های کوتاه و cookies نمی شود. دقت داشته باشید که داده های شما در این شرایط باید سریع تر در دسترس قرار گیرند چرا که از طریق اینترنت جا به جا نمی شوند. این موضوع به کاربران آرامش خاطر می دهد که بدانند داده هایشان در یک پایگاه داده متمرکز ذخیره نمی شود. همین عامل نیز این ایده را به وجود می آورد که چرا باید برای ذخیره سازی و استخراج داده ها در حالی که می تواند به صورت رایگان روی دستگاه کاربر وجود داشته باشد باید هزینه بپردازیم؟

برای کاهش هزینه های کلود یک مهندس در این زمینه را استخدام کنید

برخی از توسعه دهندگان در مراقبت از پایگاه های داده تخصص دارند. برخی دیگر نیز تمایل به طراحی رابط های کاربری و توسعه فرانت اند دارند. اکنون که هزینه های کلود بسیار منعطف هستند برخی از تیم ها به دنبال تعیین یک مهندس مدیریت هزینه های کلود هستند. اولین وظیفه ای که چنین مهندسی دارد این است که کدهای شما را به شکل تمیزی بازنویسی کرده و آنها را ویرایش کند تا هزینه کمتری را در کلود برای شما داشته باشد. 


 

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید