Bài 0 — Giới Thiệu Series

Infrastructure Handbook — Từ First Principles đến Production Bộ tài liệu chuyên sâu về hạ tầng cho hệ thống backend, viết cho Software/Backend/Senior Engineer, Tech Lead và Architect. Mục tiêu không phải liệt kê khái niệm — mà là giúp bạn hiểu tại sao mỗi công nghệ tồn tại, nó đánh đổi điều gì, và làm sao thiết kế/vận hành/debug hệ thống production. Cấu trúc Module Nội dung Vì sao đọc 01 — Networking Fundamentals OSI/TCP-IP, IP/CIDR/NAT, TCP, UDP, DNS, HTTP 1.1→3, QUIC, TLS Nền của mọi thứ; 80% sự cố “bí ẩn” nằm ở đây 02 — Backend Networking Connection pooling, LB, CDN, WebSocket, gRPC, service discovery, timeout/retry/circuit breaker Cách service nói chuyện với nhau cho đáng tin cậy 03 — Linux Internals Process/thread/scheduler, memory, fd, epoll, signal, cgroup/namespace, OOM Mọi thứ deploy đều là process Linux; hiểu nó = debug được mọi tầng trên 04 — Container Docker/containerd/runc, image/layer/overlayfs, networking, storage, security Container = process được cách ly, không phải VM nhẹ 05 — Kubernetes Reconciliation model, Pod/probe, controllers, Service/Ingress, scheduler, autoscaling, volume Hệ điều khiển hội tụ trạng thái — nắm mô hình, chi tiết tự sáng 06 — CI/CD Pipeline, artifact bất biến, rolling/blue-green/canary, rollback, feature flag, GitOps Quản lý rủi ro thay đổi — nguồn sự cố số 1 07 — Cloud Infrastructure VPC/subnet/routing, SG, NAT, managed services, autoscaling, multi-region, cost Topology và kinh tế học của cloud 08 — Observability Logging, metrics/Prometheus, tracing/OTel, SLI/SLO/SLA, alerting Không đo được thì không vận hành được 09 — Reliability Engineering HA, DR/RTO/RPO, bulkhead, degradation, load shedding, chaos engineering, postmortem Thiết kế để phục vụ user khi mọi thứ đang hỏng 10 — Security TLS/mTLS, JWT/OAuth2, secret management, WAF/DDoS, container & K8s security Defense in depth + least privilege như thuộc tính kiến trúc 11 — Kiến trúc thực tế E-commerce, FinTech, Social, SaaS, Video, Messaging, Blockchain, AI Platform Bài tập tổng hợp: từ workload suy ra kiến trúc Cách đọc Đọc tuần tự lần đầu: các module xây trên nhau có chủ đích (TCP slow start ở module 01 giải thích connection pooling ở module 02; cgroup ở module 03 giải thích CPU throttling ở module 05; retry ở module 02 quay lại trong FinTech ở module 11). Lộ trình theo vai trò: Backend Engineer: 01 → 02 → 03 → 08, rồi phần còn lại. Tiếp quản vận hành Kubernetes: 03 → 04 → 05 → 08 → 09. Chuẩn bị lên Architect: đọc hết, dừng lâu ở mọi bảng trade-off và module 11. Dùng làm tài liệu tra cứu sự cố: mỗi module có bảng troubleshooting/lệnh Linux; module 03 có bảng “triệu chứng → lệnh đầu tiên” đáng in ra. Triết lý của bộ tài liệu Mỗi chủ đề đi theo mạch: vấn đề gì → vì sao giải pháp cũ không đủ → công nghệ này hoạt động thế nào bên trong → đánh đổi cái gì → dùng ở production ra sao → khi nào KHÔNG dùng → hỏng thì debug thế nào. Mọi kết luận kỹ thuật đều phải trả lời được: tại sao, đánh đổi gì, và điều gì xảy ra nếu làm ngược lại. ...

February 1, 2026 · 3 min

Chuyện mình triển khai Rule Engine trong backend

Chào mọi người, gần đây khi mình chuyển sang công việc mới với một ngôn ngữ lập trình khác, mình có cơ hội tham gia thiết kế một hệ thống rule engine để đáp ứng các yêu cầu business của công ty. Trong quá trình tìm hiểu và research, mình muốn ghi lại những kiến thức đã học được, đồng thời chia sẻ lại theo một scope phổ biến hơn để phù hợp với nhiều mô hình business hiện nay. Bài viết này vừa để mình hệ thống hóa kiến thức, vừa hy vọng giúp ích cho những bạn đang quan tâm đến rule engine. ...

November 29, 2025 · 7 min

