<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rakesh Tanwar</title>
    <description>The latest articles on DEV Community by Rakesh Tanwar (@rakesh_tanwar).</description>
    <link>https://dev.to/rakesh_tanwar</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3673541%2F062ef0b7-eb41-4064-a5bf-a09343f6c200.png</url>
      <title>DEV Community: Rakesh Tanwar</title>
      <link>https://dev.to/rakesh_tanwar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rakesh_tanwar"/>
    <language>en</language>
    <item>
      <title>AWS Auto Scaling Alternatives for Growing SaaS Applications</title>
      <dc:creator>Rakesh Tanwar</dc:creator>
      <pubDate>Mon, 21 Sep 2026 11:17:15 +0000</pubDate>
      <link>https://dev.to/rakesh_tanwar/aws-auto-scaling-alternatives-for-growing-saas-applications-4clm</link>
      <guid>https://dev.to/rakesh_tanwar/aws-auto-scaling-alternatives-for-growing-saas-applications-4clm</guid>
      <description>&lt;p&gt;&lt;strong&gt;Growing SaaS does not need growing operational chaos&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;A SaaS application usually scales in uneven steps. Marketing launches, enterprise onboarding, seasonal traffic, batch windows, and background jobs all create different demand curves. AWS Auto Scaling is a strong answer, but it is not the only one. Azure Virtual Machine Scale Sets, Google Managed Instance Groups, Kubernetes autoscaling, platform specific scaling services, and regional cloud autoscaling can all support a growing product. I choose based on how much control the team can operate safely. &lt;/p&gt;

&lt;p&gt;I often recommend starting with &lt;strong&gt;&lt;a href="https://acecloud.ai/cloud/compute/autoscaling/" rel="noopener noreferrer"&gt;autoscaling for cloud compute&lt;/a&gt;&lt;/strong&gt; rather than an elaborate scaling system. The application should first expose useful metrics and have a repeatable image. Autoscaling should amplify a stable architecture, not hide one that nobody understands. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Azure VM Scale Sets are strong for Microsoft aligned SaaS&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Azure lets teams scale VM groups through metrics, schedules, and predictive approaches, while upgrade policies provide control over how changes reach the fleet. I like this for SaaS products sold into Microsoft centered enterprises or built on Windows and Azure services. Application Insights and Azure Monitor can provide useful scaling signals beyond raw CPU. The main risk is choosing too many signals before the team understands which metric actually predicts user demand. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google Managed Instance Groups are excellent for stateless tiers&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Google Managed Instance Groups combine instance templates, autoscaling, autohealing, and rolling updates. I like them for web, API, and worker tiers where servers should be replaceable. Google health checks can verify the application response rather than only VM life. That helps prevent a common failure where autoscaling keeps adding technically healthy but functionally broken instances. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kubernetes can be the alternative when the product is already containerized&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;For teams that already run Kubernetes, pod autoscaling plus cluster autoscaling can replace VM centric scaling for many services. I would not introduce Kubernetes only to get autoscaling. It adds its own operational model. But where containers are already the deployment unit, scaling at the pod and node layer can respond more precisely to workload demand. The database tier still needs separate protection because adding application replicas can suddenly multiply connections and load. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A regional autoscaling service can be simpler&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;AceCloud autoscaling supports dynamic horizontal scaling, custom policies, rapid provisioning, load balancer integration, and monitoring. It also sits next to &lt;strong&gt;&lt;a href="https://acecloud.ai/cloud/compute/standard-instance/" rel="noopener noreferrer"&gt;standard compute instances&lt;/a&gt;&lt;/strong&gt;, CPU intensive, RAM intensive, and Spot profiles, which can make scaling decisions easier for an India focused team. I value the ability to discuss the workload with support engineers because growth problems are rarely solved by a threshold alone. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One more test I consider essential&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I also place scaling tests in the release process. A new software version can change memory use, startup time, connection count, and CPU behavior enough to make old thresholds unsafe. After a major release I replay representative traffic and verify that scale out happens before latency degrades, while scale in does not remove capacity too aggressively. I protect databases and third party APIs with connection pools, queues, and hard ceilings. Autoscaling works when it follows demand without transferring instability downstream, so I treat scaling policy as production code. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A final operational check I would add&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I test the cold start path because scaling speed depends on more than the cloud API. Image size, boot scripts, package downloads, security agents, service discovery, cache warm up, and health check grace periods can turn a fast VM launch into a slow application launch. I optimize those steps before lowering scaling thresholds. A fleet that becomes healthy in one minute needs a different policy from one that needs ten minutes. The provider matters, but the software startup path often determines whether autoscaling feels responsive during a real traffic spike. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One last factor I would validate&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I also verify scale in safety. Removing capacity is often riskier than adding it because active requests, background work, sessions, or long connections can be terminated at the wrong moment. I use connection draining, termination hooks, protected instances where available, and enough grace time for work to finish. I then test the policy during uneven traffic so one noisy metric does not trigger repeated expansion and contraction. A stable autoscaling system should reduce capacity confidently without turning ordinary demand changes into user visible errors. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The SaaS metrics I actually scale on&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;CPU is useful, but I also watch request rate, p95 latency, queue depth, active sessions, worker backlog, error rate, and database saturation. I use minimum capacity to protect baseline availability and maximum limits to protect the database and the bill. I test cooldown periods so the system does not oscillate. I rehearse a scale event before a launch. My preferred AWS Auto Scaling alternative is the one that makes these controls visible and understandable to the team. Growing SaaS applications need elasticity, but they need predictable behavior even more. A scaling system should reduce pager noise and cost, not create a second source of instability. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>AWS C-Series Alternatives CPU-Optimized Cloud VMs Compared</title>
      <dc:creator>Rakesh Tanwar</dc:creator>
      <pubDate>Mon, 21 Sep 2026 09:19:16 +0000</pubDate>
      <link>https://dev.to/rakesh_tanwar/aws-c-series-alternatives-cpu-optimized-cloud-vms-compared-42eh</link>
      <guid>https://dev.to/rakesh_tanwar/aws-c-series-alternatives-cpu-optimized-cloud-vms-compared-42eh</guid>
      <description>&lt;p&gt;&lt;strong&gt;The C family sets a useful benchmark&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;AWS C family instances are an easy reference for CPU heavy workloads because the intent is clear. They give more processor relative to memory and are designed for compute bound applications. I use them as a benchmark, but I do not treat the C label as a moat. Azure F series, Google C series, Oracle compute shapes, dedicated CPU plans from developer clouds, and &lt;strong&gt;&lt;a href="https://acecloud.ai/cloud/compute/cpu-intensive/" rel="noopener noreferrer"&gt;AceCloud CPU-intensive instances&lt;/a&gt;&lt;/strong&gt; can all be credible alternatives when the surrounding operational model fits the application better.&lt;/p&gt;

