惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
V
Visual Studio Blog
The GitHub Blog
The GitHub Blog
Apple Machine Learning Research
Apple Machine Learning Research
J
Java Code Geeks
T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
人人都是产品经理
人人都是产品经理
H
Heimdal Security Blog
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
Cyberwarzone
Cyberwarzone
Google DeepMind News
Google DeepMind News
雷峰网
雷峰网
Hacker News: Ask HN
Hacker News: Ask HN
Webroot Blog
Webroot Blog
Microsoft Azure Blog
Microsoft Azure Blog
MyScale Blog
MyScale Blog
A
About on SuperTechFans
V2EX - 技术
V2EX - 技术
小众软件
小众软件
博客园 - Franky
博客园 - 司徒正美
P
Privacy International News Feed
爱范儿
爱范儿
U
Unit 42
博客园 - 叶小钗
The Hacker News
The Hacker News
C
Check Point Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Simon Willison's Weblog
Simon Willison's Weblog
N
News and Events Feed by Topic
D
Docker
T
Threatpost
MongoDB | Blog
MongoDB | Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
H
Help Net Security
L
LINUX DO - 最新话题
Security Latest
Security Latest
T
The Exploit Database - CXSecurity.com
S
SegmentFault 最新的问题
A
Arctic Wolf
Spread Privacy
Spread Privacy

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
We Cut $120,000 from Our Cloud Bill Without Sacrificing Reliability
Mhamad El Itawi · 2026-05-31 · via DEV Community

We were running a cloud-hosted platform on AWS EKS, with EC2 worker nodes managed by us, MongoDB Atlas for NoSQL workloads, AWS RDS for relational databases, and Amazon ElastiCache for Redis for caching and temporary data.

Over time, the infrastructure had grown the way most real systems grow: more services, more data, more backups, more images, more snapshots, and more “temporary” resources that were no longer temporary.

The platform worked, but the cloud bill was higher than it needed to be.

So we started cutting waste, improving the application, and resizing the infrastructure around how the system actually behaved.

The result: around $120,000 in annual savings, without sacrificing reliability.

The Problem Was Not One Big Thing

When we started reviewing the infrastructure, it was clear that there was no single expensive resource causing the entire problem.

The cost came from many places at once.

Some services were using more CPU and memory than they needed. Some microservices did not really need to be separate anymore. Some databases were oversized for their actual usage. Some storage had accumulated over time. Some backups and snapshots were kept longer than necessary. Some resources were simply unused.

That is usually how cloud costs grow.

Not because of one bad decision, but because of hundreds of small decisions that were reasonable at the time and never revisited later.

So instead of looking for one magic fix, we approached the problem from multiple angles: application code, architecture, databases, Kubernetes resources, storage, backups, caching, and non-production environments.

The Optimizations

1. Making the Application Use Fewer Resources

One of the most important parts of the optimization was improving the application itself.

It is easy to look at cloud cost as an infrastructure problem only, but inefficient code directly affects infrastructure cost. If the application uses too much CPU or memory, the platform needs more pods, larger nodes, bigger instances, and more capacity overall.

We reviewed critical parts of the codebase and focused on reducing CPU and memory usage.

Some of the improvements included:

  • Reducing unnecessary in-memory object creation
  • Switching selected workflows to asynchronous and event-driven processing
  • Optimizing loops and replacing inefficient algorithms
  • Reducing heavy image-processing operations
  • Improving background jobs
  • Avoiding repeated or unnecessary work

These changes reduced CPU and memory usage by around 30%.

That had a direct impact on our AWS EKS environment. Since the workloads became lighter, we improved pod density and reduced the amount of EC2 capacity needed to run the platform.

In other words, better code translated directly into a lower cloud bill.

2. Merging Microservices That Did Not Need to Be Separate

We also reviewed the microservices architecture.

Microservices are useful when they solve real problems: independent scaling, ownership, deployment flexibility, or fault isolation. But when services are too small, too tightly coupled, or always deployed together, they can create unnecessary overhead.

Each service adds cost in different ways. It needs CPU, memory, logging, monitoring, networking, deployments, configuration, and operational support.

After reviewing the system, we identified services that no longer needed to run independently. Some had low traffic. Some were tightly coupled. Others were always released together.

By merging selected microservices, we reduced the number of running containers, decreased inter-service communication overhead, simplified deployments, and reduced Kubernetes resource requests.

This helped make the platform easier to operate and cheaper to run.

3. Optimizing MongoDB Atlas

The platform used MongoDB Atlas for NoSQL workloads, so we reviewed how our clusters were configured and how the application interacted with them.

One of the changes we made was disabling unnecessary multi-write behavior where it was not required by the business use case. Before making the change, we validated the impact carefully to make sure reliability and data consistency would not be affected.

We also implemented autoscaling in MongoDB Atlas. Instead of sizing clusters permanently for peak demand, autoscaling allowed the database capacity to better follow real usage patterns.

This helped us reduce overprovisioning while still keeping the database layer ready for higher-traffic periods.

