云,哪里贵了?

cJSON库用完后内存泄漏?手把手教你正确使用cJSON_Delete和free释放资源 本文深入解析cJSON库的内存管理机制,重点解决使用后的内存泄漏问题。通过详细讲解cJSON_Delete和free的正确使用方法,帮助开发者在处理JSON数据时有效释放资源,避免内存泄漏。特别适用于嵌入式系统和资源受限环境,提升开发效率和系统稳定性。 阅读详情

公司业务高歌猛进时,云成本被掩埋在“数字繁荣”之中,但一旦红利退却,云超高的成本就会让老板们觉得如鲠在喉。这并不是一朝一夕的问题。

这样的大环境下,企业的侧重点变成了,如何在不影响应用性能、尽量保持基础设施不变的情况下,削减云开支。

在今天的文章中,会为诸位带来一个“对基础设施做出简单改变,并将成本降低 30%的案例,并探究云成本到底哪里贵了。

一、一个操作,6万美元没了

云计算带来的体验可以说是前所未有:几秒钟内生成一个服务器,后端配上无服务器,前端配上存储桶,就可以托管起整个网站,直到调用数量达到限制之前,该过程甚至都可以不花一分钱。

但是,流量开始增加后,痛苦就来了,就如同“走钢丝”一般,必须变得小心翼翼起来,因为免费只是暂时的,一个操作不当,糟糕的事情就奔你而来。 

网络上有很多关于公司或某开发人员一夜之间云成本账户银行卡被通知“刷爆”的恐怖故事,可谓触目惊心:

上述造成的云账单,有的是因为一个调用了 lambda 函数而导致了 4.5k 美元的费用,有的则是因为按照某云的说明文档做了一个测试任务,结果3个月后收到了6万美元的邮件账单。

图片

图片

这些并非个例,但因为高昂地上云的成本就简单粗暴下云,却又是另外一番动人心魄的故事,这里不再赘述。

二、云,哪里跑“贵”了?

问题就在于,既想要云端的高效便捷、弹性足够、便于维护,又不想云账单一日千里地不可控,有没有一些可参考的方法和实践?

我们不妨先看一下这张账单:

图片

图片

21,433.21 欧元。这是笔者公司在 2022 年 10 月为临时环境和生产环境支付的总费用。细分来看,K8s集群、云存储赫然在列——

  • Kubernetes 集群13,743.83 欧元(折扣2,333.84欧元)
  • 云存储(存储桶)6,124.75 欧元
  • SQL 数据库3,237.22 欧元
  • 还有其他较小的成本,本文中忽略不计。

虽然成本并未失控,但 Kubernetes 集群和存储让我们付出了昂贵的代价。

三、K8s集群哪里贵了?

接下来,就是分开看这两块的成本产生过程。首先是 Kubernetes 集群本身在生产环境上的成本细分。通过下图就能看出三大罪魁祸首:

计算引擎中的N1预定义实例Core/RAM、Spot可抢占实例、区域间网络出口产生的费用最高。

图片

图片

谷歌云计费页面的屏幕截图显示了我们的临时和生产环境的价格

Tips:对于那些不熟悉的人来说,这些标签可能需要解释一下:

  • N1 预定义实例 core/ram 是我们 Kubernetes 集群日常使用的节点。N1 是节点类型。
  • Spot 可抢占实例 core/ram 是我们生成的用于运行异步任务的节点。可抢占意味着我们为这些节点支付更少的费用,但我们无法保证可用性。
  • 区域间网络出口(Network Egress Inter Zone)是通过网络在可用区域(AZ)之间移动的数据。假设有一个托管在区域 AZ 中的节点中的 API,如果该 API 向 AZ B 中的节点中的另一个 API 进行查询,将为从 AZ B 到 AZ A 的数据付费。

问题一:没有管理好Kubernetes的预期

我们接着逐个攻破。从成本明细中最高的开始:N1 预定义实例core/RAM。

问题的根源就在于我们有没有告诉Kubernetes该如何扩展新节点。

N1 预定义实例Core/RAM方面,当前使用的是n1-standard-8节点,它们根据使用情况自动缩放。在进行修正之前,了解 Kubernetes 如何扩展新节点非常有必要。

当定义 Pod 时,需要告诉 Kubernetes 一个信息:Pod 需要多少 RAM 和 CPU 才能正常工作;这就是 Kubernetes 所说的 Request。

假设我的 API 的 pod A 需要 400mo RAM 和 0.2 vCPU 才能正常工作,而 Kubernetes 节点容量为 30 GB RAM 和 8 个 vCPU。可以在该节点中容纳 40 个 Pod,因为 8 个 vCPU 除以 0.2 vCPU 等于 40 个 Pod,而 30,000mo 除以 400mo 等于 75 个 Pod。