&lt;p&gt;The first thing I compare is not hourly cost. I compare how much useful work one instance completes during a sustained run. A transcoder, build runner, simulation, indexer, or API gateway can expose processor differences that a simple vCPU count hides. Newer CPU generations, clock behavior, vector instructions, memory bandwidth, and storage wait all affect the result.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Azure F series is the obvious hyperscale alternative&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Azure F family VMs are designed for high CPU performance with a relatively low memory footprint. I like them for organizations that already use Azure governance, networking, and identity. They can be a very practical replacement for C family workloads when the software is portable and the operations team is stronger on Azure. I still benchmark the exact regional SKU because the name F series spans generations and not every market receives new hardware at the same time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google C series rewards cloud native fleets&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Google Compute Engine C series machines are built for high performance workloads such as web serving, databases, game servers, analytics, media processing, and CPU based machine learning. I find them especially attractive when managed instance groups, GKE, or Google data services are already part of the platform. Google also gives useful Spot economics for fault tolerant fleets. The design advantage appears when the application can treat instances as disposable and recover work cleanly. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regional and simpler providers can win on economics&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;For many businesses, the important alternative is not another hyperscaler. It is a platform that makes compute easier to buy and operate. Dedicated CPU offerings from Vultr or Akamai can be useful for predictable workloads. AceCloud is relevant for India focused teams because the compute profile is explicit and local pricing is visible. Its public &lt;strong&gt;&lt;a href="https://acecloud.ai/pricing/linux/inr/noida/cpu-intensive/c3a/" rel="noopener noreferrer"&gt;CPU-intensive pricing&lt;/a&gt;&lt;/strong&gt; makes it possible to see hourly and longer term pricing for the CPU intensive family without first building a large cloud cost model. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I test beyond raw CPU&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I test disk and network behavior because compute intensive jobs still need data. Media transcoding can stall on storage. Search indexing can become IOPS bound. Build systems can spend surprising time downloading dependencies. Financial models can need large data sets moved between nodes. I also test provisioning speed, image consistency, APIs, quota management, autoscaling, and support. If it takes hours to add capacity during a deadline, theoretical CPU price performance is irrelevant. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One more test I consider essential&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;For CPU fleets, I care about deployment speed almost as much as processor speed. A batch platform that can add one hundred workers quickly may finish sooner than a platform with slightly faster individual machines but slower provisioning or tight quotas. I test image boot time, package initialization, network readiness, scheduler registration, and scale in cleanup. I also verify that support can raise quotas or diagnose host level performance when needed. Compute heavy systems are usually fleets, so fleet behavior should be part of the benchmark from the beginning. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A final operational check I would add&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I also run a saturation test long enough to expose thermal, scheduling, storage, and network limits. CPU heavy systems can look excellent for a few minutes and then settle at a different sustained throughput. I record useful work per core, not only utilization. A core at 100 percent is not automatically productive if the application is stalled on memory or I O. I repeat the test with realistic concurrency and with the monitoring agent enabled. That gives me a better picture of what the platform will deliver during a deadline, build storm, analytics window, or traffic spike. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My recommendation&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I would keep AWS C family instances where the workload already benefits from AWS services, mature automation, or Graviton economics. I would choose Azure F series for Microsoft centered estates and Google C series for cloud native or data heavy platforms that align with Google operations. I would consider AceCloud and simpler providers where predictable cost, local support, and a focused compute model matter more than catalog size. The migration decision should be driven by cost per completed job and operational effort. If an alternative finishes the same production work reliably with less platform overhead, then it is a meaningful C family alternative even if its instance naming scheme looks nothing like AWS.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Best MongoDB Atlas Alternatives MongoDB-Compatible and Open Alternatives Compared</title>
      <dc:creator>Rakesh Tanwar</dc:creator>
      <pubDate>Thu, 17 Sep 2026 14:03:08 +0000</pubDate>
      <link>https://dev.to/rakesh_tanwar/best-mongodb-atlas-alternatives-mongodb-compatible-and-open-alternatives-compared-1j40</link>
      <guid>https://dev.to/rakesh_tanwar/best-mongodb-atlas-alternatives-mongodb-compatible-and-open-alternatives-compared-1j40</guid>
      <description>&lt;p&gt;&lt;strong&gt;Atlas is excellent, but the database model is not the only option&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MongoDB Atlas is a mature managed document database platform with automated backups, scaling, multi-region options and a broad developer ecosystem. I would choose it for many document-heavy applications. I also think teams should revisit the assumption that every JSON-like application needs MongoDB forever. In 2026, there are managed MongoDB services, MongoDB-compatible layers, and PostgreSQL-based alternatives that can change cost, licensing, portability, or operational strategy.&lt;/p&gt;

&lt;p&gt;I separate the alternatives into three groups. The first is managed MongoDB from another provider. The second is MongoDB-compatible technology that preserves much of the application interface while changing the storage foundation. The third is an application migration to an open relational database such as PostgreSQL using JSON capabilities. A managed database platform can support several of these paths depending on how much change the application can tolerate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The alternatives I would consider&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://acecloud.ai/" rel="noopener noreferrer"&gt;AceCloud&lt;/a&gt;&lt;/strong&gt; Managed FerretDB is the most interesting option when the goal is MongoDB compatibility on an open PostgreSQL foundation. FerretDB is designed to provide MongoDB-compatible behavior while storing data in PostgreSQL. I would evaluate managed FerretDB for applications that want familiar document-oriented access but prefer an open source stack and a PostgreSQL-backed architecture. Compatibility must be tested against the application because it is not MongoDB itself.&lt;/p&gt;

&lt;p&gt;Digital Ocean Managed MongoDB is a more direct Atlas alternative for teams that want MongoDB managed on a simpler cloud platform. Digital Ocean includes MongoDB in its managed database portfolio with high availability and operational automation. I would consider it for applications that want standard MongoDB behavior without the full Atlas platform surface.&lt;/p&gt;

&lt;p&gt;Scale Grid offers managed MongoDB as part of its DBaaS platform and supports different cloud hosting models. I would evaluate it when the organization wants dedicated or bring-your-own-cloud deployment and more control over where the database runs.&lt;/p&gt;

&lt;p&gt;Self-managed MongoDB remains an option for teams that need maximum control over versions, topology, host access, and cost optimization. I would only recommend it to organizations with strong database operations. Replica sets, sharding, backups, upgrades, security and monitoring create a real long-term operations burden.&lt;/p&gt;

&lt;p&gt;PostgreSQL with JSONB is not a drop-in MongoDB replacement, but I think it belongs in architecture discussions. Many applications use MongoDB for flexible documents but also need transactions, joins, reporting and relational integrity. PostgreSQL can store structured tables and JSON in the same engine. The trade is application change rather than compatibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where Atlas still has a major advantage&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Atlas has deep MongoDB feature coverage, a mature global platform, integrated search and vector capabilities, automation, and a large ecosystem. If an application depends on MongoDB-specific query behavior, aggregation pipelines, sharding patterns, tooling or operational features, staying with Atlas can be the lowest-risk decision. Migration cost is real and should be compared with ongoing platform cost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How I evaluate compatibility&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I never trust the word compatible without tests. I inventory drivers, commands, indexes, aggregation stages, transactions, change streams, authentication, backup requirements and operational tooling. Then I replay representative application traffic. A compatibility layer can be excellent for common workloads and still differ in an edge case that matters to one application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How I evaluate openness and lock-in&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I look at data format, export tools, underlying engine, license, hosting choices and how difficult it would be to move again. Open source does not automatically mean easy migration and a proprietary managed service does not automatically mean harmful lock-in. The relevant question is whether the organization retains practical control over its data and architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I would calculate application rewrite cost&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;The farther an alternative moves from MongoDB behavior, the more I budget for code and test changes. A direct managed MongoDB provider can minimize application work. A compatibility layer may preserve much of the interface but still require testing. PostgreSQL JSONB can provide a strong long-term architecture while demanding the largest application redesign. &lt;/p&gt;

&lt;p&gt;I put that migration cost beside three years of expected platform cost. A cheaper database that requires months of engineering may not be cheaper. On the other hand, a deliberate rewrite can be worthwhile if it removes a strategic licensing, portability or data-model constraint. I want the business case to include both numbers. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data governance can change the preferred answer&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I also check where backups live, how encryption keys are managed, what audit logs exist, and whether the provider can meet the organization’s data location requirements. Document databases often hold customer profiles or operational records, so governance can outweigh developer convenience. The best technical alternative still has to fit the business control model. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My recommendation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I would keep Atlas when MongoDB-specific capability and operational maturity justify it. I would choose another managed MongoDB provider when the goal is mainly cloud or cost diversification. I would test Ferret DB when MongoDB compatibility plus a PostgreSQL foundation is strategically attractive. I would consider PostgreSQL JSONB when the application can accept code changes and would benefit from relational features. The best alternative is not the closest logo. It is the architecture that reduces long-term data platform risk without forcing unnecessary application rewrites.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Managed Redis vs Self-Hosted Redis Performance, HA and Cost Compared</title>
      <dc:creator>Rakesh Tanwar</dc:creator>
      <pubDate>Thu, 17 Sep 2026 12:11:08 +0000</pubDate>
      <link>https://dev.to/rakesh_tanwar/managed-redis-vs-self-hosted-redis-performance-ha-and-cost-compared-2nc0</link>
      <guid>https://dev.to/rakesh_tanwar/managed-redis-vs-self-hosted-redis-performance-ha-and-cost-compared-2nc0</guid>
      <description>&lt;p&gt;&lt;strong&gt;Redis makes self-hosting look deceptively easy&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;A single Redis process can be running in minutes. That simplicity convinces many teams that self-hosted Redis must also be simple in production. I disagree. Once Redis becomes important for sessions, rate limits, queues, real-time state, or application caching, the team has to think about failover, persistence, memory pressure, backups, upgrades, security, monitoring and client behavior during topology changes. &lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;&lt;a href="https://acecloud.ai/cloud/database/redis/" rel="noopener noreferrer"&gt;managed Redis service&lt;/a&gt;&lt;/strong&gt; moves much of that operational work to the provider. The trade is familiar. You pay more than raw infrastructure and accept some platform constraints, but you reduce the amount of infrastructure your team must build and support. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance is mostly about placement and memory&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Redis is extremely fast, so network latency can dominate. I prefer placing Redis close to application compute, ideally in the same region and private network. A self-hosted Redis node on the same infrastructure can perform very well because the team controls instance type, kernel tuning, networking, and CPU placement. Managed services can match that experience when they are deployed close to the application and sized correctly. &lt;/p&gt;

&lt;p&gt;The more important performance risk is memory. Fragmentation, replication buffers, persistence, large values, and growth headroom mean the provisioned memory must exceed logical dataset size. I watch tail latency, evictions, blocked clients, CPU saturation, and network throughput. Average GET latency alone tells me very little about a production cache. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;High availability is where managed services earn their premium&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Self-hosted teams can build HA with Sentinel or Redis Cluster, but they must operate the control plane around it. They need replica placement, failure detection, promotion, stable client behavior, monitoring, and regular failover testing. Cluster resharding and node replacement add another layer of operational knowledge. &lt;/p&gt;

