Zero Trust Architecture

Zero Trust Architecture - An executive guide

ZTA operates on a fundamental principle - never trust, always verify. Lets understand what it is and how to implement it

March 23, 2024 · (updated December 21, 2024) · 12 min · Pradeep Loganathan
Principles of Cloud Native design - 12 Factor apps

Principles of Cloud Native design - 12 Factor apps

The twelve-factor app principles are a collection of best practices for building microservices-based cloud-native applications. These applications are modular, scalable, and agile. They are designed to perform at web scale and provide high resiliency.

August 12, 2022 · (updated December 21, 2024) · 11 min · Pradeep Loganathan
Terraform - getting started

Terraform - Getting Started

Terraform is an open source tool created by HashiCorp to define infrastructure as cod using a simple, declarative language called HCL. Terraform is used to deploy and manage infrastructure across a variety of cloud providers & virtualization platforms. It can be used to deploy infrastructure to all major cloud providers such as Azure, AWS, Digital ocean, and virtualization platforms such as VMware, Open stack, and others.

October 11, 2020 · (updated December 21, 2024) · 15 min · Pradeep Loganathan
Repository and Unit of work pattern in ASP.net core

Repository and Unit of work pattern in ASP.net core

A Repository is used to manage aggregate persistence and retrieval. The repository mediates between the data-access layer and the domain.The unit of work pattern keeps track of all changes to aggregates. Once all updates of the aggregates in a scope are completed, the tracked changes are played onto the database in a transaction

July 30, 2020 · (updated December 21, 2024) · 12 min · Pradeep Loganathan

How do you increment a counter? -

Many moons ago I was working on an online eCommerce platform. The platform used to undergo massive traffic spikes periodically. I was trying to implement a distributed counter. I was using a distributed counter because I wanted to be able to increment the counter on multiple servers. CAP Theorem The CAP theorem was proposed by Eric Brewer. CRDT CRDT stands for conflict-free replicated datatype. Conflict-free replicated datatype describe data-types that can be replicated across multiple computation units or nodes, they can be updated concurrently without any coordination, and then merged to get a consistent state. It doesn’t matter in which order you execute operations on the data type or if you repeat operations the result is eventually correct. Each node in a distributed system has its own replica of the CRDT. Each replica can resolve queries in isolation and can also process commands that immediately alter its state. CRDTs they can be concurrently updated across nodes and any conflicts can be resolved sensibly. CRDTs always have a merge function that can take many data entries living on different nodes and merge these automatically into one consistent view of the data, without any coordination between the nodes. CRDTs allow two conflicting updates to be merged. All replicas will converge to the same state when all updates have been delivered. The most important properties of the merge function are that it is symmetric and monotonic. The issue that CRDTs address is conflict resolution when different versions of the structure appear due to network partitions and their eventual repair. For a general data structure, if there are two conflicting versions, the solution is either to choose one (according to some general rules, like take the random one or the latest one, or application-specific logic) or to keep both versions and defer conflict resolution to the client code. CRDTs are conflict-free, that is, the structures are devised so that any conflict is resolved automatically in a way that doesn’t bring any data loss or corruption. ...

September 2, 2019 · (updated December 21, 2024) · 3 min · Pradeep Loganathan

Sidecar container pattern

Sidecar pattern is a single-node pattern made up of two containers. It involves co-locating another container in a node/pod along with the main application container. The application container contains the core logic for the application. The role of the sidecar is to augment and improve the application container, often without the application container’s knowledge. In its simplest form, a sidecar container can be used to add functionality to a container that might otherwise be difficult to add. In addition to being co-located on the same machine, the application container and sidecar container share several resources, including parts of the filesystem, hostname and network, and many other namespaces. The sidecar can be plugged and unplugged from the main application, since it is isolated and cannot impact the application in case it starts misbehaving. ...

July 24, 2019 · (updated December 21, 2024) · 3 min · Pradeep Loganathan
Transactional Outbox Pattern

Transactional Outbox Pattern

Transactional Outbox is a pattern to reliably publish messages without the use of distributed transactions. It uses an Outbox and a message dispatcher to reliably persist state and publish messages.

July 16, 2019 · (updated December 21, 2024) · 10 min · Pradeep Loganathan
Event Driven Architecture

Event Driven Architecture

Event driven architecture (EDA) is an architectural paradigm where behavior is composed by reacting to events. In this paradigm events imply a significant change in state.

July 1, 2019 · (updated December 21, 2024) · 17 min · Pradeep Loganathan
API Gateway - Should you build one?

API Gateway - Should you build one?

An API Gateway provides a single and unified API entry point across one or more internal APIs. It mediates, routes, and invokes a respective endpoint after request verification, content filtering, authentication, and authorization.

January 15, 2019 · (updated February 2, 2024) · 6 min · Pradeep Loganathan
Circuit Breaker pattern

Circuit Breaker Pattern

Circuit breakers help to avoid one failing component tearing down other dependent services in a domino effect. The key idea is for a service to fail fast if a dependent resource is not available, as opposed to waiting for a timeout/error for each service invocation during the period in which the dependent resource is down.

September 21, 2018 · (updated December 21, 2024) · 4 min · Pradeep Loganathan