<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Denis AKPAGNONITE</title>
  <link>https://denisakp.me</link>
  <description>Cloud-native, DevOps, SRE, and distributed systems.</description>
  <language>en</language>
  <atom:link href="https://denisakp.me/rss.xml" rel="self" type="application/rss+xml" />
  <lastBuildDate>Thu, 23 Jul 2026 11:29:23 GMT</lastBuildDate>
  <item>
    <title>Decree 2018-062 and Kubernetes: The Gap Between the Text and the Implementation</title>
    <link>https://denisakp.me/blog/kubernetes/decret-2018-062-kubernetes-gap</link>
    <guid isPermaLink="true">https://denisakp.me/blog/kubernetes/decret-2018-062-kubernetes-gap</guid>
    <pubDate>Thu, 23 Jul 2026 00:00:00 GMT</pubDate>
    <description>Decree 2018-062, which implements Togo&apos;s law 2017-007 on electronic transactions, imposes obligations on security, traceability, retention and continuity. But those obligations were written with a physical server or VM in mind. Kubernetes introduces ephemeral pods, dynamic scheduling, volumes provisioned on the fly, and Operators. This article maps each obligation to its native Kubernetes equivalent, exposes the real gaps where the tool does not answer the text, and proposes implementation patterns. A legal-technical angle, not a tutorial.</description>
    <category>Compliance</category>
    <category>Kubernetes</category>
    <category>Data-Protection</category>
    <category>Togo</category>
    <category>Governance</category>
    <category>kubernetes</category>
    <category>platform-engineering</category>
    <category>security</category>
  </item>
  <item>
    <title>How Two-Phase Locking Keeps Concurrent Bank Transactions From Corrupting Your Data</title>
    <link>https://denisakp.me/blog/databases/two-phase-locking</link>
    <guid isPermaLink="true">https://denisakp.me/blog/databases/two-phase-locking</guid>
    <pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate>
    <description>Two transfers hit the same account in the same millisecond and one payment vanishes. This is the lost update, and it is why every payment ledger runs on a concurrency control layer. This article builds the theory from a fintech example up to two-phase locking (2PL): the transaction model, the math of conflict-serializability and the precedence graph, why the 2PL theorem guarantees correctness, pessimistic versus optimistic control in PostgreSQL, strict 2PL, and how deadlocks are detected and prevented.</description>
    <category>Databases</category>
    <category>Concurrency</category>
    <category>Transactions</category>
    <category>PostgreSQL</category>
    <category>Distributed-Systems</category>
    <category>databases</category>
    <category>backend</category>
  </item>
  <item>
    <title>Load Balancing Algorithms: Each One Fixes the Last One&apos;s Flaw</title>
    <link>https://denisakp.me/blog/backend/load-balancing/load-balancing-algorithms</link>
    <guid isPermaLink="true">https://denisakp.me/blog/backend/load-balancing/load-balancing-algorithms</guid>
    <pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate>
    <description>Spreading requests across N servers sounds like a one-liner: pick a server, send the request. Then one backend is slower, or bigger, or holds a session, and the naive choice falls apart. This walks the classic algorithms as a chain where each one exists to fix the previous one&apos;s blind spot: round robin, weighted, least connections, power of two choices, and consistent hashing, in Go, ending with the failure every tutorial forgets.</description>
    <category>Load-Balancing</category>
    <category>Go</category>
    <category>Distributed-Systems</category>
    <category>Resilience</category>
    <category>backend</category>
    <category>resilience</category>
    <category>platform-engineering</category>
  </item>
  <item>
    <title>From RBAC to ReBAC: Migrating a Role System to OpenFGA Without Downtime</title>
    <link>https://denisakp.me/blog/security/authz/rbac-to-rebac</link>
    <guid isPermaLink="true">https://denisakp.me/blog/security/authz/rbac-to-rebac</guid>
    <pubDate>Sun, 19 Jul 2026 00:00:00 GMT</pubDate>
    <description>Roles work until someone says &apos;share just this document with just this person.&apos; That is the day RBAC runs out of road. This is the practical migration: mapping role tables to relation tuples, running OpenFGA in shadow next to your SQL checks, backfilling safely, and only then unlocking the per-object sharing and hierarchy that roles never could. With the traps nobody warns you about.</description>
    <category>Authorization</category>
    <category>ReBAC</category>
    <category>RBAC</category>
    <category>OpenFGA</category>
    <category>Migration</category>
    <category>authz</category>
    <category>backend</category>
    <category>platform-engineering</category>
  </item>
  <item>
    <title>Zanzibar Demystified: How Google Answers &apos;Can This User Do This?&apos;</title>
    <link>https://denisakp.me/blog/security/authz/zanzibar-explained</link>
    <guid isPermaLink="true">https://denisakp.me/blog/security/authz/zanzibar-explained</guid>
    <pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate>
    <description>Authorization looks like a one-line if statement until you run it ten million times a second across every product Google ships. Zanzibar is the system that made that question fast, consistent and global. This walks from the naive permission check to relationship-based access control, the tuple model, consistency with zookies, and the open-source heirs like OpenFGA you can actually run today.</description>
    <category>Authorization</category>
    <category>ReBAC</category>
    <category>Security</category>
    <category>Distributed-Systems</category>
    <category>OpenFGA</category>
    <category>authz</category>
    <category>backend</category>
    <category>platform-engineering</category>
  </item>
  <item>
    <title>Retry Storms: How Good Clients Take Down Healthy Servers</title>
    <link>https://denisakp.me/blog/backend/api-design/retry-storms</link>
    <guid isPermaLink="true">https://denisakp.me/blog/backend/api-design/retry-storms</guid>
    <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
    <description>A retry looks harmless: the request failed, so try again. Multiply that by every client, add one slow dependency, and retries turn into a self-inflicted DDoS. This walks from the naive retry loop to exponential backoff, jitter, retry budgets and circuit breakers, the caller-side half of resilience that pairs with rate limiting on the server.</description>
    <category>Resilience</category>
    <category>Distributed-Systems</category>
    <category>Go</category>
    <category>Retries</category>
    <category>backend</category>
    <category>platform-engineering</category>
    <category>resilience</category>
  </item>
  <item>
    <title>Why Redis Rate Limiting Breaks at Scale (and What Uber Does Instead)</title>
    <link>https://denisakp.me/blog/backend/api-design/rate-limiting-at-scale</link>
    <guid isPermaLink="true">https://denisakp.me/blog/backend/api-design/rate-limiting-at-scale</guid>
    <pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate>
    <description>A token bucket in memory is trivial. Put it behind Redis and it works, until it doesn&apos;t. This walks through rate limiting from one node, to a shared Redis, to why that model collapses at millions of requests per second, and the shift Uber made: enforce locally, coordinate globally, and drop by probability.</description>
    <category>Rate-Limiting</category>
    <category>Distributed-Systems</category>
    <category>Go</category>
    <category>Performance</category>
    <category>backend</category>
    <category>platform-engineering</category>
    <category>resilience</category>
  </item>
  <item>
    <title>Protobuf FieldMask for Writes: One Update Endpoint, No Ambiguity</title>
    <link>https://denisakp.me/blog/backend/api-design/protobuf-fieldmask-mutations</link>
    <guid isPermaLink="true">https://denisakp.me/blog/backend/api-design/protobuf-fieldmask-mutations</guid>
    <pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate>
    <description>A single Update method that changes only the fields you name, with no endpoint per field and no clobbering the rest. How the update_mask brings clean PATCH semantics to gRPC: setting, clearing, nested paths, and the empty-mask trap that can silently wipe data.</description>
    <category>gRPC</category>
    <category>Protobuf</category>
    <category>API-Design</category>
    <category>Mutations</category>
    <category>backend</category>
  </item>
  <item>
    <title>Protobuf FieldMask: Let Your API Clients Ask for Only What They Need</title>
    <link>https://denisakp.me/blog/backend/api-design/protobuf-fieldmask</link>
    <guid isPermaLink="true">https://denisakp.me/blog/backend/api-design/protobuf-fieldmask</guid>
    <pubDate>Fri, 03 Jul 2026 00:00:00 GMT</pubDate>
    <description>One endpoint, many callers, some very expensive fields. Protobuf FieldMask lets each client declare exactly which fields it wants, so your server can skip the costly database queries, remote calls and payload it doesn&apos;t need. The idea, a classic example, and the traps.</description>
    <category>gRPC</category>
    <category>Protobuf</category>
    <category>API-Design</category>
    <category>Performance</category>
    <category>backend</category>
  </item>
  <item>
    <title>Setting Up a PostgreSQL HA Cluster with Patroni and etcd</title>
    <link>https://denisakp.me/blog/databases/postgres/setup-postgres-ha-cluster</link>
    <guid isPermaLink="true">https://denisakp.me/blog/databases/postgres/setup-postgres-ha-cluster</guid>
    <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
    <description>How to build a PostgreSQL high-availability cluster with automatic failover using Patroni, etcd, HAProxy and Keepalived. Learn the architecture, prerequisites, and step-by-step deployment so any node failure is handled with zero app changes.</description>
    <category>PostgreSQL</category>
    <category>High-Availability</category>
    <category>Patroni</category>
    <category>etcd</category>
    <category>HAProxy</category>
    <category>Keepalived</category>
    <category>databases</category>
    <category>postgresql</category>
    <category>high-availability</category>
    <category>resilience</category>
  </item>
  <item>
    <title>Why I built my own MongoDB image to run a replica set in production</title>
    <link>https://denisakp.me/blog/databases/mongo/set-up-mongodb-replica-with-docker</link>
    <guid isPermaLink="true">https://denisakp.me/blog/databases/mongo/set-up-mongodb-replica-with-docker</guid>
    <pubDate>Sat, 13 Dec 2025 00:00:00 GMT</pubDate>
    <description>A field report: deploying a 3-node MongoDB replica set with Docker, and why baking the config into a custom image instead of mounting volumes makes deployments reproducible across environments that don&apos;t look alike.</description>
    <category>MongoDB</category>
    <category>Replica-Set</category>
    <category>Docker</category>
    <category>Docker-compose</category>
    <category>databases</category>
    <category>docker</category>
    <category>mongodb</category>
    <category>resilience</category>
  </item>
  <item>
    <title>How a job interview led me to create Obscura - A password generator with real entropy</title>
    <link>https://denisakp.me/blog/security/introducing-obscura</link>
    <guid isPermaLink="true">https://denisakp.me/blog/security/introducing-obscura</guid>
    <pubDate>Sun, 13 Apr 2025 00:00:00 GMT</pubDate>
    <description>From interview challenge to open-source tool, to building a secure password generator with real entropy in mind.</description>
    <category>Security</category>
    <category>Open Source</category>
  </item>
  <item>
    <title>Backup and Restore MongoDB in a Docker Environment</title>
    <link>https://denisakp.me/blog/databases/mongo/backup-and-restore-mongodb-in-docker-environment</link>
    <guid isPermaLink="true">https://denisakp.me/blog/databases/mongo/backup-and-restore-mongodb-in-docker-environment</guid>
    <pubDate>Thu, 18 Jul 2024 00:00:00 GMT</pubDate>
    <description>How to create a full backup of a MongoDB database running in a Docker container and restore the backup to a new MongoDB container.</description>
    <category>MongoDB</category>
    <category>Docker</category>
    <category>Docker-compose</category>
    <category>Backup</category>
    <category>Restore</category>
    <category>databases</category>
    <category>docker</category>
    <category>mongodb</category>
  </item>
  <item>
    <title>Deploy Express.js API using Docker</title>
    <link>https://denisakp.me/blog/docker/deploy-expressjs-api-using-docker</link>
    <guid isPermaLink="true">https://denisakp.me/blog/docker/deploy-expressjs-api-using-docker</guid>
    <pubDate>Thu, 11 Apr 2024 00:00:00 GMT</pubDate>
    <description> How to deploy Express.js RESTFull API using Docker, with a focus on MongoDB performance, docker multi-stage builds, Jest for testing, and Nginx as a reverse proxy.</description>
    <category>Express.JS</category>
    <category>API</category>
    <category>Node.js</category>
    <category>Mongo</category>
    <category>CI/CD</category>
    <category>Docker</category>
    <category>docker</category>
    <category>backend</category>
    <category>devops</category>
  </item>
  <item>
    <title>Mastering NestJS: Unlocking the Power of Relationships with TypeORM and SQL Databases</title>
    <link>https://denisakp.me/blog/backend/nest-js/unlocking-the-power-of-relationships-with-typeorm</link>
    <guid isPermaLink="true">https://denisakp.me/blog/backend/nest-js/unlocking-the-power-of-relationships-with-typeorm</guid>
    <pubDate>Wed, 18 Oct 2023 00:00:00 GMT</pubDate>
    <description>Unlock the Power of Data Relationships with NestJS, TypeORM, and SQL Databases. Master the art of building complex data structures and seamless interactions. Ideal for both seasoned NestJS developers and beginners looking to create cutting-edge apps</description>
    <category>Nest-JS</category>
    <category>Mirco-service</category>
    <category>API</category>
    <category>nest-js</category>
    <category>backend</category>
  </item>
  <item>
    <title>Mastering NestJS: Connecting NestJs to PostgreSQL Database </title>
    <link>https://denisakp.me/blog/backend/nest-js/conecting-nestjs-to-postgres-database</link>
    <guid isPermaLink="true">https://denisakp.me/blog/backend/nest-js/conecting-nestjs-to-postgres-database</guid>
    <pubDate>Wed, 06 Sep 2023 00:00:00 GMT</pubDate>
    <description>Learn the Essential Steps to Master NestJS and Leverage TypeORM for Robust Database Connectivity in Your Projects.</description>
    <category>Nest-JS</category>
    <category>Mirco-service</category>
    <category>API</category>
    <category>backend</category>
    <category>nest-js</category>
  </item>
  <item>
    <title>Mastering NestJS: Understanding Services, Modules, and Controllers</title>
    <link>https://denisakp.me/blog/backend/nest-js/understanding-services-modules-and-controllers</link>
    <guid isPermaLink="true">https://denisakp.me/blog/backend/nest-js/understanding-services-modules-and-controllers</guid>
    <pubDate>Sun, 03 Sep 2023 00:00:00 GMT</pubDate>
    <description>Learn about the essential components of NestJS for building scalable server-side apps. Examine the functions of services, modules, and controllers while using the capabilities of DTOs (Data Transfer Objects) for data validation and increased security.</description>
    <category>Nest-JS</category>
    <category>Mirco-service</category>
    <category>API</category>
    <category>nest-js</category>
    <category>backend</category>
  </item>
  <item>
    <title>Mastering NestJS: Your Ultimate Guide to Modern Backend Development</title>
    <link>https://denisakp.me/blog/backend/nest-js/introducing-nest-js</link>
    <guid isPermaLink="true">https://denisakp.me/blog/backend/nest-js/introducing-nest-js</guid>
    <pubDate>Wed, 23 Aug 2023 00:00:00 GMT</pubDate>
    <description>Explore NestJS, a modern Node.js framework, in this comprehensive introduction. Join our series to master modular architecture, controllers, providers, services, and more. Build scalable backend applications with confidence. Welcome to Part 1 of the NestJS Series!</description>
    <category>Nest-JS</category>
    <category>Mirco-service</category>
    <category>API</category>
    <category>nest-js</category>
    <category>backend</category>
  </item>
  <item>
    <title>Bubble Sort Unveiled: Sorting Simplified with Python</title>
    <link>https://denisakp.me/blog/dsa/buble-sort</link>
    <guid isPermaLink="true">https://denisakp.me/blog/dsa/buble-sort</guid>
    <pubDate>Wed, 09 Aug 2023 00:00:00 GMT</pubDate>
    <description>Dive into the fundamentals of the bubble sort algorithm in Python and unravel a straightforward approach to sorting. This post guides you through the inner workings of bubble sort, showcases hands-on code examples, and highlights its strengths and limitations for practical use.</description>
    <category>Algorithms</category>
    <category>dsa</category>
  </item>
  <item>
    <title>Efficiently Sorting Lists: Mastering the Insertion Sort Algorithm in Python</title>
    <link>https://denisakp.me/blog/dsa/insertion-sort</link>
    <guid isPermaLink="true">https://denisakp.me/blog/dsa/insertion-sort</guid>
    <pubDate>Thu, 06 Jul 2023 00:00:00 GMT</pubDate>
    <description>Discover the power of the insertion sort algorithm in Python and learn how to efficiently sort lists for improved data organization. Explore step-by-step implementation, practical examples, and tips for optimizing sorting performance.</description>
    <category>Algorithms</category>
    <category>dsa</category>
  </item>
  <item>
    <title>Mastering the Quick Sort Algorithm in Python: A Comprehensive Guide</title>
    <link>https://denisakp.me/blog/dsa/quick-sort</link>
    <guid isPermaLink="true">https://denisakp.me/blog/dsa/quick-sort</guid>
    <pubDate>Thu, 06 Jul 2023 00:00:00 GMT</pubDate>
    <description>Dive into the world of sorting data structure algorithms with our in-depth guide on the Quick Sort algorithm in Python. Learn the inner workings of this efficient sorting technique, step by step. Explore implementation strategies, best practices, and performance optimization tips for seamless integration into your projects</description>
    <category>Algorithms</category>
    <category>dsa</category>
  </item>
  <item>
    <title>My Journey to AWS Cloud Practitioner Certification</title>
    <link>https://denisakp.me/blog/cloud/aws/how-i-passed-clf-exam</link>
    <guid isPermaLink="true">https://denisakp.me/blog/cloud/aws/how-i-passed-clf-exam</guid>
    <pubDate>Thu, 01 Jan 1970 00:00:00 GMT</pubDate>
    <description>[object Object]</description>

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