&lt;p&gt;Managed providers automate more of this. I still test failover because managed does not guarantee zero application impact. Client libraries must discover the new primary or cluster state, retry safely, and avoid retry storms. I measure errors and latency during the event, not just provider recovery time. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Persistence changes the risk model&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;For a pure cache, losing data may be acceptable because the application can rebuild it. For sessions or operational state, persistence and backup behavior matter. Self-hosted Redis gives complete control over RDB snapshots, AOF policy, storage, and backup location, but that control comes with responsibility. Managed services simplify the setup and often provide automated snapshot or persistence options depending on the product. &lt;/p&gt;

&lt;p&gt;I decide the required recovery point before choosing a platform. If the answer is that no data can be lost, I question whether Redis should be the sole system of record at all. Architecture should not force an in-memory database to provide guarantees it was not chosen for. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cost depends on the team and topology&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Raw self-hosted memory can be cheaper. The calculation changes when I add replicas, spare capacity, backup storage, monitoring, patching, automation, and engineering support. Managed services are often economical for small teams because they convert recurring operational work into a service fee. &lt;/p&gt;

&lt;p&gt;At very large scale, a company with expert platform engineers can operate Redis efficiently and may justify self-hosting. The company must be honest about on-call coverage and lifecycle management. A fragile cluster that saves infrastructure money is not cheaper. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Control versus simplicity&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I self-host when I need unusual modules, host-level tuning, exact version control, specialized networking, or deployment in an environment no managed provider supports. I choose managed Redis for typical application caching when I want reliability without owning the full cluster lifecycle. &lt;/p&gt;

&lt;p&gt;I also consider the surrounding data stack. A &lt;strong&gt;&lt;a href="https://acecloud.ai/cloud/database/" rel="noopener noreferrer"&gt;managed database&lt;/a&gt;&lt;/strong&gt; platform can reduce network and support fragmentation when Redis sits beside PostgreSQL, MySQL, Kafka, or RabbitMQ. That operational coherence can be worth more than a small per-node saving. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The application must survive Redis failure&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Whether I use managed or self-hosted Redis, I design the application so a cache problem does not automatically become a total outage. Timeouts must be short, retries controlled, and fallback behavior intentional. For noncritical cache data, the application should often be able to bypass Redis temporarily rather than queue thousands of retrying requests. &lt;/p&gt;

&lt;p&gt;This resilience changes the economics too. A well-designed application may not need the most expensive availability tier for every cache. A poorly designed application can remain fragile even on premium infrastructure. I prefer to spend on the combination of sensible platform HA and graceful application behavior. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My verdict&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For most product teams, I prefer managed Redis in production and self-hosted Redis for specialized environments or organizations with strong internal platform capability. Performance can be excellent with either model. The deciding factor is usually not microseconds. It is whether the company wants to own failover, upgrades, memory operations, and incidents for an infrastructure component that users never see but every request may depend on.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Best Amazon RDS for MySQL Alternatives in 2026</title>
      <dc:creator>Rakesh Tanwar</dc:creator>
      <pubDate>Tue, 15 Sep 2026 12:57:22 +0000</pubDate>
      <link>https://dev.to/rakesh_tanwar/best-amazon-rds-for-mysql-alternatives-in-2026-1hpc</link>
      <guid>https://dev.to/rakesh_tanwar/best-amazon-rds-for-mysql-alternatives-in-2026-1hpc</guid>
      <description>&lt;p&gt;&lt;strong&gt;Why I would look beyond RDS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon RDS for MySQL is a proven service, and I would never dismiss it just to sound contrarian. It is mature, well integrated with AWS, and familiar to a huge number of engineers. Still, RDS can be the wrong fit when a team wants simpler operations, a different cloud strategy, closer support, clearer cost boundaries, or a platform designed around open source data services rather than the full AWS ecosystem. &lt;/p&gt;

&lt;p&gt;I begin with the reason for leaving. If the problem is a badly tuned schema, changing providers will not fix it. If the problem is cloud concentration, support experience, operational complexity, or cost structure, an alternative can make a meaningful difference. I would compare RDS with a focused &lt;strong&gt;&lt;a href="https://acecloud.ai/cloud/database/managed-mysql/" rel="noopener noreferrer"&gt;managed MySQL platform&lt;/a&gt;&lt;/strong&gt; on the full production topology rather than on an entry-level instance. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alternatives I would seriously evaluate&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;AceCloud is worth considering for India-focused businesses that want managed MySQL with deployment choices including standalone, Group Replication, and InnoDB Cluster. Scheduled backups, recovery options, monitoring, secure connectivity, and migration support make it a practical alternative when the company wants more direct operational guidance. &lt;/p&gt;

&lt;p&gt;Google Cloud SQL for MySQL is the most straightforward alternative for teams moving toward Google Cloud. Its high availability configuration, backups, read replicas, monitoring, and network integration reduce routine DBA work. I like it when the broader application already benefits from GKE, Cloud Run, BigQuery, or Google Cloud security tooling. &lt;/p&gt;

&lt;p&gt;Azure Database for MySQL Flexible Server is a good choice for Microsoft-heavy enterprises. Azure identity, policy, private networking, and security integration can simplify governance. I would prioritize it when the company has an established Azure platform team because organizational familiarity is a real operational advantage. &lt;/p&gt;

&lt;p&gt;DigitalOcean Managed MySQL appeals to me for lean engineering teams. The service emphasizes a simpler user experience and managed database basics without the sprawling surface area of AWS. It can be a strong fit for SaaS products and web applications that want solid production capabilities without a large cloud operations team. &lt;/p&gt;

&lt;p&gt;Aiven for MySQL is one of the alternatives I like for multi-cloud strategy. Aiven handles routine management and offers backup, recovery, replication, security, and observability capabilities across cloud providers. That can reduce the coupling between the database operating model and the underlying infrastructure provider. &lt;/p&gt;

&lt;p&gt;Akamai Managed Databases, built around the Linode cloud platform, is another option for teams that prefer a simpler infrastructure footprint. Its managed MySQL offering includes daily backups and automated updates. I would evaluate its regional availability, HA design, performance tiers, and support terms against the workload before choosing it for a critical system. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where RDS still has an advantage&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;RDS is hard to beat when the application is already deeply integrated with AWS. IAM, CloudWatch, VPC design, secrets, migration tools, analytics services, and procurement may already be standardized. Moving only MySQL can introduce new network paths, support boundaries, and governance processes. I would not create those seams without a clear benefit. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I would measure before migrating&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I test query latency, connection limits, storage throughput, replica lag, failover behavior, backup restore, maintenance impact, and version support. I also compare administrative restrictions. Managed MySQL services differ in parameter access, plugins, binary log controls, replication options, and upgrade timing. Those differences can matter more than vCPU count. &lt;/p&gt;

&lt;p&gt;I would also look at the wider data architecture. If the application needs relational databases, caching, event streaming, and messaging, consolidating those services on a &lt;strong&gt;&lt;a href="https://acecloud.ai/cloud/database/" rel="noopener noreferrer"&gt;managed database service&lt;/a&gt;&lt;/strong&gt; can make monitoring and support easier. I would only do that when the platform is genuinely strong across the engines I need. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I would calculate exit cost too&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;An RDS alternative should not merely be cheaper to enter. I want to know how easily I can export data, preserve binary log based migration options, recreate users and grants, and move to another platform later. Standard MySQL compatibility helps, but service-specific networking, monitoring, secrets, and automation can still create friction. &lt;/p&gt;

&lt;p&gt;I also compare support escalation. During a production incident, I want to know whether the first response is generic cloud support or someone who understands MySQL replication, InnoDB, query plans, and storage behavior. A lower service price can be a poor trade if the team spends critical hours translating a database problem across support layers. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My recommendation&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I would stay with RDS when AWS integration is a competitive advantage for the team. I would move when another provider clearly improves support, simplicity, multi-cloud freedom, regional alignment, or total operating cost. The most important step is to prove the alternative with a production-shaped workload and a real recovery test. A successful migration is not the moment the data copies. It is the moment the new platform survives failure, maintenance, and peak traffic without surprising the team. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>OOMKilled but the Kubernetes Node Still Has Free Memory and Why Pod Limits Explain It</title>
      <dc:creator>Rakesh Tanwar</dc:creator>
      <pubDate>Mon, 14 Sep 2026 07:48:24 +0000</pubDate>
      <link>https://dev.to/rakesh_tanwar/oomkilled-but-the-kubernetes-node-still-has-free-memory-and-why-pod-limits-explain-it-34dh</link>
      <guid>https://dev.to/rakesh_tanwar/oomkilled-but-the-kubernetes-node-still-has-free-memory-and-why-pod-limits-explain-it-34dh</guid>
      <description>&lt;p&gt;When a container shows OOMKilled while the node dashboard still has gigabytes of free memory, engineers often assume Kubernetes made a mistake. &lt;/p&gt;

&lt;p&gt;Usually it did not. &lt;/p&gt;