MongoDB Atlas was an important part of the optimization because database costs can grow quickly when clusters are oversized, write patterns are inefficient, or environments contain more data than they actually need.

4. Reducing Staging Data and Using Smaller Environments

Non-production environments are often ignored in cost reviews, but they can become surprisingly expensive.

Our staging environment had grown larger than it needed to be. It contained more data than required for testing and validation, and the infrastructure around it was closer to production-sized than necessary.

We reduced the amount of data in the staging database and resized the environment based on actual usage.

The goal was not to make staging useless or unrealistic. We still needed enough representative data to test properly. But we did not need to pay for production-like capacity all the time.

This helped reduce costs across database storage, compute, backups, and supporting infrastructure.

5. Reviewing AWS RDS

We also reviewed our AWS RDS relational databases.

Part of the work was upgrading databases to newer supported versions. This was important for security and maintainability, but it also helped with performance and resource efficiency.

Database upgrades can bring improvements in query planning, indexing behavior, memory usage, and general engine performance.

We also reviewed database sizing, backup configuration, retention periods, and actual usage patterns.

The idea was simple: RDS should be sized based on real workload needs, not old assumptions.

6. Cleaning Up the Resources Nobody Thinks About

A big part of the savings came from cleaning up resources that had quietly accumulated over time.

These were not exciting changes, but they mattered.

We cleaned up old container images in the registry. Every deployment creates images, and without proper retention, old images stay forever.

We reviewed and deleted unnecessary EC2 and database snapshots. Snapshots are important, but keeping every old snapshot forever is expensive and usually unnecessary.

We deleted unused EC2 instances, including forgotten instances that were created for old R&D work, temporary experiments, migrations, or one-off tasks and were never shut down afterward.

We removed unused cloud disks that were no longer attached to active resources.

We released static IPs that were allocated but no longer used.

We cleaned bucket storage by removing old documents, temporary files, duplicate files, exports, and artifacts that were no longer needed.

Individually, some of these items did not look huge. Together, they made a noticeable difference.

This was one of the biggest reminders from the whole process: cloud waste usually hides in boring places.

7. Fixing Amazon ElastiCache for Redis Memory Growth

Amazon ElastiCache for Redis was another area we reviewed.

It was used for caching, sessions, queues, and temporary data. But if temporary data does not have an expiration policy, it slowly becomes permanent data.

We introduced expiration policies for data that did not need to live forever.

This helped reduce memory usage, avoid stale data buildup, and reduce the pressure to use larger cache nodes.

The rule we followed was simple: if the data is temporary, it should have a lifetime.

8. Reviewing Backups and Retention Policies

Backups were another important part of the review.

We did not want to reduce cost by blindly deleting backups. That would be risky and irresponsible.

Instead, we reviewed backup frequency, retention periods, database backups, snapshots, and recovery requirements across production and non-production environments.

The goal was to keep the backups we actually needed and remove unnecessary long-term retention where it did not provide real value.

This helped reduce costs while keeping recovery requirements intact.

Cost optimization should never come at the expense of being able to recover from failure.

9. Using Reserved Instances for Predictable Workloads

After reducing waste and improving utilization, we had a much clearer picture of our real baseline usage.

That made it easier to decide where reserved instances made sense.

Reserved capacity is useful when workloads are predictable, but it should not be the first step. If you reserve capacity before optimizing, you may simply commit to paying for waste.

We first reduced unnecessary usage, then used reserved instances for the workloads that were consistently running.

That helped us reduce long-term compute costs while keeping flexibility for variable workloads.

10. Moving More Static Content to CDN

We also improved how static content was delivered.

Instead of serving static files directly from backend workloads, we relied more on CDN delivery.

This reduced load on the application, improved response times for users, and helped reduce backend compute usage.

It was one of those changes that improved both performance and cost efficiency at the same time.

What Actually Made the Difference

The biggest savings did not come from one magic change.

They came from doing many practical things well:

  • Making the application use around 30% less CPU and memory
  • Merging services that did not need to be separate
  • Optimizing MongoDB Atlas usage and autoscaling
  • Reviewing and right-sizing AWS RDS databases
  • Reducing staging data and using smaller non-production environments
  • Cleaning old container images, snapshots, disks, buckets, static IPs, and forgotten EC2 instances from old R&D work or temporary tasks
  • Adding expiration policies in Amazon ElastiCache for Redis
  • Reviewing backup and retention policies
  • Using reserved instances for predictable workloads
  • Moving more static content to CDN

None of these changes are glamorous on their own.

But together, they made the platform leaner, easier to operate, and significantly cheaper to run.

The result was around $120,000 in annual cloud savings, without sacrificing reliability.

For me, the biggest takeaway was this: cloud cost optimization is not only about infrastructure. It is about engineering discipline across the full system.

Architecture matters. Code efficiency matters. Database sizing matters. Cleanup habits matter. Backup policies matter. Non-production environments matter.

And when all of those things are reviewed together, the impact can be much bigger than expected.

🌐 For more engineering stories and practical lessons, follow me on LinkedIn or Instagram.