Hiểu rõ cách hoạt động của RabbitMQ Exchange khi dùng NestJS Microservice

Trong quá trình làm việc với microservice trong NestJS, mình chủ yếu dùng RabbitMQ microservice transport. Bản chất là các service giao tiếp qua message broker (RabbitMQ), chứ không gọi HTTP trực tiếp. Mỗi service có thể đóng vai trò: Publisher: gửi message Consumer: nhận message Khi gửi message, service sẽ publish đến exchange — đây là nơi định tuyến trung gian. RabbitMQ dùng binding rule giữa exchange và các queue để quyết định message sẽ được gửi đến queue nào. Các service khác (consumer) sẽ subscribe vào queue, lắng nghe message được định tuyến đến đó và xử lý. ...

October 14, 2025 · 5 min

Hiểu về các mức Isolation trong Transaction của SQL

Thời gian gần đây khi mình tham gia các buổi phỏng vấn ở vị trí backend thì thường xuyên được hỏi đến các câu hỏi về database, trong đó chủ yếu xoay quanh transaction. Vậy nên trong bài viết hôm nay mình sẽ cùng ôn lại kiến thức về nó nhé. Nội dung này mình không rành lắm nên chủ yếu là góp nhặt và tích luỹ để viết cho bản thân nhớ lâu hơn — cũng tiện chia sẻ cho các bạn hữu duyên nếu đọc được. ...

October 8, 2025 · 5 min

Những điều mình học được về Index trong MongoDB

Khi làm việc với MongoDB, chắc hẳn bạn đã nghe đến index - một khái niệm tưởng đơn giản nhưng lại có ảnh hưởng rất lớn đến hiệu năng của hệ thống. Nếu không hiểu rõ cách hoạt động của index, bạn có thể khiến truy vấn chậm đi đáng kể, hoặc tốn nhiều tài nguyên mà không biết lý do. Trong bài viết này, mình sẽ chia sẻ một cách dễ hiểu nhất về index trong MongoDB: nó là gì, tại sao cần dùng, có những loại nào và hoạt động ra sao. ...

October 5, 2025 · 5 min

Triển khai microservice với GraphQL Federation

Trong quá trình làm việc, team mình từng triển khai một hệ thống microservice với hơn 20 service hoạt động độc lập. Để kết nối các service này vào một API thống nhất cho client sử dụng, bọn mình đã áp dụng GraphQL Federation. Bài viết này sẽ chia sẻ lại cách tiếp cận đó — cách mà Federation giúp gom nhiều service lại thành một GraphQL API duy nhất, đơn giản cho phía client nhưng vẫn linh hoạt cho backend. ...

September 22, 2025 · 6 min

SOLID - Ngũ tuyệt trong thế giới lập trình (Phiên bản kiếp hiệp)

Hôm nay, trong một buổi chiều cuối thu ở Sài Gòn nhộn nhịp, có một chàng trai đang ngồi ôn lại kiến thức để chuẩn bị tham gia phỏng vấn trong căn nhà nhỏ. Bên ngoài cửa sổ, trời đang đổ những cơn mưa rào kèm những đợt sấm chớp lan man. Lòng ta lại suy tư về một thứ gì đó muốn được viết ra cho nhẹ nỗi lòng, thôi thì ta hãy cùng viết về SOLID nhé. ...

September 10, 2025 · 8 min

PostgreSQL xử lý câu lệnh DML như thế nào?

Khi làm việc với database chắc hẳn chúng ta đã quen với các câu lệnh như SELECT, UPDATE, INSERT, DELETE,… Giả sử khi chạy một câu lệnh INSERT INTO ... để thêm record vào DB thì bên trong cơ sở dữ liệu sẽ làm những gì để xử lý? Trong bài viết này, hãy cùng mình tìm hiểu đằng sau một câu lệnh SQL khi thực thi sẽ đi qua những bước gì nhé. ...

September 7, 2025 · 6 min

Lập kế hoạch công việc hiệu quả với SMART

Chắc hẳn bạn đã quá quen thuộc với việc làm việc trong các team theo các mô hình quản lý như Agile, đặc biệt là trong các công ty lớn. Vì vậy hôm nay mình sẽ chia sẻ cho các bạn cách có thể làm việc hiệu quả hơn khi muốn đóng góp nhiều hơn vào các buổi planning, muốn nhận được đánh giá tốt hơn từ team, hoặc khi các bạn làm cho startup nơi đòi hỏi nỗ lực cá nhân cao do thiếu hụt về resource. Đó chính là lập kế hoạch theo quy tắc SMART. ...

August 29, 2025 · 6 min

Designing a virtual tag module in FinOps

