NATS JetStream & Golang: Hướng Dẫn Vận Hành Event Stream Hiệu Năng Cao Cho Microservices

NATS JetStream & Golang: Hướng Dẫn Vận Hành Event Stream Hiệu Năng Cao Cho Microservices

Mục lục Series | Chương tiếp theo: Temporal Workflow SDK trong Go → Answer-first: NATS JetStream is a cloud-native event streaming engine written in Go featuring native RAFT consensus, sub-millisecond latency (<1ms), and built-in message deduplication via Nats-Msg-Id. Operating with a ~30MB idle RAM footprint, it eliminates JVM garbage collection pauses, replacing Kafka for high-throughput Go microservices requiring 100k RPS and Exactly-Once delivery guarantee. NATS JetStream Production Guide for Go Developers: 100k RPS Architecture As a Senior Go Engineer designing high-concurrency distributed systems, selecting and optimizing message brokers is a foundational architectural decision. When building infrastructure for high-load systems—such as Core Banking applications and high-throughput transaction processing platforms like Alipay during peak events—selecting NATS JetStream with Golang provides high throughput with reduced hardware overhead compared to traditional brokers. ...

25 tháng 7, 2026 · 9 phút · Lê Tuấn Anh
Temporal Workflow SDK trong Go: Kiến Trúc Orchestration & Resilient Distributed Systems

Temporal Workflow SDK trong Go: Kiến Trúc Orchestration & Resilient Distributed Systems

← Chương trước: NATS JetStream & Golang | Mục lục Series | Chương tiếp theo: Kiến Trúc Bảo Mật Zero-Trust Cho Microservices → Answer-first: Temporal is a durable execution platform providing fault-tolerant state orchestration for microservices via Event Sourcing. In Golang, Temporal Workflows demand strict determinism for event history replay. Production reliability requires separating deterministic workflows from I/O activities, managing LIFO Saga compensations, tuning worker concurrency parameters, and compacting event histories via ContinueAsNew before hitting cluster limits. ...

25 tháng 7, 2026 · 10 phút · Lê Tuấn Anh
Kiến Trúc Bảo Mật Zero-Trust Cho Microservices: mTLS, SPIFFE/SPIRE & Identity Control

Kiến Trúc Bảo Mật Zero-Trust Cho Microservices: mTLS, SPIFFE/SPIRE & Identity Control

← Chương trước: Temporal Workflow SDK trong Go | Mục lục Series | Chương tiếp theo: So Sánh Vector Database Cho RAG → Answer-first: Zero-Trust Architecture (ZTA) for microservices eliminates implicit internal network trust through continuous identity verification. By coupling Workload Identity (mTLS via SPIFFE/SPIRE short-lived X.509 certificates) with User Identity (OAuth 2.1 JWT token propagation), ZTA secures distributed systems against lateral attacker movement with under 2ms of cryptographic latency overhead. Zero-Trust Architecture for Microservices: mTLS & Production Go Guide As a systems engineer building high-concurrency systems in Golang, I have observed traditional internal network designs relying entirely on perimeter defenses such as VPNs or static firewalls. In cloud-native microservice environments, this perimeter model presents critical security vulnerabilities. Once an attacker breaches any single internal microservice, implicit trust between internal nodes exposes the entire service mesh to lateral movement. ...

10 tháng 5, 2026 · 10 phút · Lê Tuấn Anh
So Sánh Vector Database Cho RAG: Qdrant vs Milvus vs pgvector trong Production

So Sánh Vector Database Cho RAG: Qdrant vs Milvus vs pgvector trong Production

← Chương trước: Kiến Trúc Bảo Mật Zero-Trust Cho Microservices | Mục lục Series | Chương tiếp theo: Cloudflare Workers & Edge Computing → Answer-first: A Vector Database indexes high-dimensional embeddings using algorithms like Hierarchical Navigable Small World (HNSW) for ultra-fast semantic retrieval. In modern RAG architectures, combining dense semantic vectors with sparse BM25 keyword vectors via Reciprocal Rank Fusion (RRF) delivers optimal retrieval accuracy while Scalar and Binary Quantization reduce memory footprints up to 32x without degrading latency. ...