&lt;p&gt;The container exceeded the memory boundary assigned to its cgroup. &lt;/p&gt;

&lt;p&gt;Node memory and container memory are related, but they are not the same limit. &lt;/p&gt;

&lt;p&gt;That distinction is fundamental to Kubernetes resource management. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Memory limits are enforced below Kubernetes&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Kubernetes accepts memory requests and limits in the Pod specification. &lt;/p&gt;

&lt;p&gt;The kubelet and container runtime translate those settings into operating system resource controls. &lt;/p&gt;

&lt;p&gt;On Linux, cgroups are responsible for enforcing those boundaries. &lt;/p&gt;

&lt;p&gt;If a container exceeds its memory limit, the kernel can terminate it even while the node itself still has free memory. &lt;/p&gt;

&lt;p&gt;That behavior is intentional. &lt;/p&gt;

&lt;p&gt;Without container-level enforcement, one workload could consume memory intended for other Pods. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I confirm the termination reason&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Before adjusting anything, I inspect the previous container state and events.&lt;/p&gt;

&lt;p&gt;I want to confirm OOMKilled rather than assuming every exit under load is an out-of-memory event. &lt;/p&gt;

&lt;p&gt;Then I compare the container's configured limit with observed memory usage. &lt;/p&gt;

&lt;p&gt;I also check whether the workload experienced a sudden spike rather than a gradual leak. &lt;/p&gt;

&lt;p&gt;AceCloud's C*&lt;em&gt;&lt;a href="https://acecloud.ai/blog/crashloopbackoff-kubernetes-troubleshooting-guide/" rel="noopener noreferrer"&gt;rashLoopBackOff troubleshooting guide&lt;/a&gt;&lt;/em&gt;* is useful here because repeated OOM kills often eventually surface as restart loops rather than as an obvious memory-sizing incident. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requests and limits solve different problems&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;A memory request influences scheduling. &lt;/p&gt;

&lt;p&gt;A memory limit constrains runtime consumption. &lt;/p&gt;

&lt;p&gt;If a container requests 512 MiB and has a 1 GiB limit, the scheduler reserves capacity based on the request while the container can grow beyond it until enforcement becomes relevant. &lt;/p&gt;

&lt;p&gt;That gap can be perfectly reasonable. &lt;/p&gt;

&lt;p&gt;It can also be dangerous when every workload regularly consumes far more than requested. &lt;/p&gt;

&lt;p&gt;I therefore right-size both values based on observed behavior. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I look for workload memory patterns&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Not every OOM event needs a larger limit. &lt;/p&gt;

&lt;p&gt;I want to know why memory increased. &lt;/p&gt;

&lt;p&gt;Possible causes include &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Memory leaks &lt;/li&gt;
&lt;li&gt;Large request payloads &lt;/li&gt;
&lt;li&gt;Unbounded caches &lt;/li&gt;
&lt;li&gt;Excessive concurrency &lt;/li&gt;
&lt;li&gt;JVM heap configuration &lt;/li&gt;
&lt;li&gt;Python worker counts &lt;/li&gt;
&lt;li&gt;Model loading &lt;/li&gt;
&lt;li&gt;Large in-memory buffers &lt;/li&gt;
&lt;li&gt;Temporary data processing &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Increasing the limit can postpone a leak without fixing it. &lt;/p&gt;

&lt;p&gt;If memory scales with traffic, I may need different concurrency limits or horizontal scaling. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sidecars deserve attention&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;A Pod can contain several containers. &lt;/p&gt;

&lt;p&gt;The application may look healthy while a sidecar is being killed. &lt;/p&gt;

&lt;p&gt;Logging agents, proxies, and service mesh components consume memory too. &lt;/p&gt;

&lt;p&gt;I inspect resource settings per container. &lt;/p&gt;

&lt;p&gt;I do not assume the main application process is always responsible. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Node-level OOM is a different incident&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;The reverse situation also matters.&lt;/p&gt;

&lt;p&gt;A node under severe memory pressure can experience broader eviction or OOM behavior even when an individual container has not crossed the limit I expected. &lt;/p&gt;

&lt;p&gt;That investigation requires node memory, requests, limits, kubelet eviction thresholds, kernel logs, and workload priority. &lt;/p&gt;

&lt;p&gt;I keep container OOM and node memory pressure conceptually separate until evidence connects them. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;cgroup v2 matters increasingly&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Modern Kubernetes is standardizing around cgroup v2. &lt;/p&gt;

&lt;p&gt;That brings a more consistent resource management model and supports newer memory management capabilities. &lt;/p&gt;

&lt;p&gt;For teams operating their own node lifecycle, Kubernetes upgrades should therefore include cgroup compatibility checks. &lt;/p&gt;

&lt;p&gt;For teams that would rather reduce that infrastructure maintenance surface, &lt;strong&gt;&lt;a href="https://acecloud.ai/cloud/kubernetes/" rel="noopener noreferrer"&gt;AceCloud Kubernetes&lt;/a&gt;&lt;/strong&gt; provides managed control plane and worker lifecycle capabilities while still allowing application teams to configure Kubernetes resource requests and limits. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I do not remove limits blindly&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Some teams respond to OOMKilled by deleting every memory limit. &lt;/p&gt;

&lt;p&gt;I think that trades one problem for another. &lt;/p&gt;

&lt;p&gt;Limits provide isolation. &lt;/p&gt;

&lt;p&gt;Without them, a badly behaving workload can threaten neighboring Pods and the node. &lt;/p&gt;

&lt;p&gt;I prefer understanding normal usage, peak usage, application concurrency, and failure behavior before setting the boundary. &lt;/p&gt;

&lt;p&gt;For certain workloads a generous limit makes sense. &lt;/p&gt;

&lt;p&gt;For others, memory growth should trigger scaling or backpressure rather than unlimited allocation. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My mental model&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I think of Kubernetes memory at three levels. &lt;/p&gt;

&lt;p&gt;The application consumes memory. &lt;/p&gt;

&lt;p&gt;The container has a cgroup boundary. &lt;/p&gt;

&lt;p&gt;The node has finite physical or virtual memory shared across workloads. &lt;/p&gt;

&lt;p&gt;An OOM at one level does not require exhaustion at another. &lt;/p&gt;

&lt;p&gt;Once that model is clear, the apparently impossible incident makes sense. &lt;/p&gt;

&lt;p&gt;The node can have free RAM. &lt;/p&gt;

&lt;p&gt;The container can still exceed the amount it was allowed to use. &lt;/p&gt;

&lt;p&gt;That is not contradictory. &lt;/p&gt;

&lt;p&gt;That is resource isolation working.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Your Kubernetes Cluster Ran Out of IP Addresses Before It Ran Out of Nodes</title>
      <dc:creator>Rakesh Tanwar</dc:creator>
      <pubDate>Thu, 10 Sep 2026 12:18:14 +0000</pubDate>
      <link>https://dev.to/rakesh_tanwar/your-kubernetes-cluster-ran-out-of-ip-addresses-before-it-ran-out-of-nodes-3i8n</link>
      <guid>https://dev.to/rakesh_tanwar/your-kubernetes-cluster-ran-out-of-ip-addresses-before-it-ran-out-of-nodes-3i8n</guid>
      <description>&lt;p&gt;Most teams size Kubernetes clusters around compute. &lt;/p&gt;

&lt;p&gt;They estimate CPU, memory, node count, and perhaps GPUs. &lt;/p&gt;

&lt;p&gt;Then one day new Pods stop networking correctly even though the cluster has plenty of compute capacity. &lt;/p&gt;

&lt;p&gt;The resource that disappeared was IP addresses. &lt;/p&gt;

&lt;p&gt;I think IP capacity should be treated as a first-class Kubernetes sizing metric. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every Pod needs network identity&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;The Kubernetes networking model normally gives each Pod an IP address. &lt;/p&gt;

&lt;p&gt;Where those addresses come from depends on the CNI and infrastructure design. &lt;/p&gt;

&lt;p&gt;In some cloud architectures, Pod addressing can consume subnet resources closely tied to the underlying virtual network. &lt;/p&gt;

&lt;p&gt;That means adding larger nodes does not automatically solve the problem. &lt;/p&gt;

&lt;p&gt;A cluster can have enough CPU to schedule hundreds of additional Pods while the available address pool can support only a fraction of them. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I calculate address capacity before production&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I start with the CIDRs used by nodes, Pods, and Services. &lt;/p&gt;

&lt;p&gt;They must be understood separately. &lt;/p&gt;

&lt;p&gt;Then I ask how the selected CNI allocates Pod addresses. &lt;/p&gt;

&lt;p&gt;Does it assign addresses directly from cloud subnets &lt;/p&gt;

&lt;p&gt;Does it use an overlay &lt;/p&gt;

&lt;p&gt;Does it reserve addresses in blocks &lt;/p&gt;

&lt;p&gt;Does it keep warm addresses ready for faster Pod startup &lt;/p&gt;

&lt;p&gt;Different answers produce very different capacity limits. &lt;/p&gt;