Khi làm việc với các hệ thống FinOps thì có 2 thứ quan trọng chúng ta cần phải quan tâm đó chính là perspective, thứ 2 là showback và chargeback. Trong bài viết này mình sẽ chia sẻ lại tại sao chúng quan trọng và làm sao để có thể dễ dàng quản lý chúng bằng module virtual tag trong các hệ thống FinOps. Bắt đầu nào, dĩ nhiên là ngoài những cái này ra thì FinOps cũng có rất nhiều thứ quan trọng cần phải chú ý nhưng ở đây ta chỉ nói về những cái này thôi nhé. ...

August 17, 2025 · 5 min

Kubernetes Components

The architecture of Kubernetes is divided into two main parts: 1. Control Plane Components The Control Plane is the brain of Kubernetes — responsible for managing the overall state of the cluster and orchestrating all activities. 1.1 kube-apiserver Acts as the central communication gateway of the system. All requests from kubectl, the Dashboard, CI/CD pipelines, etc., are sent through this component. Responsible for: Authentication Authorization Reading/writing data from/to etcd Forwarding requests to other components Example: You run kubectl get pods → the request goes to the kube-apiserver. ...

June 29, 2025 · 3 min

Kubernetes Concepts

When learning Kubernetes, there are two core concepts you should understand: Kubernetes Object Model and Declarative Management. Let’s break down both of these. 1. Kubernetes Object Model Everything in Kubernetes is an object, and these objects are managed via YAML or JSON definitions. They represent the resources in your system. Cluster A cluster is a group of machines (nodes) consisting of: Control Plane (master) - responsible for managing the system. Worker Nodes - where your applications run. Node A node is a physical or virtual machine within a cluster. Each node includes: ...

June 29, 2025 · 2 min

Google Cloud Billing

In Google Cloud, Billing is the system that helps you manage costs, payments, and budgets when using services on Google Cloud Platform (GCP), such as Compute Engine, BigQuery, Cloud Storage, and more. Below are the four most important components in Google Cloud Billing: 1. Budget Allows you to set a spending limit for a specific time period (e.g., month, quarter) for a project or billing account. Purpose: Avoid spending beyond your planned budget. Example: You’re building a backend for a crawling system running on GCP, using multiple VMs or Cloud Functions. To control cost, you set a $500/month budget to track your expenses. 2. Alert Alerts are automatically triggered when spending exceeds a defined percentage of the budget (e.g., 50%, 90%, 100%). Purpose: Notify you when costs spike unexpectedly — possibly due to a bug or misconfiguration. Example: If the cost of your backend on Cloud Run reaches 90% of the $500 budget, you’ll receive an email notification to take action. ...

June 24, 2025 · 2 min

Google Cloud Compute Offering

In Google Cloud, Compute Offering is a set of services that help you run workloads (like applications, APIs, batch jobs, etc.) on Google’s host infrastructure. Depending on your workload and requirements, you can choose from the options below: 1. Compute Engine (IaaS - Infrastructure as a Service) A virtual machine where you have full permission to configure the environment. High level of control, similar to traditional hosting on the cloud. Use case: Configure OS in detail, install custom software, need full system control. Example: Run a Node.js/Golang server, cron job, or backend AI model training. AWS equivalent: EC2 2. App Engine (PaaS - Platform as a Service) A platform for running applications where you only need to deploy code — Google handles everything else (scaling, patching, infrastructure, etc.). Low level of control — just push your code, no need to manage servers. Use case: Rapid development, no infrastructure management needed. Example: Run a small API server, REST API, or MVP web app. AWS equivalent: Elastic Beanstalk 3. Cloud Run (Serverless Containers) Run containers (e.g., Docker) in a serverless model. Billing is based on request duration. Medium level of control — you manage the container image, while Google handles scaling and infrastructure. Use case: Leverage the benefits of containers + serverless for lightweight backends or microservices. Example: Run an API service, webhook receiver, or AI inference container. AWS equivalent: App Runner / Fargate 4. Google Kubernetes Engine (GKE) (CaaS - Container as a Service) Run containerized applications with Kubernetes. Google manages the control plane. High level of control — you can fully configure your cluster, while Google manages some parts of it. Use case: Need orchestration, CI/CD pipelines, or complex multi-service applications. Example: Run a microservices system, CI job runners, or real-time data pipelines. AWS equivalent: EKS 5. Cloud Functions (FaaS - Function as a Service) Write and deploy small functions that are triggered by events (HTTP, Pub/Sub, Cloud Storage, etc.). Extremely easy to use — just write a function, no need to manage infrastructure. Use case: Handle small event-driven logic, time-based triggers, or system integration tasks. Example: Auto-resize images, handle webhooks from Telegram/Stripe, send emails on user registration. AWS equivalent: Lambda