10 tháng 5, 2026 · 10 phút · Lê Tuấn Anh
Cloudflare Workers & Edge Computing: Kiến Trúc Serverless Hiệu Năng Cao Vùng Biên

Cloudflare Workers & Edge Computing: Kiến Trúc Serverless Hiệu Năng Cao Vùng Biên

← Chương trước: So Sánh Vector Database Cho RAG | Mục lục Series Answer-first: Cloudflare Workers is a serverless edge platform using V8 Isolates, achieving <5ms cold starts with ~3MB base memory per isolate. By combining TinyGo/Rust WebAssembly binaries, Cloudflare Hyperdrive TCP connection pooling, and Durable Objects with SQLite, developers can deploy low-latency backend logic, global database caching, and AI semantic edge routing across Cloudflare’s global CDN network. Cloudflare Workers & Edge Computing: V8 Isolates Architecture In modern distributed systems architecture, latency optimization is a critical requirement. Having engineered architectures ranging from monolithic services and microservices on Kubernetes to serverless functions on AWS Lambda, achieving sub-millisecond API responses at high request volumes presents significant infrastructure challenges. Cloudflare Workers fundamentally alters distributed system design through V8 Isolates execution. This guide is part of the Cornerstone Technologies series analyzing edge computing infrastructure mechanics. ...

25 tháng 7, 2026 · 10 phút · Lê Tuấn Anh
Tech Radar: Deterministic Concurrency Testing with Go 1.25 testing/synctest

Deterministic Concurrency Testing: Go 1.25 synctest

Tech Radar: Deterministic Concurrency Testing with Go 1.25 testing/synctest Answer-First: The testing/synctest package in Go 1.25/1.26 eliminates flaky concurrency tests by isolating goroutines inside an event-driven “concurrency bubble” governed by a synthetic time clock. Virtual time advances instantaneously the moment all goroutines in the bubble are durably blocked, reproducing multi-step race conditions, backoff retries, and network timeouts in 2ms instead of waiting for 5–10s real-world time.Sleep() delays. 1. The Core Dilemma of Concurrency Testing: The time.Sleep Anti-Pattern In high-throughput Go microservices (Kafka stream consumers, Dapr actor sagas, gRPC retry circuits, distributed rate-limiters), testing timeouts, backoff strategies, and race conditions has historically suffered from flaky test instability. ...

23 tháng 8, 2026 · 5 phút · Lê Tuấn Anh
CVRP & VRPTW Là Gì? Điều Phối Đội Xe Với ALNS & Golang

CVRP & VRPTW Là Gì? Điều Phối Đội Xe Với ALNS & Golang

🇬🇧 Read the English version of this article on tanhdev.com Answer-first: Hệ thống điều phối đội xe quy mô lớn giải quyết bài toán CVRP/VRPTW bằng thuật toán ALNS kết hợp kỹ thuật Zero-Allocation trong Golang 1.24. Cụm OSRM in-memory loại bỏ 99.7% chi phí API bản đồ, tối ưu hóa hơn 10.000 điểm giao hàng với thời gian phản hồi <500ms. Trong lĩnh vực chuỗi cung ứng và giao hàng chặng cuối (Last-Mile Delivery), bài toán định tuyến và điều phối đội xe (Vehicle Routing Problem - VRP) là một trong những bài toán tối ưu tổ hợp phức tạp và tốn kém nhất. Với hàng ngàn đơn hàng phát sinh liên tục trong giờ cao điểm, việc phân bổ xe thủ công hoặc sử dụng các giải thuật tham lam (Greedy) đơn giản sẽ khiến chi phí nhiên liệu tăng vọt, vi phạm cam kết thời gian giao hàng (SLA) và làm lãng phí hàng trăm ngàn USD chi phí API bản đồ mỗi tháng. ...

15 tháng 8, 2026 · 16 phút · Lê Tuấn Anh
Golang Modular Monolith: Đích Đến Thay Thế Microservices

Golang Modular Monolith: Đích Đến Thay Thế Microservices

