減少云計算成本的12種編程技巧
譯文?譯者 | 李睿
審校 | 孫淑娟
削減云計算成本需要包括開發人員在內整個團隊的努力。以下是開發人員在云中運行成本更低的軟件的一些技巧。
沒有什么比看到開發的應用程序得到病毒式傳播更能振奮開發團隊的精神了。這是一種美妙的感覺,至少在每月的云賬單到來之前是這樣。一些開發人員認為,管理計算成本是Devops團隊的責任。程序員在編寫軟件之后并將其發布,然而卻讓他人擔心成本問題。沒有比這更離譜的了。
明智的開發人員知道他們開發的應用程序對企業的收入有很大的影響。如果編寫大量代碼導致應用程度運行速度較慢,需要更多的云計算資源才能運行。而選擇更好的算法和編寫更緊湊的代碼不僅僅是速度提升,而且編寫良好的代碼運行成本更低。
開發人員并不總是能看到這種聯系。在他們自己的機器上編寫代碼很容易,而購買機器時需要為更多的內存和額外的磁盤空間支付更多的費用。如果有2TB的磁盤空間,可能不會注意到開發的代碼消耗了多少空間。如果一個新算法的運行時間是原來的兩倍,那么誰會注意到額外的幾毫秒呢?但幾乎可以肯定的是,計算量倍增將會導致更大的云計算成本。
現代云平臺擅長將資源利用率轉化為單項費用。優秀的云計算開發人員明白,他們有能力在編寫代碼時做出更明智的決策。它可以像運行分析器來識別問題一樣簡單,或者避免不存儲必要的數據以減少內存占用。
以下是開發人員可以簡化編程的12種方法,使應用程序運行起來更精簡、更快、更便宜。
1.編寫更快的代碼
大多數開發人員不會花費太多時間優化他們的代碼。如果應用程序在他們的筆記本電腦上快速運行,不會注意到它是否會隨著時間的推移慢20%、30%甚至300%。該程序仍在瞬間響應和運營。但是在服務器上發生數百萬次時,它們就會累積起來。仔細分析可以標記緩慢的部分。重寫它們可以減少應用程序需要的實例數量。
2.降低內存占用空間
使用的內存數量是云實例定價的一個重要參數。在許多情況下,加倍使用內存也會使成本加倍。開發人員可以通過避免將數據保存在內存中來降低內存占用空間。一些流算法,如Java的流類,設計用于處理大型數據文件,而無需將其全部加載到內存中。Apache DataSketches項目在不占用所有內存的情況下為復雜的大數據統計數據生成近似答案。另一個好處是,減少內存的占用可以加快算法。有時,操作系統會開始使用虛擬內存將數據卸載到磁盤上。這可以防止崩潰,但會顯著降低應用程序的速度。
3.使用較低分辨率的圖像和視頻
使用較低分辨率的圖像和視頻可以通過多種方式獲得回報。首先,存儲這樣的圖像和視頻將會降低更多的成本。其次,任何數據遷移費用都會降低。第三,應用程序對用戶來說似乎更快捷。所有靜態圖像都應該從一開始就最小化。而最小化并不簡單,因為在某些時候視覺質量下降到足以讓用戶看到的程度。找到正確的權衡是一些程序員需要做出的設計決策。一些使用上傳圖像的應用程序還可以在收到圖像后創建更小的縮略圖和降低分辨率的版本。像ImageMagik這樣的工具包和像WebP這樣的格式就是為此目的而開發的。
4.轉儲不必要的數據
許多開發人員都在存儲大量信息以備將來需要。他們用無窮無盡的列填寫表格,然后從不刪除行。如果擁有硬件并且磁盤驅動器有足夠的空間,那么額外的數據不會花費任何費用。但是云計算對一切服務都收費。那么在將來真的需要所有這些數據嗎?用戶需要這么多細節嗎?轉儲一些舊數據可以節省存儲和過濾數據的費用。
5.限制磁盤存儲
在云實例上使用本地磁盤不僅面臨風險,而且成本高昂。本地磁盤空間通常設計得足夠快以保持操作系統高效運行。許多開發人員在具有1TB或更多TB存儲空間的個人計算機上創建代碼。云存儲很少如此便宜或容易獲得。云計算供應商通常根據數據的存儲規模計費,因此最好的方法是使用盡可能少的存儲空間。因此,開發人員需要考慮如何最大限度地減少應用程序創建的臨時文件,以及所需的系統庫和軟件包。
6.清理日志
日志文件非常適合在開發過程中識別問題和調試軟件。但是一旦代碼投入生產,就不需要保留所有代碼。所有額外信息都會阻塞本地磁盤或對象存儲。在設計日志系統時,將其配置為經常刪除日志。許多日志包(如Log4j)可以設置為保留最少數量的日志并定期刪除它們。
7.采用無服務器
無服務器架構計劃僅在其代碼運行時計費,這在負載間歇性時可以節省大量費用。即使是擁有持續不斷的用戶流的應用程序,其死區時間也比開發人員預期的要長。許多無服務器定價計劃致力提供精簡的編碼和非常快的性能,同時占用更少的內存。計費公式以毫秒為單位計算響應時間,并僅按處理器被占用的時間計費。作為開發人員,可以立即獲得反饋,因為開發人員可以直接跟蹤響應時間,并查看代碼更改對響應時間的影響。無服務器方法非常適合較小或更多實驗性項目,并且其費用通??梢缘椭撩吭聨酌婪帧H绻麘贸绦蛑皇桥紶栠\行某些功能,那么使用無服務器可能是有意義的。
8.歸檔舊數據
隨著數據越來越舊,訪問頻率也越來越低。可以通過設置應用程序將舊數據遷移到成本更低的存儲設備來預測這一點。一些云平臺對所謂的“冷存儲”收費要低得多,這可能需要數分鐘甚至數小時才能傳送數據。Wasabi或Backblaze等其他云平臺專門用于Amazon S3對象的存檔存儲,其收費遠低于主要云平臺。在某些情況下,他們甚至不收取數據流動費用。一旦數據不再處于高需求狀態,立即卸載數據可能會非常經濟高效。
9.簡化CSS布局
如果看過一些框架生成的HTML標簽,就會知道布局是多么的荒謬。它只是一直嵌套在DIV標簽中的DIV標簽,而生成和交付都需要支付費用。而網頁設計師表示,只需通過更明智地使用CSS創建更簡單的布局,就可以將帶寬費用削減30%。
10.建立靜態網站
像React這樣的一些框架需要大量的計算能力,尤其是當它們使用服務器端渲染等功能時。所有這些代碼都會增加每月的云計算賬單。一個相反的理念是創建一個靜態站點,由從緩存逐字提供的不變的HTML、CSS和JavaScript塊構建。使用內容交付網絡可以通過將緩存移近用戶來進一步加快交付速度。各種框架都包含這種靜態哲學。Jekyll、Hugo、Gridsome和Pelican只是一些工具,它們可以將所有內容打包成一組緊湊而不變的文件。仍然可以使用AJAX調用將個性化構建到頁面中,但是網站的大部分在服務器上產生的負載很小。
11.外化計算和存儲
隨著瀏覽器的功能變得越來越強大,一些框架使得將更多計算直接移動到客戶端變得更加簡單。出色的JavaScript或WebAssembly代碼可以將更多的負載推到用戶的機器上。一些開發人員正在將其云層簡化為一個數據庫,其中包含一些用于身份驗證的業務邏輯。而開發人員使用靜態HTML和帶有輸出JSON的嵌入式過程的PostgreSQL服務器端版本運行所有內容。瀏覽器還有更復雜的本地存儲信息選項,如HTML Web存儲標準和W3C索引數據庫API。它不再只是短字符串和Cookie。這些數據可以更快地獲得,因為它不會通過互聯網傳播,并且它讓用戶知道他們的數據沒有存儲在一個集中的、可破解的數據庫中。當數據可以免費存在于用戶的機器上時,為什么還要為數據存儲和泄露支付費用呢?
12.任命成本工程師
一些開發人員專門負責處理數據庫,而有些人喜歡用精心設計的前端來創造美好的印象?,F在云成本如此靈活,一些團隊正式任命“成本工程師”來管理代碼成本和效率。成本工程師的首要任務是讓應用程序代碼運行得更干凈、更快、更輕,從而更便宜。讓這個任務成為成本工程師工作的一部分,并傳達說明管理代碼成本作為開發團隊角色和責任一部分的重要性的信息。
原文鏈接:https://www.infoworld.com/article/3661809/12-programming-tricks-to-cut-your-cloud-bill.html