译者|李锐审稿人|孙淑娟降低云计算成本需要整个团队的努力,包括开发人员。以下是开发人员在云中运行更便宜的软件的一些技巧。没有什么比看到应用程序像病毒一样传播更能振奋开发团队的精神了。这是一种美妙的感觉,至少在每月的云账单到来之前是这样。一些开发人员认为管理计算成本是DevOps团队的责任。程序员编写软件并发布,让其他人担心成本。没有比这更离谱的了。聪明的开发人员知道他们开发的应用程序对企业的收入有很大的影响。如果编写大量代码导致应用程序运行缓慢,则需要更多的云计算资源才能运行。选择更好的算法和编写更紧凑的代码不仅可以提高速度,而且编写良好的代码运行成本更低。开发人员并不总能看到这种联系。在自己的机器上写代码很容易,买机器的时候花更多的钱买更多的内存和额外的磁盘空间。如果您有2TB的磁盘空间,您可能不会注意到您开发的代码占用了多少空间。如果一个新算法运行两倍的时间,谁会注意到多出来的几毫秒?但几乎可以肯定的是,计算量翻倍将导致更大的云计算成本。现代云平台擅长将资源利用转化为单一支出。优秀的云开发人员明白,他们有能力在编写代码时做出更明智的决策。它可以像运行分析器一样简单来识别问题,或者避免不存储必要的数据以减少内存占用。开发人员可以通过以下12种方式简化编程,使应用程序运行更精简、更快、成本更低。1.编写更快的代码大多数开发人员不会花太多时间优化他们的代码。如果一个应用程序在他们的笔记本电脑上运行得很快,他们不会注意到它是否随着时间的推移减慢了20%、30%甚至300%。该程序仍在响应并立即运行。但是当它在服务器上发生数百万次时,它们就会加起来。仔细分析可以标记缓慢的部分。覆盖它们可以减少应用程序需要的实例数。2.减少内存占用内存使用量是云实例定价中的一个重要参数。在许多情况下,内存使用量加倍也会使成本加倍。开发人员可以通过避免将数据保存在内存中来减少内存占用。一些流算法,如Java的流类,旨在处理大型数据文件,而无需将它们全部加载到内存中。ApacheDataSketches项目在不占用所有内存的情况下生成复杂大数据统计的近似答案。另一个好处是减少内存占用可以加快算法速度。有时,操作系统会开始使用虚拟内存将数据卸载到磁盘。这可以防止崩溃,但会显着降低应用程序的速度。3.使用较低分辨率的图像和视频使用较低分辨率的图像和视频可以通过多种方式获得回报。首先,存储此类图像和视频将进一步降低成本。其次,降低了任何数据迁移费用。第三,应用程序对用户的显示速度更快。从一开始就应该最小化所有静态图像。并且最小化并不简单,因为在某些时候视觉质量下降到足以让用户看到。找到正确的权衡是一些程序员需要做出的设计决定。一些使用上传图像的应用程序还可以在收到图像后创建更小的缩略图和分辨率降低的版本。为此开发了像ImageMagik这样的工具包和像WebP这样的格式。4.转储不必要的数据许多开发人员正在存储大量信息以备将来之需。他们用无穷无尽的列填充表格,然后从不删除行。如果您拥有硬件并且磁盘驱动器有足够的空间,那么额外的数据不会花费您任何费用。但云计算对所有服务收费。那么未来真的需要所有这些数据吗?用户需要这么多细节吗?转储一些旧数据可以节省存储和过滤数据的成本。5.限制磁盘存储在云实例上使用本地磁盘是有风险且昂贵的。本地磁盘空间通常设计得足够快,以保持操作系统高效运行。许多开发人员在具有1TB或更多存储空间的个人计算机上创建代码。云存储很少如此便宜或容易获得。云计算提供商通常根据存储的数据量计费,因此最好的方法是使用尽可能少的存储空间。因此,开发人员需要考虑如何尽量减少应用程序创建的临时文件,以及所需的系统库和包。6.清理日志日志文件非常适合在开发过程中识别问题和调试软件。但是一旦投入生产,您就不需要保留所有代码。所有额外的信息都会阻塞本地磁盘或对象存储。在设计日志系统时,将其配置为频繁删除日志。许多日志记录包(如Log4j)可以设置为保留最少数量的日志并定期删除它们。7.采用serverlessServerless架构方案只在其代码运行时才计费,在负载间歇性时可以节省大量资金。即使是用户流量持续不断的应用程序,其死机时间也比开发人员预期的要长。许多无服务器定价计划旨在提供精简编码和非常快的性能,同时使用更少的内存。计费公式以毫秒为单位计算响应时间,并且只对处理器占用的时间计费。作为开发人员,您会立即得到反馈,因为您可以直接跟踪响应时间并查看代码更改如何影响响??应时间。无服务器方法非常适合更小或更实验性的项目,而且每月的费用通常低至几美分。如果应用程序只是偶尔运行某些功能,那么使用无服务器可能是有意义的。8.归档旧数据随着数据变旧,访问频率也越来越低。这可以通过将应用程序设置为将旧数据迁移到成本较低的存储设备来预测。一些云平台对所谓的“冷存储”收费要低得多,“冷存储”可能需要几分钟甚至几小时才能传输数据。其他云平台,如Wasabi或Backblaze,专用于AmazonS3对象的归档存储,收费远低于主要云平台。在某些情况下,他们甚至不对数据流量收费。一旦数据需求不再高,就卸载数据可能非常划算。9.简化CSS布局如果你看过框架生成的一些HTML标签,你就会知道这种布局有多么可笑。它只是一个一直嵌套在DIV标签中的DIV标签,而且生成和传送都需要付费。网页设计师表示,只需更明智地使用CSS来创建更简单的布局,他们就可以将带宽成本降低30%。10.构建静态网站React等一些框架需要大量的计算能力,尤其是当它们使用服务器端渲染等功能时。所有这些代码都会添加到您每月的云计算账单中。一种相反的理念是创建一个静态站点,该站点由缓存中逐字提供的不变的HTML、CSS和JavaScript块构建。使用内容分发网络可以通过将缓存移近用户来进一步加快分发速度。各种框架都接受这种静态哲学。Jekyll、Hugo、Gridsome和Pelican只是一些工具,它们可以将所有内容打包到一组紧凑且不可变的文件中。仍然可以使用AJAX调用将个性化构建到页面中,但是站点的大部分在服务器上产生的负载非常小。11.外部化计算和存储随着浏览器变得越来越强大,一些框架使得将更多计算直接转移到客户端变得更加容易。出色的JavaScript或WebAssembly代码可以将更多负载推到用户的机器上。一些开发人员正在将他们的云层减少到一个数据库,其中包含一些用于身份验证的业务逻辑。开发人员使用静态HTML和带有输出JSON的嵌入式过程的PostgreSQL服务器端版本来运行所有内容。浏览器还有更复杂的选项用于在本地存储信息,例如HTMLWeb存储标准和W3C索引数据库API。不再只是短字符串和cookie。数据可用得更快,因为它不通过互联网传输,而且它让用户知道他们的数据没有存储在一个集中的、可破解的数据库中。当数据可以免费存在于用户的机器上时,为什么还要为数据存储和披露付费?12.任命一名成本工程师。一些开发人员专门与数据库打交道,而另一些开发人员则喜欢通过精心设计的前端给人留下良好的印象。云成本现在非常灵活,以至于一些团队正式任命“成本工程师”来管理代码成本和效率。成本工程师的首要任务是使应用程序代码运行得更干净、更快、更轻便,从而降低成本。使这项任务成为成本工程师工作的一部分,并传达管理代码成本作为开发团队角色和职责的一部分的重要性的信息。原文链接:https://www.infoworld.com/article/3661809/12-programming-tricks-to-cut-your-cloud-bill.html