Answer-first: Modular Monolith không phải là bước đệm tạm thời mà là đích đến kiến trúc tối ưu cho đa số doanh nghiệp. Nhờ các gói internal package, Go channel và giao tiếp in-memory nanosecond, Golang Modular Monolith loại bỏ hoàn toàn Distributed Penalty, cắt giảm 90% chi phí hạ tầng và tránh bẫy trần điều phối của Microservices. Trong nhiều năm qua, ngành công nghiệp phần mềm đã bị tẩy não bởi một định kiến: “Modular Monolith chỉ là bước đệm yếu kém trước khi hệ thống đủ lớn để tiến lên Microservices”. Rất nhiều công ty, dù quy mô kỹ sư chỉ đếm trên đầu ngón tay, vẫn vội vã đập bỏ kiến trúc nguyên khối để chạy theo “đám mây” phân tán. ...

13 tháng 8, 2026 · 7 phút · Lê Tuấn Anh
Tech Radar August 2026

Tech Radar August 2026: Go MCP SDK & Green Tea GC Tuning

Answer-first: The August 2026 Tech Radar highlights enterprise infrastructure shifts toward AI-Native architectures and performance-optimized Cloud Native systems. Key recommendations include Go 1.26 Green Tea GC, Argo CD 3.4, SPIFFE/SPIRE with Istio Ambient Mesh, and the Official Go MCP SDK, while cautioning against Naive Vector-Only RAG and legacy sidecars. Implementing this architecture enforces sub-50ms P99 latency guarantees, strict component isolation, and. 1. Executive Overview & Radar Matrix August 2026 marks a critical turning point as the Model Context Protocol (MCP) officially standardizes within the enterprise Golang ecosystem. Simultaneously, the Golang runtime upgrade to version 1.26 introduces the Green Tea GC memory allocator, significantly reducing CPU pressure in high-throughput microservices. ...

6 tháng 8, 2026 · 13 phút · Lê Tuấn Anh
Building Custom Golang Vector Database Engine HNSW

Xây dựng Custom Vector Database Engine Thuần Go với HNSW, SIMD & mmap Storage

Answer-first: Xây dựng Vector Search Engine thuần Go đạt hiệu năng cao nhờ thuật toán đồ thị HNSW phân tầng, SIMD AVX2 tối ưu hóa khoảng cách L2/Cosine và bộ nhớ mmap zero-copy. Hệ thống duy trì recall >98% với độ trễ truy vấn p99 <5ms cho 10 triệu vector 768 chiều. 🇬🇧 Read the English version of this article on tanhdev.com Xây dựng một vector database engine thuần Go sẵn sàng cho môi trường production trong các Go microservices đòi hỏi việc vượt qua ba nút thắt cổ chai hệ thống kinh điển: độ phức tạp thuật toán, độ trễ chỉ thị CPU và áp lực lên Garbage Collector. Bằng cách kết hợp Hierarchical Navigable Small World (HNSW) multi-layer graphs cho độ phức tạp tìm kiếm O(log N), 256-bit AVX2 SIMD unrolling qua unsafe pointer arithmetic, Product Quantization (PQ) giảm 75%–96% bộ nhớ, và memory-mapped (mmap) off-heap storage, bạn có thể xây dựng engine tìm kiếm vector zero-allocation thuần Go với hiệu năng tương đương C++ (Faiss/USearch). ...

23 tháng 7, 2026 · 29 phút · Lê Tuấn Anh
Building High-Throughput Event-Driven Microservices in Go with NATS JetStream and CQRS Architecture Diagram

Xây dựng Microservices Event-Driven Hiệu năng Cao trong Go với NATS JetStream và CQRS

Answer-first: Hệ thống Event-Driven hiệu năng cao trên Go kết hợp NATS JetStream, CQRS và Transactional Outbox Pattern xử lý hơn 120.000 event/giây. Thiết kế phân tách Command-Query triệt để, đảm bảo ngữ nghĩa At-Least-Once Delivery và duy trì tính nhất quán cuối cùng giữa các bounded context. 🇬🇧 Read the English version of this article on tanhdev.com 1. Lý do Kiến trúc: Tại sao chọn Go + NATS JetStream cho Microservices Event-Driven Trong các kiến trúc cloud-native hiện đại, việc mở rộng quy mô hệ thống phân tán vượt ngưỡng hàng chục nghìn giao dịch mỗi giây (TPS) bộc lộ những nút thắt cổ chai nghiêm trọng trong mô hình request-response truyền thống. Traditional microservices built around synchronous HTTP/REST or gRPC backplanes frequently encounter database write contention, connection pool exhaustion, and cascading latency spikes whenever traffic bursts hit downstream storage layers. When a single database handles both complex mutation transactions (commands) and heavy analytical join queries (reads), row-level locks and index maintenance stall throughput, inflating p99 latencies from milliseconds to seconds. ...