&lt;p&gt;This is why VPC design and Kubernetes design cannot be separated. The &lt;strong&gt;&lt;a href="https://acecloud.ai/blog/acecloud-vpc-vs-aws-vpc-vs-google-cloud-vpc/" rel="noopener noreferrer"&gt;AceCloud VPC comparison guide&lt;/a&gt;&lt;/strong&gt; provides useful context around subnet design, address ranges, routing, and private connectivity. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Node density can surprise you&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Suppose a team moves from many small nodes to fewer large nodes. &lt;/p&gt;

&lt;p&gt;Compute efficiency might improve. &lt;/p&gt;

&lt;p&gt;Network density might not. &lt;/p&gt;

&lt;p&gt;The maximum number of Pods supported per node may be influenced by the networking implementation and available addresses. &lt;/p&gt;

&lt;p&gt;I therefore model both resources. &lt;/p&gt;

&lt;p&gt;A node is useful only if it has enough CPU, memory, and networking capacity to host the intended Pods. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Autoscaling can accelerate exhaustion&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Node autoscaling makes IP planning even more important. &lt;/p&gt;

&lt;p&gt;During a traffic spike, the system may create nodes and Pods rapidly. &lt;/p&gt;

&lt;p&gt;If those nodes consume address capacity from an already crowded subnet, autoscaling can hit the network ceiling exactly when the application needs capacity most. &lt;/p&gt;

&lt;p&gt;That is a nasty failure mode because the infrastructure appears to be scaling successfully while workloads remain unable to start correctly. &lt;/p&gt;

&lt;p&gt;I include remaining IP capacity in cluster alerts for this reason. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I avoid using one subnet for everything&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Where the infrastructure supports it, I prefer intentional address planning across environments and workload groups. &lt;/p&gt;

&lt;p&gt;Production clusters should not inherit a tiny CIDR simply because it was convenient during initial setup. &lt;/p&gt;

&lt;p&gt;I leave room for growth, rolling upgrades, temporary surge capacity, and node replacement. &lt;/p&gt;

&lt;p&gt;A rolling node upgrade can temporarily require old and new workers to coexist. &lt;/p&gt;

&lt;p&gt;If the address plan supports only normal steady state, maintenance itself can trigger exhaustion. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dual stack can be strategic but not automatic&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;IPv6 and dual-stack Kubernetes can significantly change long-term address planning. &lt;/p&gt;

&lt;p&gt;I do not view dual stack as an emergency fix for a poorly designed IPv4 network. &lt;/p&gt;

&lt;p&gt;It introduces application, observability, security, and operational considerations of its own. &lt;/p&gt;

&lt;p&gt;But for organizations building platforms expected to grow substantially, I believe IPv6 readiness belongs in the architecture conversation. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I monitor IP capacity beside CPU and memory&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Most cluster dashboards make CPU and memory impossible to ignore. &lt;/p&gt;

&lt;p&gt;I want network capacity to be similarly visible. &lt;/p&gt;

&lt;p&gt;The exact metric depends on the CNI and cloud environment, but the principle is universal. &lt;/p&gt;

&lt;p&gt;I want alerts before address utilization becomes critical. &lt;/p&gt;

&lt;p&gt;I also test Pod creation during load exercises. &lt;/p&gt;

&lt;p&gt;A cluster that can handle traffic only while no additional Pods need addresses is not genuinely ready for a spike. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Managed Kubernetes does not remove network planning&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;A managed control plane can eliminate considerable operational work. &lt;/p&gt;

&lt;p&gt;It does not repeal network mathematics. &lt;/p&gt;

&lt;p&gt;Teams still need suitable subnet sizes, CNI choices, node groups, and private network design. &lt;/p&gt;

&lt;p&gt;When evaluating environments such as &lt;strong&gt;&lt;a href="https://acecloud.ai/cloud/kubernetes/" rel="noopener noreferrer"&gt;AceCloud Kubernetes&lt;/a&gt;&lt;/strong&gt;, I would include projected Pod count and network isolation requirements alongside worker CPU and memory sizing. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My main lesson&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kubernetes capacity is multidimensional. &lt;/p&gt;

&lt;p&gt;CPU is capacity. &lt;/p&gt;

&lt;p&gt;Memory is capacity. &lt;/p&gt;

&lt;p&gt;GPU devices are capacity. &lt;/p&gt;

&lt;p&gt;Storage attachment is capacity. &lt;/p&gt;

&lt;p&gt;IP addresses are capacity too. &lt;/p&gt;

&lt;p&gt;If I design only for the first two, I can build a cluster with expensive idle nodes that still cannot create another usable Pod. &lt;/p&gt;

&lt;p&gt;That is why I calculate IP headroom before deployment, monitor it during operation, and revisit it before major scaling events. &lt;/p&gt;

&lt;p&gt;The best time to discover that a subnet is too small is during architecture review. &lt;/p&gt;

&lt;p&gt;The worst time is when the autoscaler is trying to save production. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cluster Autoscaler Won't Remove a Node and Why I Check PDBs, Storage and Scheduling Constraints</title>
      <dc:creator>Rakesh Tanwar</dc:creator>
      <pubDate>Thu, 10 Sep 2026 07:53:05 +0000</pubDate>
      <link>https://dev.to/rakesh_tanwar/cluster-autoscaler-wont-remove-a-node-and-why-i-check-pdbs-storage-and-scheduling-constraints-31hi</link>
      <guid>https://dev.to/rakesh_tanwar/cluster-autoscaler-wont-remove-a-node-and-why-i-check-pdbs-storage-and-scheduling-constraints-31hi</guid>
      <description>&lt;p&gt;When a Kubernetes cluster scales out correctly but refuses to scale back in, people often blame Cluster Autoscaler. &lt;/p&gt;

&lt;p&gt;Sometimes the autoscaler is doing exactly what I want. &lt;/p&gt;

&lt;p&gt;It has found a node that appears underused, attempted to determine whether its Pods can move elsewhere, and concluded that removing the node would violate a workload constraint. &lt;/p&gt;

&lt;p&gt;That distinction matters. &lt;/p&gt;

&lt;p&gt;I never troubleshoot failed scale-down by looking only at CPU utilization. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An empty-looking node may not be removable&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Node autoscaling is fundamentally a scheduling problem. &lt;/p&gt;

&lt;p&gt;Before a node can disappear, workloads running there usually need somewhere safe to go. &lt;/p&gt;

&lt;p&gt;That means the autoscaler must consider much more than available CPU and memory. &lt;/p&gt;

&lt;p&gt;A Pod may depend on a disruption budget, local storage, node affinity, zone-specific storage, taints, topology rules, or another scheduling condition. &lt;/p&gt;

&lt;p&gt;The node can therefore look wasteful on a dashboard while remaining necessary to the scheduler. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I check PodDisruptionBudgets first&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;PodDisruptionBudgets are one of my first checks. &lt;/p&gt;

&lt;p&gt;A PDB can intentionally prevent voluntary eviction when removing a Pod would take the workload below its availability requirement. &lt;/p&gt;

&lt;p&gt;That is useful. &lt;/p&gt;

&lt;p&gt;The problem appears when the PDB and replica count make voluntary disruption mathematically impossible. &lt;/p&gt;

&lt;p&gt;A three replica application with a sensible budget may drain easily. &lt;/p&gt;

&lt;p&gt;A single replica application requiring that single replica to remain available cannot. &lt;/p&gt;

&lt;p&gt;I inspect the current healthy count, desired healthy count, and allowed disruptions. &lt;/p&gt;

&lt;p&gt;I also look for old PDBs whose selectors no longer match the intended workload architecture. &lt;/p&gt;

&lt;p&gt;The right fix is rarely to delete the PDB blindly. &lt;/p&gt;

&lt;p&gt;I usually fix the availability model. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Local storage changes the equation&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Local ephemeral data can also make node removal difficult. &lt;/p&gt;

&lt;p&gt;Whenever applications depend on node-local state, I ask what happens when the Pod moves. &lt;/p&gt;

&lt;p&gt;Production workloads that require durable data generally belong on storage designed for that lifecycle rather than relying on a specific worker. &lt;/p&gt;

&lt;p&gt;Stateful applications deserve particular attention because a volume may also have topology restrictions. &lt;/p&gt;

&lt;p&gt;AceCloud's guide to &lt;strong&gt;&lt;a href="https://acecloud.ai/blog/kubernetes-csi-volume-snapshots/" rel="noopener noreferrer"&gt;Kubernetes CSI volume&lt;/a&gt;&lt;/strong&gt; snapshots is a useful reminder that storage lifecycle, restore behavior, and application consistency must be designed independently from node lifecycle. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scheduling rules can create invisible anchors&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Next I inspect hard node selectors and node affinity. &lt;/p&gt;

&lt;p&gt;A Pod might be allowed on only two nodes in the entire cluster. &lt;/p&gt;

&lt;p&gt;If one is being evaluated for removal and the other lacks capacity, scale-down stops. &lt;/p&gt;