所以,于K8s集群而言,明确预期的和未使用的资源,是一个技术活儿。

表示请求的 CPU 与节点实际容量的架构

表示请求的 CPU 与节点实际容量的架构

问题二:配置文件中的魔鬼细节:CPU和内存值

如果在 8 个 vCPU 节点中有 40 个 pod 请求 0.2 vCPU,Kubernetes 会认为该节点已满并启动一个新节点,即使这些 pod 仅使用 4 个 vCPU。

一个合理的配置,就能大大减少因节点数量产生的付费。同时,节点根据请求的资源进行扩展,如何才能避免过多的浪费扩展中的资源浪费呢?

这就需要深入研究 Kubernetes yaml 配置文件,看看可以更改哪些内容。

我们做的第一件事是将 pod 的 yaml 定义与 Grafana 中的实际资源使用情况进行比较。我们可以使用 Grafana 轻松查看请求与实际使用情况的比较,如下所示。

图片

图片

Grafana 在运行一个 pod 时对 1 个 API 的 RAM 请求/使用情况(在撰写本文时拍摄的屏幕截图,因此在配置更新之后)。

在此图中,我们可以看到 RAM 的平均使用率为 0.1go,而请求的 RAM 为 0.4go 。

如果我们将其与此 API 的 YAML 配置进行比较,我们可以发现类似的内容。

来自部署.yaml 文件的 IAC 存储库中的更改的屏幕截图

来自部署.yaml 文件的 IAC 存储库中的更改的屏幕截图

我们显着减少了请求的内存和 CPU 值,以更接近 API 使用的实际情况 —并且我们仍然保持保守;我们可以进一步减少它。我们对所有服务都执行了此流程。

问题3:默认为单个服务运行了太多的 Pod

例如,对于此部署,我们至少运行三个 Pod,这意味着即使 API 在夜间几乎没有收到任何调用,它仍然运行3个 Pod。

因此,我们检查了每项服务,并将 pod 副本的最小数量减少到一个(在安全的情况下)。

图片

图片

通过这几项更改,搞定了 N1 预定义实例Core/RAM的成本问题,从4,235.43 欧元增加到 1,973.28 欧元。

问题4:区域间网络出口的数据交互费用

这方面是非常棘手的,可用区域之间的网络的数据交互会产生很大的云费用

我们有四十多个微服务,但好处是它们做得很好,而且它们之间几乎没有直接通信,但我们在所有这些服务前面有一个GraphQL 网关。这个网关接到很多调用。

笔者也采取了两种方式解决了这个问题: 

第一个是使用 Flow Logs追踪哪些调用对于返回的数据最大。

第二种方法,也是我们最有信心的方法,是检查哪个 API 收到的调用最多,以及该 API 中的哪个端点非常适合缓存。我们已经使用 Redis 作为发布/订阅解决方案,因此我们也可以轻松地将它用作缓存。

我们决定先做缓存,因为我们无论如何都需要它,而且一切都已经设置好了。但这仍然是一个错误——因为我们只是将问题转移到缓存系统中,而不知道数据是否太大是因为代码问题还是因为调用次数过多。

使用Kiali,我们可以看到哪个 API 收到的调用最多。

图片

图片

根据此信息和应用程序的功能方面,我们决定应缓存哪个端点。这样,GraphQL 网关将实现缓存,并且不必对服务进行 HTTP 调用来获取数据,从而降低了 Egress 成本。

仅通过实施第一个解决方案,我们就成功地将出口成本从 2.712,34 欧元降低到 1,095.19 欧元。

遗憾的是,我们尚未实现第二种解决方案来追踪传输大量数据的剩余 HTTP 调用。

四、云存储哪里贵了?

没错,云存储的成本,大部分还是与容量本身有关,而并非存储桶中传输的数据产生的成本。解决的方法自然就很简单:删。

笔者公司的应用程序接收来自用户的视频,我们对其进行标准化并存储原始版本和标准化版本。然后,客户会对这些视频进行编辑和验证(或拒绝)。

此前,我们从未删除过任何内容。我们多年来一直存储用户未使用的视频,并拥有超过 100 TB 的数据。因此,根据我们的法律和产品团队的意见,我们设置了一个 CRON 作业,用于查询数据库的动态参数(例如“视频拒绝”)并存档这些文件。

为了防止出现任何不可恢复的错误,我们首先将文件的存储类别在 GCP 中切换为“归档”(在 S3 中为 Glacier),并使用生命周期规则在六个月后将其完全删除。

2022 年 10 月生产环境存储成本

2023年9月生产环境存储成本