June 23, 2025 · 2 min

Bloom filter là gì và trường hợp sử dụng

Chào mọi người, hôm nay trong lúc mình ôn tập kiến thức thì nhớ đến Bloom Filter, thế là mình lại phải viết thêm một bài nói về cái này nữa rồi =)) Bloom Filter là một cấu trúc dữ liệu xác suất được thiết kế để kiểm tra nhanh chóng xem một phần tử có thuộc tập hợp hay không. Công dụng của nó là kiểm tra nhanh xem “Cái này có chưa nhỉ?” ...

May 24, 2025 · 4 min

Tổng quan về Hợp đồng Thông minh trong DEX và AMM

Hợp đồng thông minh DEX Trong một sàn giao dịch phi tập trung (DEX) như Uniswap, nhiều hợp đồng thông minh làm việc cùng nhau để cho phép hoán đổi token. Các hợp đồng chính thường bao gồm: Factory, Router, và Pair. Vai trò của từng hợp đồng như sau: 🔹 1. Factory Contract Là nơi đăng ký chính của các pool thanh khoản (cặp token). Tạo ra pool thanh khoản mới khi có thêm cặp giao dịch mới. Lưu trữ ánh xạ giữa các cặp token và địa chỉ của hợp đồng Pair tương ứng. Các hàm chính: ...

May 18, 2025 · 5 min

So sánh Node.js và Golang trong Backend

Xin chào mọi người, Trong quá trình làm việc ở vị trí Backend Engineer, mình đã trải qua nhiều ngôn ngữ lập trình, trong đó có Node.js và Golang. Vậy trường hợp nào nên dùng Node.js, trường hợp nào nên dùng Golang? Bài viết này chia sẻ kinh nghiệm thực chiến cá nhân và quan sát thực tế từ đồng nghiệp xung quanh. Let’s start! 1. Hiệu năng và Đa luồng Golang có hiệu năng tốt hơn nhờ là compiled language và mô hình goroutine rất nhẹ (lightweight thread do Go runtime quản lý), dễ dàng xử lý hàng nghìn concurrent connections mà tốn rất ít tài nguyên. ...

May 17, 2025 · 4 min

Xác thực người dùng bằng ví crypto

Hôm nay, trong một buổi đầu tuần sau chuyến đi du lịch giữa năm, tôi tranh thủ ôn lại kiến thức để chuẩn bị cho buổi phỏng vấn vị trí Backend Blockchain sắp tới. Nhân tiện, tôi viết lại bài này để ghi nhớ kỹ thuật xác thực người dùng không cần tài khoản và mật khẩu, mà sử dụng đăng nhập bằng ví Web3 (như Metamask, Coin98 Super Wallet, Trust Wallet,…). Cùng bắt đầu nhé! Quá trình này gồm 3 bước đơn giản: ...

May 11, 2025 · 3 min

Re-org là gì? Backend Developer cần xử lý thế nào khi Blockchain "đổi ý"

1. Cơ bản về cách blockchain thêm block Các blockchain như Ethereum, Bitcoin hoạt động như sau: Mỗi node trong mạng sẽ giữ một bản sao của blockchain hiện tại. Khi một miner (hoặc validator) tìm được block mới hợp lệ, nó sẽ broadcast block đó cho mạng. Các node nhận block mới sẽ xác minh, nếu hợp lệ thì thêm vào chain của mình. Vấn đề xảy ra khi nhiều miner có thể tìm được block mới gần như cùng một lúc. Giả sử mạng lưới đang dừng ở block thứ 99. Miner A tìm ra block 100A và broadcast nó. Ở một nơi khác, Miner B cũng tìm ra một block 100B và broadcast. Do độ trễ mạng, các node khác nhau có thể nhận và thêm vào chuỗi khác nhau: 100A hoặc 100B. ...

May 10, 2025 · 3 min

SQL vs NoSQL

Xin chào các bạn, Trong bài viết này, tôi sẽ chia sẻ một số kinh nghiệm cá nhân khi phải lựa chọn giữa hai loại cơ sở dữ liệu phổ biến là SQL và NoSQL, cụ thể là PostgreSQL và MongoDB. Bài viết không đi sâu vào lý thuyết SQL hay NoSQL là gì, mà sẽ tập trung vào góc nhìn thực tế khi phải đưa ra lựa chọn trong một dự án cụ thể. ...

April 23, 2025 · 3 min

Welcome

🚀 This is the beginning of my Hugo + PaperMod powered blog hosted at thanhhv.github.io. Stay tuned for more!

April 23, 2025 · 1 min