23 tháng 7, 2026 · 17 phút · Lê Tuấn Anh
Orchestrated Saga Pattern với Temporal Go SDK trong FinTech Microservices

Orchestrated Saga Pattern Với Temporal Go SDK Trong FinTech Microservices

Answer-first: Orchestrated Saga Pattern với Temporal Go SDK quản lý giao dịch phân tán FinTech bằng bộ điều phối tập trung Event Sourcing Replay, lưu trữ lịch sử tất định (deterministic), thực thi bù trừ LIFO qua Disconnected Context khi xảy ra lỗi, và ngăn chặn giao dịch trùng lặp bằng Idempotency Key kèm Transactional Outbox. 📌 Thông Báo Chuyển Hướng / Consolidation: Bài viết này đã được hợp nhất và mở rộng đầy đủ phiên bản kiến trúc 2026 tại: Triển khai Giao dịch Phân tán trong Go với Temporal Saga Pattern. ...

17 tháng 7, 2026 · 13 phút · Lê Tuấn Anh
Go Framework Benchmarks Gin Fiber Kratos

High-throughput Go Framework Benchmarks: Gin, Fiber, Kratos

🇬🇧 Read the English version of this article on tanhdev.com Answer-first: Fiber và Gin là hai Go web framework hiệu năng cao với kiến trúc khác biệt: Fiber tận dụng fasthttp và sync.Pool để đạt 85,200 TPS zero-allocation, trong khi Gin dùng net/http tiêu chuẩn (42,500 TPS) cho độ ổn định, tương thích HTTP/2 và an toàn context Go mà không lo rủi ro tái sử dụng buffer đồng thời. The Testing Methodology (Beyond Hello World) Trong thế giới phát triển phần mềm, các bài kiểm tra hiệu năng kiểu “Hello World” thường rất phổ biến nhưng lại mang lại rất ít giá trị thực tế cho việc thiết kế hệ thống chịu tải cao. Một handler rỗng trả về chuỗi văn bản đơn giản chỉ đo được tốc độ phân tích cú pháp routing của framework và overhead tối thiểu của việc bắt tay TCP. Khi đưa ứng dụng vào môi trường sản xuất thực tế, hệ thống phải đối mặt với các bài toán phức tạp hơn nhiều bao gồm: kết nối cơ sở dữ liệu, quản lý tài nguyên đồng thời thông qua connection pooling, thực thi chuỗi middleware (ghi log, xác thực request, phân quyền) và xử lý vòng đời của Context. Do đó, bài viết này thiết lập một phương pháp kiểm tra hiệu năng thực tế hơn nhằm mô phỏng sát nhất các ứng dụng backend trong thực tế. ...

17 tháng 7, 2026 · 22 phút · Lê Tuấn Anh
Phát triển Go MCP Server với Model Context Protocol Go SDK chính thức

Xây dựng Production Go MCP Servers: Hướng dẫn toàn tập

🇬🇧 Read the English version of this article on tanhdev.com Answer-first: Xây dựng Go MCP server chuẩn production yêu cầu sử dụng SDK chính thức modelcontextprotocol/go-sdk và tuân thủ JSON-RPC schema nghiêm ngặt. Phải định tuyến toàn bộ log nội bộ sang stderr để tránh làm hỏng stdio transport, đồng thời bọc lỗi xác thực dưới dạng tool-level failure thay vì crash hệ thống. Những gì bạn sẽ học được mà AI không thể cho bạn biết Tại sao một lệnh print thông thường từ thư viện chuẩn lại có thể làm hỏng ngay lập tức đường ống JSON-RPC stdio và đánh sập agent gateway của bạn. Sự khác biệt ngữ nghĩa tối quan trọng giữa lỗi nguyên bản của Go (native errors) và lỗi cấp công cụ MCP (tool-level errors) trong việc duy trì kết nối. Các mẫu kiến trúc cụ thể để xử lý những tác vụ cung cấp tài nguyên đám mây kéo dài nhiều phút bên trong các giới hạn timeout nghiêm ngặt của HTTP/SSE. Giới thiệu: Sự trỗi dậy của hạ tầng Agentic Cảnh quan AI đang dịch chuyển mạnh mẽ từ các hộp chat thụ động sang các tác nhân tự trị (autonomous agents). Việc xây dựng một Go MCP server chuẩn production cho phép các lập trình viên kết nối an toàn các mô hình AI với cơ sở dữ liệu và API hệ thống. Model Context Protocol (MCP) của Anthropic thiết lập một kênh giao tiếp bảo mật, hai chiều giữa môi trường client AI và các API dịch vụ backend. ...