&lt;p&gt;Taints and tolerations can create similar restrictions. &lt;/p&gt;

&lt;p&gt;Topology spread rules and anti-affinity can also require a particular distribution across zones, nodes, or failure domains. &lt;/p&gt;

&lt;p&gt;These are often good availability controls. &lt;/p&gt;

&lt;p&gt;The problem is not that they exist. &lt;/p&gt;

&lt;p&gt;The problem is when teams create them without realizing they also constrain autoscaling. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I compare requests with real usage&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Cluster Autoscaler generally reasons about schedulability using requested resources rather than the utilization percentage displayed on a monitoring dashboard. &lt;/p&gt;

&lt;p&gt;This difference catches many teams. &lt;/p&gt;

&lt;p&gt;A node may show low real CPU usage while the Pods on it request most of the node's allocatable CPU. &lt;/p&gt;

&lt;p&gt;From the scheduler's perspective, those requests matter. &lt;/p&gt;

&lt;p&gt;I therefore look for over-requested workloads. &lt;/p&gt;

&lt;p&gt;Right-sizing requests can make scale-down easier without sacrificing application reliability. &lt;/p&gt;

&lt;p&gt;This is also why I like treating node autoscaling as part of the platform rather than as a separate cost script. Managed services such as &lt;strong&gt;&lt;a href="https://acecloud.ai/cloud/kubernetes/" rel="noopener noreferrer"&gt;AceCloud Kubernetes&lt;/a&gt;&lt;/strong&gt; combine node groups and autoscaling with the wider cluster lifecycle, but workload requests and scheduling policy still determine how effectively capacity can be reclaimed. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DaemonSets deserve a separate look&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;DaemonSet Pods are expected to exist on relevant nodes. &lt;/p&gt;

&lt;p&gt;Monitoring agents, security agents, log collectors, CNI components, and GPU components often use DaemonSets. &lt;/p&gt;

&lt;p&gt;I distinguish these from normal application Pods during troubleshooting because their scale-down treatment differs. &lt;/p&gt;

&lt;p&gt;The important question is whether an ordinary workload is anchoring the node. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I inspect autoscaler events before changing anything&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Autoscaler logs usually tell a better story than utilization graphs. &lt;/p&gt;

&lt;p&gt;I look for messages showing which Pod prevented removal and why. &lt;/p&gt;

&lt;p&gt;That evidence turns an apparently mysterious scale-down failure into a scheduling investigation. &lt;/p&gt;

&lt;p&gt;Only after finding the blocker do I change PDBs, requests, affinity, or storage placement. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I design workloads to be removable&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;My preferred approach is preventive. &lt;/p&gt;

&lt;p&gt;For workloads expected to run on elastic worker pools, I ask whether the Pod can survive being moved at any reasonable time. &lt;/p&gt;

&lt;p&gt;If the answer is no, I either redesign the workload or place it on a more stable node group. &lt;/p&gt;

&lt;p&gt;Autoscaling works best when applications cooperate with infrastructure elasticity. &lt;/p&gt;

&lt;p&gt;A node that cannot be drained is not truly elastic capacity. &lt;/p&gt;

&lt;p&gt;That is the principle I keep in mind whenever Cluster Autoscaler refuses to remove a machine. &lt;/p&gt;