2023年9月生产环境存储成本

这仍然是一个持续的过程,因为我们必须谨慎决定删除哪些内容,但我们成功地将生产中的存储成本从 4,754.85 欧元降低到 3,029.93 欧元。

五、临时环境的成本也很惊人

这里,还有一个细节不应忽视,就是临时环境所产生的费用也很疯狂。2022 年 10 月,我们为临时环境支付了 4,059.25 欧元,接近生产环境的1/4。

生产环境和临时环境之间的成本明细对比

生产环境和临时环境之间的成本明细对比

临时环境下的成本明细

临时环境下的成本明细

我们采取了四项简单的措施来降低成本:

我们在非办公时间关闭了环境。遗憾的是,由于我们是一支国际团队,工作日晚上的时间不多。

我们缩小了 Kubernetes 集群规模,将所有部署的最小 pod 设置为 1,并防止自动扩展超过 1 个 pod——除了一些关键服务。

我们向云存储桶添加了生命周期规则,以删除六个月或更早的所有内容。我们清理了数据库,并删除了以前开发人员或 QA 中不再使用的所有数据。

图片

图片

通过这四个简单的步骤,我们将临时环境的月开销降低了 2500多欧元!

六、进一步削减云成本的思路

其他削减云成本的办法吗?

当然,我们已经对计划如何进一步降低成本有了一些想法,更多的是延续上文的内容。

(1)微调 Kubernetes 请求,以更加精确地了解我们的微服务需要运行的内容;

(2)按照我们最初的计划追踪剩余的出口成本

(3)继续在我们的归档 cron 中实施新规则,从存储桶中删除不必要的文件;

(4)将我们的视频处理从 CPU 切换到 GPU(笔者实测速度更快且成本更低);

(5)清理生产中的 SQL 数据库,存储可存档的 TB 级事件数据。

如果我们比较 2022 年 10 月和 2023 年 10 月,我们每个月节省了 6,369.75 欧元,几乎节省了 30%,我相信我们可以节省更多。

七、写在最后

追踪云成本并优化是一件非常非常有挑战的、且富有成就感的事情。于与云程师、架构师而言,即便支付云账单的账户是公司,而不是自己。

但说起来容易,做起来难 。在个人项目上使用云的免费层和在每天有数百万次调用的生产环境中使用云是两种完全不同的野兽。

本文带大家从头开始分析了云成本过高的几个问题:生产环境下的K8s集群、云存储的问题、以及临时环境下的不必要的开支,并给出了解决思路和计划。

记住:从一开始就考虑应用程序的生命周期,并采取适当的保护措施,以防止您的云成本过高,而不是一味按照文档配置部署,否则,迎接你的只能是高昂的收费通知。

Sciter教程_00_创建HelloWorld工程 本教程记录Sciter工程的创建和编译运行的过程。 阅读详情

相关推荐

Ubuntu 20.04 上 Geant4 安装避坑全记录:从源码编译到 B1 示例跑通(含数据包加速下载)

本文详细记录了在Ubuntu 20.04系统上从源码编译安装Geant4的全过程,包括环境准备、依赖安装、CMake参数解析、多线程编译优化以及数据包加速下载等关键步骤。特别针对B1示例的测试与验证提供了完整流程,帮助科研人员和学生避开常见安装陷阱,提升粒子物理模拟效率。

weixin_31220401的博客 313

“上云”到底有多贵?

去年,新冠疫情全面爆发许多个人创业者与中小型企业都开始重新审视入局互联网自身的抗风险能力此时,云可以帮助企业获得更好的敏捷性京东云“开年嗨购季”优惠空前,诚意满满助力企业打造互联网名片即...

京东科技开发者 830

晟矽微MC32F7361定时器的使用案例说明

110所以TIMER0所用的频率是FCPU的1/64,也就是8/64MHZ. 为1/8MHZ。//io口下拉电阻 1:enable 0:disablea。//io口上拉电阻 1:enable 0:disable。//io口下拉电阻 1:enable 0:disable。//io口上拉电阻 1:enable 0:disable。//io口下拉电阻 1:enable 0:disable。//io口上拉电阻 1:enable 0:disable。

liyanfei123456的博客 1134

持续升温的云办公,越来越贵了

  云上办公讯:自从云办公市场收到关注,经历了持续升温的2020年,云办公市场的涨幅,用坐火箭形容都毫不夸张。   云办公被市场普遍看好是上涨的原因之一,而这其中,又因为享受到了高增长、高估值的双重红利,得以让云办公企业尤为引人注目。   在国外,云办公模式的开创者Salesforce市值已经超过2000 亿美元,在细分领域的DocusIGn,wilio,Workday等企业,都在2020年估值大涨。证明了云办公是兼具长期稳定性,成长性的优质赛道。   以上快速增长的情况,虽然部分是疫情带来.