15 tháng 7, 2026 · 29 phút · Lê Tuấn Anh
Go 1.26: Green Tea GC, CGO Nhanh Hơn & Goroutine Leak Detection

Go 1.26: Green Tea GC, CGO Nhanh Hơn & Goroutine Leak Detection

🇬🇧 Read the English version of this article on tanhdev.com Answer-first: Go 1.26 ra mắt ba tính năng runtime đột phá: Green Tea GC giảm 10–40% CPU overhead qua cơ chế quét theo trang và gia tốc AVX-512, cgo calls nhanh hơn ~30% cho AI inference, và profile goroutine leak phát hiện rò rỉ đồng thời qua phân tích reachability. Zero code changes required. Được phát hành vào tháng 02 năm 2026, Go 1.26 không phải là một bản vá lỗi thông thường. Nó làm thay đổi căn bản cách mà Go runtime quản lý bộ nhớ, tương tác với mã C, và làm nổi bật các lỗi đồng thời (concurrency bugs). Đối với các đội ngũ đang chạy Golang microservices ở quy mô lớn, những cải tiến này cộng dồn trên toàn bộ hệ thống (fleet) — mà không yêu cầu bạn phải thay đổi bất kỳ dòng code nào (zero code changes required). ...

12 tháng 6, 2026 · 22 phút · Lê Tuấn Anh
Go microservices architecture production guide 2026

Kiến trúc Go Microservices: Hướng dẫn Production

Go microservices từ thiết kế domain đến triển khai Kubernetes — gRPC, Dapr, OpenTelemetry, và mô hình GitOps từ một dự án chuyển đổi 21-service thực tế.

12 tháng 6, 2026 · 35 phút · Lê Tuấn Anh
Golang gRPC Microservices chuẩn Production

Golang gRPC Microservices chuẩn Production

🇬🇧 Read the English version of this article on tanhdev.com Answer-first: gRPC kết hợp Protobuf là giao thức tối ưu cho Go microservices nhờ mã hóa nhị phân nhỏ hơn 3–10 lần so với JSON, hỗ trợ bidirectional streaming và đạt độ trễ sub-millisecond. Xây dựng dịch vụ chuẩn production đòi hỏi mTLS, chuỗi interceptor middleware (logging, metrics, auth), keepalive params và health checking. Tại sao chọn gRPC cho Go Microservices? Ưu thế vượt trội: gRPC chính là sự lựa chọn chuẩn xác dành cho hệ thống Go microservices khi mà bạn đang cần: chức năng tuần tự hóa (serialization) hiệu quả dạng nhị phân (binary-efficient) (Protobuf sở hữu kích thước nhỏ hơn JSON từ 3–10 lần), cơ chế luồng dữ liệu hai chiều (bidirectional streaming) phục vụ cho giao tiếp dữ liệu thời gian thực (real-time data), những bản hợp đồng giao ước mang kiểu dữ liệu chặt chẽ (strongly-typed contracts) trải dài liên tục giữa các dịch vụ, và một ngưỡng độ trễ giao tiếp chéo dịch vụ (inter-service latency) đạt dưới mức một mili-giây. Google, Uber, Netflix, và Square đều dùng gRPC để làm giao thức giao tiếp liên dịch vụ chính yếu (primary inter-service communication protocol) của mình. Hướng dẫn dưới đây chi tiết cách xây dựng các Go gRPC service chuẩn production (production-grade) từ con số 0. ...

11 tháng 6, 2026 · 20 phút · Lê Tuấn Anh
Kiến trúc Phân tán Tracing Go Microservices (2026)