&lt;p&gt;Before blaming the autoscaler, I ask which workload rule is telling Kubernetes that the node still matters.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Migrating Legacy CentOS 7 Production Servers Without Rebuilding the Entire Application</title>
      <dc:creator>Rakesh Tanwar</dc:creator>
      <pubDate>Thu, 10 Sep 2026 06:32:48 +0000</pubDate>
      <link>https://dev.to/rakesh_tanwar/migrating-legacy-centos-7-production-servers-without-rebuilding-the-entire-application-3p51</link>
      <guid>https://dev.to/rakesh_tanwar/migrating-legacy-centos-7-production-servers-without-rebuilding-the-entire-application-3p51</guid>
      <description>&lt;p&gt;&lt;strong&gt;CentOS 7 is already a lifecycle problem, but a rushed rewrite is not the only answer&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;CentOS Linux 7 reached end of life in June 2024. In 2026, any production system still running it deserves an explicit remediation plan. I also understand why some teams hesitate. The server may host an old Java application, a commercial binary, custom native libraries or years of configuration that nobody wants to recreate. I do not think the only choices are to keep an unsupported OS or rewrite the whole application. A staged migration can separate infrastructure modernization from application modernization. The first goal is to move the workload onto a supported operating system with the least behavioral change. The second goal, later, can be to improve the application architecture. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inventory what is coupled to CentOS 7&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I capture installed packages, enabled repositories, kernel modules, services, cron jobs, users, SELinux policy, firewall rules, mounts, environment variables and locally compiled software. I also identify runtime versions such as Java, Python, PHP, Node.js and database clients. AceCloud's &lt;strong&gt;&lt;a href="https://acecloud.ai/blog/on-prem-to-iaas-migration-guide/" rel="noopener noreferrer"&gt;IaaS migration guide&lt;/a&gt;&lt;/strong&gt; uses dependency discovery as a core migration step, and that matters even more for legacy Linux. The hidden risk is rarely the RPM list. It is the script under /opt, the vendor daemon with an old library dependency or the certificate path hard-coded six years ago. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose a compatible successor before choosing a migration method&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;If the application expects the RHEL ecosystem, I evaluate supported enterprise Linux distributions that preserve familiar package and filesystem conventions. The exact choice depends on vendor certification, support requirements and organizational standards. I do not force a distribution because it is fashionable. I test the application on the target operating system in a clone or isolated environment, then document every incompatibility. If a dependency exists only on CentOS 7-era libraries, I look for a supported replacement, vendor update or isolated compatibility mechanism rather than copying obsolete system libraries across blindly. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prefer parallel reconstruction to risky in-place transformation&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;For critical services, I usually build a fresh target VM and move the application instead of attempting a major in-place conversion on the only production server. The new &lt;strong&gt;&lt;a href="https://acecloud.ai/cloud/compute/" rel="noopener noreferrer"&gt;cloud compute instance&lt;/a&gt;&lt;/strong&gt; can run beside the old one while we install packages, reproduce configuration and test data access. Configuration management or scripts should capture what we learn so the replacement is reproducible. For stateful data, I separate data migration from OS migration. Databases may use replication or dump and restore. File data may use repeated synchronization before cutover. Parallel build preserves rollback and makes troubleshooting far less stressful. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use containment when one dependency cannot move yet&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Sometimes one legacy component blocks the whole server upgrade. I isolate that component instead of allowing it to dictate the future of the entire stack. A compatible container can sometimes preserve an old user-space runtime while the host moves to a supported OS, provided the security implications are understood. A dedicated small VM can isolate a vendor component while the rest of the application modernizes. Reverse proxies and service boundaries can also help split the migration. These are transitional patterns, not excuses to keep unsupported software indefinitely. Every exception should have an owner and an exit plan. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use the migration to reduce unsupported dependencies&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I keep a dependency retirement list alongside the server migration plan. If the target build requires an obsolete Java runtime, unsupported database client or abandoned monitoring agent, I do not hide that fact just because the new operating system boots. I assign a follow-up milestone to remove or upgrade each exception. I also compare the restored application behavior with the old server under representative load, because a compatibility workaround can preserve functionality while changing performance. Security controls are retested as well, including SELinux mode, firewall policy and service accounts. The first migration milestone is supported infrastructure. The second is a cleaner application dependency chain. Separating those milestones keeps the project achievable while ensuring the temporary bridge does not become another decade of technical debt. I keep the old CentOS 7 VM isolated and powered down for a short rollback window rather than deleting it immediately. That gives the team a safety net without allowing both systems to accept writes. After the observation period, I remove the legacy copy and its credentials deliberately so the migration actually closes the risk. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Make the migrated server easier to replace next time&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;The most valuable outcome is not merely leaving CentOS 7. It is eliminating the conditions that made leaving so difficult. I move configuration into version control, externalize secrets, document package sources, standardize monitoring and create repeatable images. I avoid storing business data inside the root image when it can live on managed storage or a dedicated volume. I also record operating system lifecycle dates in the asset inventory. A legacy migration is expensive because the organization has to rediscover how the server works. The visionary move is to make the replacement transparent enough that the next OS lifecycle event becomes a planned rebuild rather than an archaeological project.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Why Cloud VM Clocks Matter for CERT-In Compliance and Incident Investigation</title>
      <dc:creator>Rakesh Tanwar</dc:creator>
      <pubDate>Mon, 07 Sep 2026 14:16:01 +0000</pubDate>
      <link>https://dev.to/rakesh_tanwar/why-cloud-vm-clocks-matter-for-cert-in-compliance-and-incident-investigation-4jf</link>
      <guid>https://dev.to/rakesh_tanwar/why-cloud-vm-clocks-matter-for-cert-in-compliance-and-incident-investigation-4jf</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcd3grlvny9rzuzife5ta.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcd3grlvny9rzuzife5ta.png" alt=" " width="799" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time is evidence, not a cosmetic server setting&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I think clock synchronization is one of the most underestimated controls in cloud operations. A VM can serve traffic perfectly while its clock is wrong by seconds or minutes, yet that small error can damage incident reconstruction, authentication, distributed tracing and legal evidence. In India, CERT-In directions require covered entities to synchronize ICT system clocks with NIC or NPL NTP sources, or with time sources traceable to them. The same directions require specified cyber incidents to be reported within six hours of noticing them. If clocks across firewalls, applications, databases and VMs disagree, answering when an event happened becomes much harder precisely when the organization is under pressure. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Incident timelines fail when systems disagree about time&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Imagine a compromised account that logs in to a web server, queries a database and transfers data through a gateway. If the web server is three minutes fast, the database is one minute slow and the gateway uses UTC without clear normalization, investigators can misorder the sequence. That affects root-cause analysis and can delay containment. AceCloud's &lt;strong&gt;&lt;a href="https://acecloud.ai/blog/draas-india-rto-rpo-sla-reality/" rel="noopener noreferrer"&gt;DRaaS guidance for India&lt;/a&gt;&lt;/strong&gt; also highlights CERT-In log retention and reporting obligations. I treat synchronized time as part of the same evidence chain. Logs are only useful when timestamps can be correlated across systems with confidence. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use a controlled hierarchy of trusted time sources&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I do not want every VM randomly reaching public NTP servers. I prefer a defined time architecture. Infrastructure nodes synchronize against approved upstream sources that meet organizational and regulatory requirements, and internal systems use those trusted sources or a controlled hierarchy. I monitor offset, synchronization state and source changes. For multi-region environments, I keep time in UTC at the system and logging layer, then convert to local time only in presentation. Time zone labels still matter because investigators need to know how timestamps were generated. Consistency is more important than what humans find most readable. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud images and autoscaling must inherit the same time policy&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;A manually configured production VM may have perfect NTP settings while newly launched autoscaled VMs use defaults from an old image. That is why I bake time configuration into baseline images and validate it during boot. Configuration management should correct drift, and monitoring should alert when synchronization is lost. A &lt;strong&gt;&lt;a href="https://acecloud.ai/cloud/compute/" rel="noopener noreferrer"&gt;standardized cloud compute&lt;/a&gt;&lt;/strong&gt; environment helps teams create repeatable VM templates, but the control is effective only if every instance follows the same policy. I also verify that containers, applications and managed agents use the host clock correctly and that logs include sufficient timestamp precision. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clock health belongs in security monitoring&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I monitor offset and synchronization just as I monitor CPU and disk health on critical systems. A sudden clock jump can break Kerberos, TLS validation, scheduled jobs or distributed databases. It can also create gaps or duplicates in logs. During an incident, I record the synchronization status of key systems so investigators know whether timestamps are trustworthy. For very sensitive environments, I retain evidence of NTP configuration and drift history. This may sound operationally small, but strong incident response depends on dozens of small controls that were functioning before the incident began. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Include time validation in every incident drill&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;During tabletop and recovery exercises, I ask the security team to build a timeline from several systems without first being told which clock is authoritative. This exposes drift, missing time zones and timestamp formats quickly. I also test what happens when a VM cannot reach its normal NTP source. It should fail visibly rather than drift silently for days. Configuration changes to time sources belong in change control because a seemingly harmless server tweak can affect every forensic event that follows. I keep synchronization configuration in code where possible and include clock offset in baseline health checks. These practices turn time from background plumbing into a measurable security dependency. When an incident occurs, investigators can spend their limited hours analyzing attacker behavior instead of reconciling basic chronology. I include hypervisors, network appliances and centralized logging systems in the same time policy. Synchronizing only application VMs still leaves gaps if the firewall or load balancer records events on a different clock. A forensic timeline is only as consistent as the least disciplined system contributing evidence. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design logs so a 180-day history is actually usable&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;CERT-In directions also require covered organizations to enable logs of ICT systems and securely retain them for a rolling period of 180 days within Indian jurisdiction. Retention without reliable time is weak evidence. My view is that clock synchronization, centralized logging, retention and incident reporting should be designed together. The log platform should preserve event time, ingestion time, source identity and time zone context where needed. Teams should be able to search across systems quickly and export evidence without rebuilding timelines by hand. When every system shares a trusted time reference, six hours is still a demanding incident window, but at least the organization is investigating one coherent timeline instead of twenty conflicting clocks.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Why Large Memory VMs Can Get Slower as You Add More RAM and How NUMA Changes the Result</title>
      <dc:creator>Rakesh Tanwar</dc:creator>
      <pubDate>Mon, 07 Sep 2026 13:14:01 +0000</pubDate>
      <link>https://dev.to/rakesh_tanwar/why-large-memory-vms-can-get-slower-as-you-add-more-ram-and-how-numa-changes-the-result-j0n</link>
      <guid>https://dev.to/rakesh_tanwar/why-large-memory-vms-can-get-slower-as-you-add-more-ram-and-how-numa-changes-the-result-j0n</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp5m8itxixrkglh2cv29x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp5m8itxixrkglh2cv29x.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;More memory can expose a topology problem&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I like large-memory VMs because they let databases, analytics engines and in-memory services keep a bigger working set close to the CPU. However, I do not assume that adding RAM always makes those workloads faster. On large physical hosts, memory is often arranged in NUMA nodes. Each processor socket or group of cores has memory that is local to it and can access memory attached to another node at a higher cost. When a workload expands across NUMA boundaries without awareness, some threads spend more time reaching remote memory. The result can be surprising. The VM has more RAM and fewer disk reads, yet latency gets worse because memory access itself has become less local. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NUMA is about distance inside the server&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Non-uniform memory access means that not every CPU reaches every byte of RAM with the same latency and bandwidth. The operating system and hypervisor try to keep threads and their memory close together, but large VMs can span multiple NUMA nodes. AceCloud's guidance on &lt;strong&gt;&lt;a href="https://acecloud.ai/blog/ram-intensive-workloads-optimization-use-cases-best-practices/" rel="noopener noreferrer"&gt;RAM-intensive workload optimization&lt;/a&gt;&lt;/strong&gt; calls out remote NUMA access as a pitfall, and I agree with that emphasis. Applications such as databases, JVMs, scientific codes and in-memory analytics can be particularly sensitive because they move large volumes of data through memory. The first step is simply to know whether the VM topology crosses NUMA nodes and whether the application is NUMA-aware. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A bigger VM can make the working set less local&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Consider a database that fits comfortably inside one NUMA node at 128 GB. If I resize it to a much larger VM, the virtual CPUs and memory may be distributed across several nodes. If the database has worker threads concentrated on one node while buffers are allocated across another, remote memory traffic grows. The application may also create more worker threads simply because more vCPUs are available, increasing contention on shared structures. Larger pages, garbage collectors and memory allocators can all interact with topology. I therefore compare memory bandwidth, remote access counters, CPU migrations and application latency before and after a resize instead of assuming bigger is automatically better. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep compute and memory topology aligned&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;For NUMA-sensitive workloads, I want vCPU placement and memory allocation to align. On operating systems that expose the topology, tools such as numactl and lscpu help show nodes and CPU mappings. Databases and JVMs may have their own NUMA guidance. I also avoid allocating every last gigabyte to the application because the OS, page cache, agents and filesystem still need headroom. In a &lt;strong&gt;&lt;a href="https://acecloud.ai/cloud/compute/" rel="noopener noreferrer"&gt;cloud compute&lt;/a&gt;&lt;/strong&gt; platform with memory-optimized instance families, I select the smallest shape that comfortably holds the working set and meets concurrency goals. That often produces better locality and lower cost than one enormous VM. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watch bandwidth, page faults and remote access, not just free RAM&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Traditional monitoring often shows used memory, free memory and swap. Those numbers do not tell me whether memory is close to the threads consuming it. For large systems, I care about memory bandwidth, cache misses, major page faults, swap activity, garbage collection time and NUMA locality when the guest exposes it. I also measure business outcomes. A database may show lower disk I/O after adding RAM but still process fewer transactions per second because remote memory and lock contention increased. Performance work fails when we optimize the metric that is easiest to see instead of the one that controls user experience. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test resize behavior before the production database needs it&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;NUMA problems are much easier to study in a controlled benchmark than during a memory emergency. I keep a representative dataset and workload that can be replayed on candidate VM sizes. Before resizing production, I compare throughput, p99 latency, garbage collection time, page faults and memory bandwidth on the current and larger shapes. If the application exposes thread pinning or NUMA controls, I test those settings rather than enabling them blindly. I also verify restart time because a much larger memory footprint can lengthen cache warm-up and database recovery. The winning instance is the one that meets the service objective with predictable behavior and reasonable headroom. More RAM is valuable when it reduces real bottlenecks. It is waste when it only increases the size and complexity of the failure domain. &lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Scale out when one giant memory domain becomes operationally awkward *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There is a point where continuing to scale one VM vertically becomes less attractive. Very large instances can have bigger failure domains, longer restart times, more complex NUMA behavior and expensive idle headroom. Some databases support replicas or sharding. Analytics platforms can distribute work. Caches can partition keys. I do not recommend scale-out merely because it is fashionable, but I do recommend comparing it with the next vertical resize. The strategic question is whether the application benefits more from one massive memory space or from several smaller and more predictable nodes. Large memory is powerful. It becomes truly useful when the software, topology and operating model are designed to use it deliberately.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>CERT-In Log Retention for Databases and What I Would Log Without Creating a New PII Risk</title>
      <dc:creator>Rakesh Tanwar</dc:creator>
      <pubDate>Thu, 03 Sep 2026 08:14:17 +0000</pubDate>
      <link>https://dev.to/rakesh_tanwar/cert-in-log-retention-for-databases-and-what-i-would-log-without-creating-a-new-pii-risk-4dc3</link>
      <guid>https://dev.to/rakesh_tanwar/cert-in-log-retention-for-databases-and-what-i-would-log-without-creating-a-new-pii-risk-4dc3</guid>
      <description>&lt;p&gt;Logging is one of the best tools we have for investigating database security incidents. &lt;/p&gt;

