Orchestrated Saga Pattern với Temporal: Thiết Kế Giao Dịch Phân Tán Bền Bỉ Trong Go

🇬🇧 Read the English version of this article on tanhdev.com Nỗi Đau của Giao Dịch Phân Tán trong Hệ Thống Core Banking Trong kiến trúc Monolith nguyên khối truyền thống, việc đảm bảo tính ACID (Atomicity, Consistency, Isolation, Durability) của một giao dịch tài chính cực kỳ đơn giản. Bạn chỉ cần mở một Database Transaction, thực thi hàng loạt câu lệnh SQL (trừ tiền tài khoản A, cộng tiền tài khoản B, ghi log kiểm toán), và cuối cùng gọi COMMIT. Nếu có bất kỳ lỗi gì xảy ra giữa chừng, bạn gọi ROLLBACK, và database engine sẽ tự động hoàn tác mọi thứ về trạng thái nguyên sơ ban đầu một cách hoàn hảo. ...

17 tháng 7, 2026 · 11 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: Các Go MCP servers chuẩn production yêu cầu sử dụng thư viện chính thức modelcontextprotocol/go-sdk và tuân thủ các schema JSON nghiêm ngặt. Bởi vì giao thức stdio transport sử dụng luồng standard output (stdout), bạn bắt buộc phải định tuyến tất cả các log nội bộ sang stderr để tránh làm crash ứng dụng client. Trả về các lỗi kiểm chứng dữ liệu (validation errors) dưới dạng lỗi cấp công cụ (tool-level failures) thay vì lỗi hệ thống nhằm duy trì kết nối bền vững. ...

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

🇬🇧 Read the English version of this article on tanhdev.com Answer-first: Go 1.26 ra mắt ba tính năng runtime mang tính bước ngoặt: Garbage Collector Green Tea (giảm từ 10–40% GC overhead), các cuộc gọi CGO (cgo calls) nhanh hơn khoảng ~30% cho các ứng dụng liên kết AI inference (suy luận AI), và một profile thử nghiệm về goroutine leak (rò rỉ goroutine) giúp phát hiện các goroutine bị block (khóa) vĩnh viễn thông qua phân tích khả năng tiếp cận của GC (GC reachability analysis). ...

12 tháng 6, 2026 · 22 phút · Tuan Anh

Golang gRPC Microservices chuẩn Production

🇬🇧 Read the English version of this article on tanhdev.com Tại sao chọn gRPC cho Go Microservices? Answer-first: 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. Cẩm nang này sẽ dìu dắt bạn cách thức xây dựng ra những bộ Go gRPC services đạt tầm production (production-grade) kể từ con số 0 tròn trĩnh. ...

11 tháng 6, 2026 · 26 phút · Tuan Anh

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

🇬🇧 Read the English version of this article on tanhdev.com 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 · 10 phút · Tuan Anh

Go pprof: Profiling CPU & Bộ nhớ trên Production

🇬🇧 Read the English version of this article on tanhdev.com 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 · 11 phút · Tuan Anh

MySQL Horizontal Scaling: Vitess & GORM Sharding

🇬🇧 Read the English version of this article on tanhdev.com Ngóc mọc lướt Khi ứng dụng của bạn vươn mình chạm ngõ ngóc mọc hàng triệu người dùng, một vọc lướt cỗ máy database ngóc mọc đơn độc (single database instance) lướt sớm muộn rọc vọc mọc cũng sẽ tự mình phình ngóc mọc lướt thành cái bọc cổ chai lướt rọc to ngóc mọc tướng nhất trong trọn ngóc mọc vọc bộ kiến trúc. Hòng rọc vọc đục để lướt vọc mọc giải quyết ngóc vọc mọc, việc vọc lướt rọc ngóc mọc mở rộng quy mô database MySQL (MySQL database scaling) rọc vọc mọc lướt lọt ngóc mọc thành vọc lướt rọc ngóc mọc điều rọc vọc bắt lướt mọc buộc (mandatory). Bạn vọc lướt rọc ngóc mọc phải vọc Bung Rộng DB mọc lướt cho Microservices (Scale DB for Microservices) vọc lướt sài mọc ngóc rọc các kỹ lướt mọc ngóc rọc thuật Horizontal Scaling (Bung Rộng Ngang). ...

1 tháng 6, 2026 · 16 phút · Tuan Anh

Các Mẫu Goroutine Pool Trong Go: errgroup & Cơ Chế Chặn (Backpressure)

🇬🇧 Read the English version of this article on tanhdev.com 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 · 27 phút · Tuan Anh

Go pprof trong Kubernetes: Remote Profiling & Flame Graphs

🇬🇧 Read the English version of this article on tanhdev.com 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 · 23 phút · Tuan Anh

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

🇬🇧 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 · 17 phút · Tuan Anh

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

🇬🇧 Read the English version of this article on tanhdev.com 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 · 20 phút · Tuan Anh