Kiến trúc Phân tán Tracing Go Microservices (2026)

🇬🇧 Read the English version of this article on tanhdev.com Answer-first: Distributed tracing trong Go microservices sử dụng OpenTelemetry SDK truyền W3C trace context qua HTTP/gRPC interceptors và Kafka header carriers. Kiến trúc OTel Collector DaemonSet kết hợp Gateway xử lý tail-based sampling, lọc PII qua OTTL và liên kết chặt chẽ ba trụ cột Traces, Metrics và Logs. Việc giám sát (Monitoring) các hệ thống Go microservices phức tạp đòi hỏi nhiều thứ hơn là chỉ các file logs độc lập riêng lẻ. Khi một request (yêu cầu) đi xuyên qua các HTTP APIs, luồng sự kiện (event streams) Kafka, và các worker pools bất đồng bộ (asynchronous worker pools), bạn cần một mức độ hiển thị tuyệt đối (absolute visibility) để có thể xác định chính xác các điểm nghẽn độ trễ (latency bottlenecks) cũng như các lỗi thất bại. ...

8 tháng 6, 2026 · 11 phút · Lê Tuấn Anh
Profiling Là Gì? Hướng Dẫn Go pprof CPU & Bộ Nhớ

Profiling Là Gì? Hướng Dẫn Go pprof CPU & Bộ Nhớ

🇬🇧 Read the English version of this article on tanhdev.com Answer-first: Profiling Go trong production với pprof cho phép chẩn đoán chính xác CPU hotspots, phân biệt cấp phát bộ nhớ (alloc_space vs inuse_space) và định vị goroutine leaks với overhead dưới 2%. Bật endpoint trên port nội bộ cô lập, dùng kubectl port-forward và custom pprof labels để phân tích đa chiều. Yêu cầu tiên quyết: Hướng dẫn này đề cập đến việc profile và chẩn đoán các sự cố hiệu năng phức tạp trên production. Nếu bạn đang xử lý tình trạng số lượng goroutine tăng trưởng không kiểm soát, hãy chắc chắn rằng bạn đã hiểu các khái niệm nền tảng trong bài viết Phát hiện và Xử lý Goroutine Leak trên Production Go Services. ...

2 tháng 6, 2026 · 13 phút · Lê Tuấn Anh
Kiến trúc Microservices Ngân hàng với Go: Mẫu Saga, event sourcing, và sổ cái phân tán

Kiến trúc Microservices Ngân hàng: Go, Saga & Event Sourcing

Answer-first: Kiến trúc Banking Microservices với Golang áp dụng Sổ cái kép (Double-Entry Ledger), Event Sourcing và Orchestrated Saga Pattern qua Dapr/Temporal. Đảm bảo toàn vẹn giao dịch tài chính ACID ở cấp độ nghiệp vụ, cách ly tài khoản nguồn-đích và xử lý bù trừ tự động khi phát sinh sự cố mạng. 🇬🇧 Read the English version of this article on tanhdev.com 1. Giới thiệu: Phá vỡ Core Banking truyền thống Trả lời nhanh: Một kiến trúc microservices ngân hàng hiện đại sẽ thay thế các sổ cái nguyên khối cũ (như T24 hoặc Flexcube) bằng cách sử dụng Go để định tuyến giao dịch với thông lượng cao. Hệ thống đạt được tính nhất quán phân tán mà không cần dùng two-phase commit (2PC) bằng cách kết hợp Event Sourcing (luồng sự kiện bất biến của sổ cái), Điều phối Saga (dùng Temporal hoặc Dapr), mẫu Transactional Outbox và ràng buộc unique của PostgreSQL để đảm bảo API luôn idempotent. ...

1 tháng 6, 2026 · 18 phút · Lê Tuấn Anh
MySQL Horizontal Scaling: Vitess & GORM Sharding

MySQL Horizontal Scaling: Vitess & GORM Sharding