&lt;p&gt;It can also become a new sensitive-data repository if teams record everything indiscriminately. &lt;/p&gt;

&lt;p&gt;India's CERT-In directions require covered entities such as service providers, intermediaries, data centres, body corporates, and government organisations to enable logs of ICT systems and securely maintain them for a rolling period of 180 days within Indian jurisdiction. &lt;/p&gt;

&lt;p&gt;I do not interpret that as an instruction to copy every piece of personal data into logs. &lt;/p&gt;

&lt;p&gt;Good security logging records enough evidence to reconstruct important activity without turning the logging platform into a second uncontrolled database. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Log the event, not the entire customer record&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Suppose an application queries a customer's account. &lt;/p&gt;

&lt;p&gt;For security investigation, I may need to know which application identity connected, when it connected, where it connected from, which database it accessed, whether authentication succeeded, and what privileged activity followed. &lt;/p&gt;

&lt;p&gt;I usually do not need the customer's complete profile copied into the log line. &lt;/p&gt;

&lt;p&gt;This distinction is fundamental. &lt;/p&gt;

&lt;p&gt;Logs should describe activity. &lt;/p&gt;

&lt;p&gt;They should not duplicate business data unless there is a specific justified reason. &lt;/p&gt;

&lt;p&gt;For organisations using a &lt;strong&gt;&lt;a href="https://acecloud.ai/cloud/database/" rel="noopener noreferrer"&gt;managed database&lt;/a&gt;&lt;/strong&gt; platform, I would define database audit events alongside application and infrastructure events rather than logging without a data model. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authentication events matter&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I want visibility into successful and failed database authentication. &lt;/p&gt;

&lt;p&gt;User or service identity. &lt;/p&gt;

&lt;p&gt;Timestamp. &lt;/p&gt;

&lt;p&gt;Source system or address. &lt;/p&gt;

&lt;p&gt;Destination database. &lt;/p&gt;

&lt;p&gt;Authentication result. &lt;/p&gt;

&lt;p&gt;Relevant privilege context. &lt;/p&gt;

&lt;p&gt;Repeated failures can expose brute-force attempts, broken credentials, or misconfigured services. &lt;/p&gt;

&lt;p&gt;Successful access from an unusual source can be even more important. &lt;/p&gt;

&lt;p&gt;What I avoid is logging passwords, connection secrets, private keys, or complete authentication tokens. &lt;/p&gt;

&lt;p&gt;A log that contains secrets becomes an attack surface. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Privileged actions deserve strong visibility&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Routine SELECT activity on a busy application can generate enormous log volume. &lt;/p&gt;

&lt;p&gt;Privileged operations are different. &lt;/p&gt;

&lt;p&gt;Role changes. &lt;/p&gt;

&lt;p&gt;Permission grants. &lt;/p&gt;

&lt;p&gt;Database creation. &lt;/p&gt;

&lt;p&gt;Schema changes. &lt;/p&gt;

&lt;p&gt;User creation. &lt;/p&gt;

&lt;p&gt;Security configuration updates. &lt;/p&gt;

&lt;p&gt;Backup changes. &lt;/p&gt;

&lt;p&gt;Logging configuration changes. &lt;/p&gt;

&lt;p&gt;Destructive administrative actions. &lt;/p&gt;

&lt;p&gt;I want these events clearly attributable to an identity. &lt;/p&gt;

&lt;p&gt;If an attacker obtains administrative access, investigators need evidence of what changed. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Query logging needs judgement&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Logging every SQL statement can be useful in specific environments. &lt;/p&gt;

&lt;p&gt;It can also capture sensitive values embedded directly in SQL. &lt;/p&gt;

&lt;p&gt;A query might contain an email address, phone number, personal identifier, access token, or other data. &lt;/p&gt;

&lt;p&gt;I therefore prefer parameterised application queries and logging strategies that separate query structure from sensitive parameter values where possible. &lt;/p&gt;

&lt;p&gt;Fingerprinting or query identifiers can help with operational analysis without preserving every literal value. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Network metadata connects the story&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Database incidents rarely happen entirely inside the database. &lt;/p&gt;

&lt;p&gt;An application host is compromised. &lt;/p&gt;

&lt;p&gt;Credentials are used. &lt;/p&gt;

&lt;p&gt;Connections reach the database. &lt;/p&gt;

&lt;p&gt;Data is queried. &lt;/p&gt;

&lt;p&gt;Information leaves through another system. &lt;/p&gt;

&lt;p&gt;Network records help reconstruct that path. &lt;/p&gt;

&lt;p&gt;That is why I consider &lt;strong&gt;&lt;a href="https://acecloud.ai/cloud/network/" rel="noopener noreferrer"&gt;cloud networking and security controls&lt;/a&gt;&lt;/strong&gt; part of database observability. &lt;/p&gt;

&lt;p&gt;Database logs, firewall events, private-network records, authentication events, and application logs become much more useful when timestamps and identities can be correlated. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time synchronisation is essential&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;An incident timeline is useless if every system disagrees about time. &lt;/p&gt;

&lt;p&gt;Database server says 10.03. &lt;/p&gt;

&lt;p&gt;Application says 10.08. &lt;/p&gt;

&lt;p&gt;Network logs say 10.05. &lt;/p&gt;

&lt;p&gt;Now the incident team has to guess which event happened first. &lt;/p&gt;

&lt;p&gt;CERT-In's directions also address system clock synchronisation. &lt;/p&gt;

&lt;p&gt;From an engineering perspective, accurate consistent time is basic observability hygiene. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Protect the logs themselves&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Retention creates value only if logs remain trustworthy. &lt;/p&gt;

&lt;p&gt;Restrict write and deletion permissions. &lt;/p&gt;

&lt;p&gt;Encrypt storage. &lt;/p&gt;

&lt;p&gt;Control administrator access. &lt;/p&gt;

&lt;p&gt;Monitor attempts to change logging configuration. &lt;/p&gt;

&lt;p&gt;Consider immutable or append-oriented storage for important audit data. &lt;/p&gt;

&lt;p&gt;Separate ordinary application administrators from people who can erase security evidence where practical. &lt;/p&gt;

&lt;p&gt;An attacker who compromises a database account should not automatically gain the ability to delete the logs that record the compromise. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Retention should have an end&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;If an applicable requirement calls for a rolling 180-day period, I would automate that lifecycle. &lt;/p&gt;

&lt;p&gt;Keep the required evidence securely for the required period and delete it according to policy when there is no longer another lawful or operational need. &lt;/p&gt;

&lt;p&gt;Keeping security logs forever does not automatically improve security. &lt;/p&gt;

&lt;p&gt;It can create a larger archive of sensitive metadata waiting to be exposed. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Minimise PII before collection&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;The cheapest sensitive log to protect is the one you never created. &lt;/p&gt;

&lt;p&gt;I ask teams to review every field. &lt;/p&gt;

&lt;p&gt;Do we need a full email address or would an internal user identifier work? &lt;/p&gt;

&lt;p&gt;Do we need the request body? &lt;/p&gt;

&lt;p&gt;Do we need raw card-related data? &lt;/p&gt;

&lt;p&gt;Do we need complete SQL parameters? &lt;/p&gt;

&lt;p&gt;Do we need authentication tokens? &lt;/p&gt;

&lt;p&gt;Usually, the answer to several of those questions is no. &lt;/p&gt;

&lt;p&gt;Good logging is selective. &lt;/p&gt;

&lt;p&gt;Capture identity, time, action, source, destination, outcome, privilege changes, security-relevant database events, and enough context to investigate incidents. &lt;/p&gt;

&lt;p&gt;Do not use regulatory retention as an excuse to collect unnecessary personal data. &lt;/p&gt;

&lt;p&gt;That produces better forensic evidence and a smaller privacy risk at the same time. &lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