qq_43075518的博客 161

IsaacGym四足机器人sim to real全过程详细解析(walk these ways方法)

本文使用强化学习的方法运行到Aliengo机器人上完成从训练到部署的全过程。该方法使用的是GO1机器人提供了完整的sim to real代码和遥控器控制代码,所以我们只需要重新训练和部署健康就可以使用在Aliengo上。该方法使用lcm进行通讯首先程序通过UDP和机器人控制板进行通讯获取机器人状态并下达指令。然后又通过lcm进行机器人状态信息的发布和模型命令的获取。

weixin_44061195的博客 2万+

AI Agent + 大数据 + RAG:电商用户行为分析的低成本落地

本文探讨了AIAgent与大数据技术在电商用户行为分析中的应用。通过构建"数据采集-实时分析-智能决策"的全自治链路,解决了传统大数据分析的三大痛点:人工建模周期长、实时性不足和决策闭环断裂。系统采用Flink+Spark处理实时数据,结合基于DeepSeek-V3.1的AIAgent实现智能分析,并通过飞书RAG模块动态获取业务知识。落地效果显示,分析响应时间从2-3天缩短至30秒,推荐转化率提升134%,验证了该方案在提升电商数据决策效率方面的显著价值。

想~ai抽 1626

存储那么贵,何不白嫖飞书云文件空间

用户前端后端飞书APIloop[逐片上传]选择文件(200MB)切片(每片5MB)初始化分片上传申请upload_id返回upload_id上传分片(seq=1,2,3...)上传分片到云存储完成上传合并分片返回file_token上传成功用户前端后端飞书API。打开后台一看,500G 的硬盘塞得满满当当,全是这两年积累的项目文档、设计稿、测试数据。:用户上传一个 300MB 文件,传到一半断网了,过了 8 天再来续传,结果报错"分片已过期"。,原因很简单:飞书的免费空间有限,存历史版本太浪费了。

A1234543211232的博客 1105

Avellaneda & Stoikov模型实战解析:如何动态调整做市策略参数

本文深入解析Avellaneda & Stoikov模型在动态调整做市策略参数中的应用,重点探讨库存状态、剩余时间、风险系数和订单深度等核心参数的实战技巧。通过加密货币市场的实际案例,展示如何根据市场波动和流动性动态调整参数,提升做市策略的盈利能力和风险控制水平。

weixin_29070861的博客 203

别只问云PC贵不贵,制造企业更该算清这三笔账

邦彦云PC POC需要验证的五项结果制造企业判断邦彦云PC是否值得投入,不能只看一次采购价格,也不能套用统一的节省比例或回收周期。更可靠的方式,是以企业现有成本和工作流程为基线,看风险是否得到更好控制、重复工作是否减少、原有设备和工作方式是否能够被重新组织。最终是否适合,仍需回到真实岗位、真实软件、真实网络、真实外设、真实流程和真实成本,通过POC和项目评估作出判断。欢迎了解预约!

By688132的博客 150

Claude Code 学习笔记之一:理解 Agentic Loop 与内置工具

本文介绍了Claude Code这一终端智能助手的工作原理与使用方式。作者从ABAP开发经验出发,指出学习Claude Code的高级用法具有长期价值。文章详细解析了Claude Code的Agentic Loop机制:通过大语言模型进行推理,借助各类工具执行任务,并循环收集上下文、执行操作、验证结果三个步骤。系统阐述了Claude Code支持的五大类工具及其扩展方式,说明了其访问本地资源的范围和自治处理能力,同时介绍了权限模式等安全机制。最后提供了从小任务开始、充分探索、及时引导、使用CLAUDE.md

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 547

NVIDIA Isaac Sim 入门教程(二)

Omniverse Isaac Sim 的工作空间非常容易自定义。调整用户界面的大小、停靠、取消停靠、添加和移除面板都非常容易。进入顶部菜单栏,单击下拉菜单最下方的窗口 > 视口 > 视口 2(现在工作区中应该会出现一个名为 "视口 2 "的新视口。如果您想创建更多的视口,请按照相机检查器扩展进行操作。单击并拖动视口 2 的顶部标题以激活停靠部件。拖放到原始视口的右侧,将两个视口并排放置。单击并向左拖动视口 2 的左侧,使视口大小相等。

机器人控制与仿真应用 6547
上一篇: 如何用ChatGPT分析恶意软件?
下一篇: 每个开发人员都想使用的编程语言
老贾的AI世界
博客等级 码龄7年 3335粉丝 254原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老贾的AI世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值