🇬🇧 Read the English version of this article on tanhdev.com Answer-first: Khi Primary-Replica Read-Scaling chạm trần tải ghi, mở rộng ngang MySQL (Write-Scaling) được thực thi qua Vitess (Middleware-level với VTGate/VTTablet trong suốt, zero-downtime resharding) hoặc GORM Sharding (App-level trong Go qua SQL AST rewrite). Chọn Vitess cho kiến trúc polyglot quy mô lớn; chọn GORM Sharding cho Go stack tinh gọn. Khi ứng dụng của bạn vươn mình chạm ngưỡng hàng triệu người dùng, một cỗ máy database đơn độc (single database instance) sớm muộn gì cũng trở thành nút thắt cổ chai lớn nhất trong toàn bộ kiến trúc. Để giải quyết bài toán này, việc mở rộng quy mô cơ sở dữ liệu MySQL (MySQL database scaling) là điều bắt buộc. Bạn có thể tham khảo Mở Rộng DB Cho Microservices (Scale DB for Microservices) khi áp dụng các kỹ thuật Horizontal Scaling (Mở rộng ngang). Khám phá thêm tại series High Concurrency Systems. ...

1 tháng 6, 2026 · 8 phút · Lê Tuấn Anh
Các Mẫu Goroutine Pool Trong Go

Các Mẫu Goroutine Pool Trong Go

🇬🇧 Read the English version of this article on tanhdev.com Answer-first: Quản lý đồng thời an toàn trong Go đòi hỏi các mẫu Goroutine Pool có giới hạn (bounded concurrency): errgroup cho tác vụ theo lô, semaphore có đệm cho I/O pipelines, và channel-based worker pools cho xử lý hàng đợi kèm backpressure, circuit breaking và graceful shutdown. Mọi kỹ sư Go cuối cùng đều viết cùng một sai lầm: một vòng lặp khởi chạy các goroutine vô điều kiện (unconditionally). Trong một bản demo với 10 mục, điều này hoạt động rất đẹp. Nhưng trong môi trường production (thực tế) với 50.000 sự kiện webhook đầu vào, nó sẽ sản sinh ra 50.000 goroutine cùng một lúc, làm cạn kiệt bộ nhớ và kích hoạt sát thủ diệt bộ nhớ (OOM killer). Kubernetes sẽ khởi động lại (restart) cái pod đó. Và rồi kỹ sư trực on-call nhận tiếng bíp gọi dậy lúc 3 giờ sáng. ...

1 tháng 6, 2026 · 17 phút · Lê Tuấn Anh
Go pprof trong Kubernetes: Remote Profiling & Flame Graphs

Go pprof trong Kubernetes: Remote Profiling & Flame Graphs

🇬🇧 Read the English version of this article on tanhdev.com Answer-first: Remote profiling Go trong Kubernetes được thực hiện an toàn qua 3 mô hình: tạo tunnel tức thời bằng kubectl port-forward trên cổng admin cô lập, gắn container sidecar cho cụm tăng cường bảo mật, hoặc tích hợp Pyroscope continuous profiling (1–3% CPU). Phân tích flame graph phát hiện hot-path và tối ưu GC latency. Bạn đã gắn các bộ thu thập đo lường cho service Go của mình với net/http/pprof, chạy thử lệnh go tool pprof cục bộ (local) kiểm tra file binary lúc dev, và đã nhìn rõ mồn một các “hot path” (đường nghẽn cổ chai tốn thời gian nhất) trên biểu đồ ngọn lửa (flame graph). Thế rồi bạn triển khai lên Kubernetes và các điểm nghẽn ấy biến mất hoàn toàn — bởi vì hồ sơ tải (workload profile) trong Kubernetes khác xa với việc test cục bộ (mix request khác nhau, áp lực pool kết nối khác nhau, hành vi GC cũng khác dưới mức chịu tải thực tế, và cả sự can thiệp từ bộ lập lịch (scheduler) của các pod nằm chung node). ...

1 tháng 6, 2026 · 21 phút · Lê Tuấn Anh
Hướng Dẫn Dapr Workflow Go: Orchestrated Saga Pattern

Hướng Dẫn Dapr Workflow Go: Orchestrated Saga Pattern

