cover

Abstracting Cloud Providers and On Premise with Rancher

This is the first part of a two-part blog series that explains how multi-cloud deployment is achieved using Rancher and ArgoCD at Equativ. In today’s cloud-native landscape, organizations often run Kubernetes workloads across multiple environments - public clouds like AWS, Google Cloud, as well as on-premises data centers. However, managing the clusters across different platforms can be challenging and adds operational complexity. Rancher simplifies multi-cluster Kubernetes management by providing a unified control plane that abstracts the underlying infrastructure, whether it’s a cloud provider or an on-premises environment....

cover

Multi-cloud deployment with Rancher and ArgoCD

In cloud native world, where the company focusses on having multi cloud presence, it can get messy real quick when there are multiple Kubernetes clusters to manage across various platforms. Rancher solves this problem by abstracting the underlying infrastructure and with that we can manage all our K8s clusters under a single dashboard. At Equativ we extend this to Deployments too by integrating Rancher with ArgoCD. While Rancher abstracts the infrastructure, ArgoCD will make the deployment process smooth....

cover

Troubleshooting .NET performance issues by modding in production using Harmony

We’ve all been there — an application that was running smoothly suddenly starts behaving unpredictably. CPU spikes, erratic memory usage, and sluggish performance with no obvious culprit. Recently, we faced such an issue in one of our applications, where CPU usage fluctuated wildly between 20% and 100%. Digging deeper, we uncovered unexpected memory allocations and garbage collection behavior, leading us on a journey through profiling, memory dumps, and even some ad hoc solution to track down the root cause....

cover

Optimizing dynamic collections with predictive sizing

Dynamic collections, such as the dynamic array (also known as a List in C#), are without a doubt one of the most common data structure, and not only in C# but in computer science in general. The dotnet base class library exposes plenty of dynamic collections to fulfil a wide number of usecases: (System.Collections.)List<T>, Dictionary<K, V>, HashSet<T>, Queue<T>, Stack<T>, and more. But they all share one thing in common: they are based on dynamic reallocation of backing arrays, which can lead to suboptimal performance and excessive memory allocation....

cover

A solution to gitlab package registry 429's errors

The GitLab CI ecosystem is full of features and integrations that make it a powerful tool for building, testing, and deploying your applications. It comes with an integrated package registry to share and manage your packages. However, the GitLab SaaS API (gitlab.com) comes with rate-limits which can be a problem for scaling CI/CD pipelines, and quite frustrating when you hit them. In this article, I will share a solution I find odd yet very effective: implementing a caching proxy in front of the NuGet GitLab package registry....

cover

Challenges & memory considerations for in-memory caching

In this article I’d like to share my journey learning about caching, and my research on how to make it more efficient. This article is the first in a serie of articles about caching, and here we’ll start by discussing the challenges and memory considerations when doing in-memory caching. This was done as part of my day job as a Staff backend engineer at Equativ, a leading provider of digital advertising solutions, offering a range of products and services to help businesses reach their target audiences and achieve their marketing goals....