Phần 3: Golang + Kratos v2 — Đi sâu vào Framework Microservice

Đối với các kỹ sư chuyển từ Magento PHP sang, việc chuyển dịch sang Go microservices không chỉ đơn thuần là đổi ngôn ngữ lập trình — mà nó là một cách thức tổ chức code khác biệt về mặt bản chất. Magento có controller, model, block, helper, và plugin. Còn Go với Kratos v2 sở hữu chính xác 5 lớp (layer), mỗi lớp mang một trách nhiệm được định nghĩa rạch ròi. ...

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

Phần 4: gRPC Internal + REST Gateway — Vòng đời của Hợp đồng API

Mọi API hướng ra công chúng (public-facing) trong Nền tảng Composable Commerce đều bắt đầu từ một file .proto. Phần code — bao gồm các hàm handler gRPC viết bằng Go, TypeScript SDK, các route HTTP, kiểm tra tính hợp lệ của request (request validation), các mã lỗi — tất cả đều được tự động generate ra từ bản hợp đồng (contract) đó. Bài viết này sẽ ghi chép lại những quy ước đằng sau để hệ thống đó vận hành mượt mà. ...

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

Mỏ Ngôn Ngữ Nhắn Hú Múa Lửa Hò Hét (Communication Protocols) — Đâm Lộn gRPC vs REST vs Phân Xé GraphQL Chốn Ổ Chuột Go Microservices

Điều kiện tiên quyết: Đây là Phần 12 của Khóa Học System Design. Mấy bận trước bốc thuốc đắp mảng vách bọc thép (reliability) — hồi này nhào vô xới vật lộn cân đo đong đếm mớ đường dây múa mép (communication protocols) và rập khuôn mớ bã rác (data formats) để bọn microservice đánh tiếng ới gọi nhau (communication). Answer-first: Đao gRPC được gò rèn sắc lẹm cho màn đâm thọc đánh lộn trong nhà giữa lũ microservices nội bộ bằng chiêu băm nát nhồi rác nhị phân Protobuf luồn lách phà phà qua mấy cái ống nước xối xả HTTP/2 hoặc HTTP/3. Lưỡi dao REST thì quen mùi múa chảo quậy đống rác JSON tọng vô họng HTTP/1.1 hoặc HTTP/2 tiêu chuẩn, làm chân culi mặc định cho ba cái kèo giao tiếp thả rông ngoài đường (public APIs). Lão già GraphQL đóng vai thằng chóp bu gom góp vét máng (aggregator) sừng sững gác cửa (API gateway) hay mọc rễ ở chóp BFF, dâng hầu dọn cỗ cho bọn khách khứa (clients) thò vòi chọt đúng khoét trúng lổ mả đồ chơi chúng nó thèm, ngặt nỗi bắt buộc phải đeo cùm xích chặt cái thói ngáo ộp vắt kiệt sức (complexity limits) và nhét tọng mẻ hót DataLoader rúc rác nhồi bọc đặng không kéo rách lủng lổ ngộp thở sập mẹ hầm server. ...

18 tháng 6, 2026 · 24 phút · Tanh

Phần 4: Tích Hợp API Golang & Microservices (Kratos & Dapr)

Dựng một cái API cùi bắp để réo gọi Graphhopper qua lệnh http.Get thì dễ ợt. Nhưng để rèn ra một cái API Gateway đẳng cấp Principal dư sức gánh còng lưng 10,000 cuốc xe nã request cùng lúc mà không đột tử, đó đích thực là một khóa masterclass về Hệ thống Phân tán (Distributed Systems). Answer-first: Graphhopper là một con service tuyến dưới (downstream service) lệ thuộc cực nặng vào CPU. Nếu cái API Golang của bạn cứ nhắm mắt hứng đạn (traffic) rồi ném tuốt luốt thẳng xuống dưới, chỉ cần Graphhopper hắt hơi sổ mũi chạy chậm lại một nhịp thôi là bầy Goroutines sẽ dồn ứ lại thành một cục máu đông, vắt kiệt sạch RAM của server và kích hoạt một cú sập dây chuyền (cascading failure). Bạn buộc phải dựng lên một phòng tuyến “Bảo Vệ Đa Lớp” (Defense in Depth) xài tới chiêu Giới hạn Đồng thời (Concurrency Bounding), Cầu dao điện (Circuit Breakers), và trò Bắn tin Bất đồng bộ (Asynchronous Pub/Sub). ...