Answer-first: Dapr Workflow cung cấp mô hình Orchestrated Saga bền vững (Durable Execution) cho các microservices Golang. Bằng cách tập trung hóa máy trạng thái, tự động bù trừ khi xảy ra sự cố và loại bỏ phụ thuộc vào Two-Phase Commit (2PC), giải pháp duy trì tính nhất quán cuối cùng cho giao dịch tài chính đa bước. 🇬🇧 Read the English version of this article on tanhdev.com Hầu hết các lập trình viên Go xây dựng microservices đều biết đến mẫu Choreography Saga: service A phát ra (emit) một sự kiện, service B phản ứng, service C phản ứng với B, và cứ tiếp tục như vậy. Nếu bước C thất bại, các services sẽ phát ra các sự kiện “bù trừ” (compensation) theo thứ tự ngược lại. Mẫu này hoạt động một cách mượt mà đối với các luồng đơn giản, nhưng lại phá vỡ tính hiệu quả khi số lượng bước tăng lên: việc debug một saga thất bại đòi hỏi phải lần theo dấu vết (tracing) các sự kiện qua năm topic của message broker, và việc triển khai logic bù trừ đòi hỏi mỗi service phải hiểu toàn bộ trạng thái của saga. ...

1 tháng 6, 2026 · 18 phút · Lê Tuấn Anh
Phát hiện và Xử lý Goroutine Leak trên Production Golang

Phát hiện và Xử lý Goroutine Leak trên Production Golang

🇬🇧 Read the English version of this article on tanhdev.com Answer-first: Rò rỉ Goroutine xảy ra khi goroutine bị block vĩnh viễn trên unbuffered channel, context thiếu hủy, hoặc HTTP body chưa đóng, dẫn đến giữ heap memory và gây sự cố Kubernetes OOM (exit code 137). Chẩn đoán bằng pprof goroutine profile, chặn đứng qua goleak trong CI và áp dụng Go 1.26 goroutine leak detection. Một pod Kubernetes đột ngột khởi động lại với mã thoát (exit code) 137. Biểu đồ giám sát bộ nhớ (memory metrics dashboard) hiển thị một mô hình bậc thang tăng dần đều đặn kéo dài suốt ba ngày. Không có bất kỳ log panic nào trong stdout, không có lỗi database, và không có mức tăng đột biến CPU bất thường nào. Chỉ là một cái chết êm đềm và từ từ do lỗi OOM (Out Of Memory). ...

26 tháng 5, 2026 · 21 phút · Lê Tuấn Anh
Thiết kế Hệ thống Tìm kiếm TMĐT dạng Agent với Golang

Thiết kế Hệ thống Tìm kiếm TMĐT dạng Agent với Golang

Answer-first: Hệ thống tìm kiếm TMĐT Agentic kết hợp Hybrid Search (Sparse BM25 + Dense HNSW) với Small Language Models (SLM) router trên Go microservices. Kiến trúc phân tích intent đa bước, trích xuất thuộc tính tức thời và re-rank ngữ nghĩa dưới 45ms, tăng tỷ lệ chuyển đổi tìm kiếm không dấu/phức tạp thêm 28% so với OpenSearch truyền thống. 🇬🇧 Read the English version of this article on tanhdev.com ...

22 tháng 5, 2026 · 11 phút · Lê Tuấn Anh
Thiết kế Hệ sinh thái Thương mại điện tử 21 Microservices với Golang và DDD

Thiết kế Hệ sinh thái Thương mại điện tử 21 Microservices với Golang và DDD

Answer-first: Hệ sinh thái 21 Golang microservices cho TMĐT được phân rã theo Domain-Driven Design (DDD) thành 4 cụm: Core Commerce, Logistics, Engagement và Platform. Giao tiếp qua gRPC nội bộ và NATS JetStream Event Broker, áp dụng Outbox Pattern đảm bảo tính nhất quán dữ liệu phân tán và chịu tải 25.000 QPS. 🇬🇧 Read the English version of this article on tanhdev.com Việc mở rộng quy mô (scale) một nền tảng thương mại điện tử vượt qua cột mốc 10.000+ đơn hàng mỗi ngày, với mỗi đơn chứa nhiều SKU trải dài qua nhiều kho hàng biến động là lúc mà các kiến trúc ngây thơ sẽ sụp đổ. Việc đập thêm tiền nâng cấp phần cứng không còn là viên đạn bạc khi hệ thống phải đối mặt với các giao dịch phân tán (distributed transactions), điều kiện tương tranh (race conditions), và tính nhất quán cuối (eventual consistency). ...

12 tháng 4, 2026 · 8 phút · Lê Tuấn Anh