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