14 tháng 6, 2026 · 6 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

Alipay Double 11: Modern Tech Comparison

So Sánh Alipay Stack với Công Nghệ Hiện Đại Tổng Quan So Sánh Alipay Stack Modern Equivalent Key Difference LDC + RZone Kubernetes + Multi-cluster LDC: Business-driven sharding; K8s: Infrastructure abstraction OceanBase CockroachDB/TiDB/YugabyteDB OceanBase: 10+ years prod, custom FPGA; Newer: Cloud-native first RocketMQ Apache Kafka/Apache Pulsar RocketMQ: LSM-tree + rich msg types; Kafka: Log-centric; Pulsar: Tiered storage SOFARPC gRPC/Envoy Proxy SOFARPC: Java-centric, financial features; gRPC: Cross-platform, protobuf SOFAMesh (MOSN) Istio/Linkerd MOSN: Go-based, X-protocol; Istio: Envoy C++, standard mesh CTU Modern ML Platforms CTU: Custom fraud-specific; Modern: General-purpose MLOps PouchContainer containerd/cri-o Pouch: Alibaba-specific; containerd: CNCF standard 1. LDC Architecture vs Kubernetes Multi-Cluster Kiến Trúc So Sánh ┌─────────────────────────────────────────────────────────────────────────────┐ │ LDC (Alipay) vs Kubernetes Multi-Cluster │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ LDC Architecture (Business-Driven) │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ RZone 1 RZone 2 RZone N │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ │ │Users │ │Users │ │Users │ │ │ │ │ │1-1M │ │1M-2M │ │N-M │ │ │ │ │ ├─────────┤ ├─────────┤ ├─────────┤ │ │ │ │ │Apps │ │Apps │ │Apps │ │ │ │ │ │DB │ │DB │ │DB │ │ │ │ │ │Cache │ │Cache │ │Cache │ │ │ │ │ └─────────┘ └─────────┘ └─────────┘ │ │ │ │ │ │ │ │ • Sharding: User ID-based │ │ │ │ • Self-contained units │ │ │ │ • Cross-unit = Distributed txn │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ │ Kubernetes Multi-Cluster (Infrastructure-Driven) │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ Cluster 1 Cluster 2 Cluster N │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ │ │Region: │ │Region: │ │Region: │ │ │ │ │ │us-west │ │eu-west │ │ap-south │ │ │ │ │ ├─────────┤ ├─────────┤ ├─────────┤ │ │ │ │ │K8s Pods │ │K8s Pods │ │K8s Pods │ │ │ │ │ │Services │ │Services │ │Services │ │ │ │ │ └─────────┘ └─────────┘ └─────────┘ │ │ │ │ │ │ │ │ • Sharding: Infrastructure/region-based │ │ │ │ • Shared global services │ │ │ │ • Cross-cluster = Service mesh │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ Detailed Comparison Aspect LDC (Alipay) K8s Multi-Cluster Recommendation Sharding Strategy User ID / Business key Node/Region labels LDC approach cho data-intensive apps Unit Boundary App + Data + Cache Pods + Services LDC: true isolation; K8s: shared storage Cross-Unit Traffic Explicit ( costly ) Transparent via mesh LDC: intentional design; K8s: hide complexity Failover Manual/Scripted (RZone switch) Automatic (health checks) K8s wins cho automation Scaling Add RZone (complex) Add nodes (simple) K8s wins cho ops simplicity Data Consistency Strong (Paxos in unit) Eventual (cross-cluster) LDC wins cho financial data Khi Nào Dùng Cái Nào? Use LDC-style khi: ...

2 tháng 5, 2026 · 14 phút · Tuan Anh