System-Design

Lore: Epic Games mở mã nguồn VCS sinh ra để thay Git ở thế giới binary khổng lồ

Lore: Epic Games mở mã nguồn VCS sinh ra để thay Git ở thế giới binary khổng lồ

Repo game không giống repo web. Trong engine cỡ Unreal, phần lớn dung lượng là asset binary: texture, mesh, world partition nặng hàng trăm MB đến vài GB, đổi liên tục bởi cả nghìn artist lẫn developer. Đẩy vào Git là chuỗi ngày đau khổ: Git LFS là thứ bolt-on, artist export texture 2 GB là cả pipeline kéo full file, dedup binary bị giới hạn bởi pack-delta heuristic, partial clone cộng sparse checkout còn experimental, mất mạng là fail.

Đọc thêm
Thiết kế hệ thống thực chiến: Sự bình dị của những kiến trúc vận hành trơn tru

Thiết kế hệ thống thực chiến: Sự bình dị của những kiến trúc vận hành trơn tru

Nhiều kỹ sư mới vào nghề thường lầm tưởng rằng một thiết kế hệ thống (System Design) ấn tượng phải là một mạng lưới chằng chịt các microservices, sử dụng Apache Kafka để stream event, áp dụng pattern CQRS phức tạp và chạy distributed consensus khắp nơi.

Đọc thêm
Dùng Golang Duy Trì Sự Sống: Hệ Thống Incident Management Tự Động Cho Bệnh Tiểu Đường Type 1

Dùng Golang Duy Trì Sự Sống: Hệ Thống Incident Management Tự Động Cho Bệnh Tiểu Đường Type 1

Bia hơi hoặc một đĩa salad ngỡ như lành mạnh chứa bao nhiêu gram carbohydrate? Với đại đa số mọi người, câu trả lời thường là “ai mà quan tâm”, ngoại trừ những người đang theo chế độ ăn kiêng khắt khe. Nhưng đối với khoảng 8 triệu người mắc bệnh Tiểu đường Type 1 (T1D) trên thế giới, đây là câu hỏi sống còn diễn ra mỗi ngày.

Đọc thêm
Những lời dối lòng khi chúng ta cố bám trụ với Golang

Những lời dối lòng khi chúng ta cố bám trụ với Golang

Trong cộng đồng lập trình Backend, Golang (Go) luôn được xưng tụng như một vị vua của sự tối giản. Từ các microservices tại Google, Uber, Grab cho đến các công cụ hạ tầng cốt lõi như Docker, Kubernetes, Terraform - Go gần như hiện diện ở khắp mọi nơi. Chúng ta truyền tai nhau những luận điểm quen thuộc: “Go đơn giản dễ học”, “Concurrency trong Go siêu nhẹ nhờ Goroutine”, “Toolchain của Go biên dịch cực nhanh và chỉ ra 1 file binary duy nhất”.

Đọc thêm
Khi AI Agent 'Báo' Chủ Nhân $6,500 AWS Bill Chỉ Vì Thử Scan Mạng DN42

Khi AI Agent 'Báo' Chủ Nhân $6,500 AWS Bill Chỉ Vì Thử Scan Mạng DN42

Mấy ngày qua, cộng đồng DevOps và những anh em chơi mạng mạng (networking) đang rần rần chia sẻ một câu chuyện dở khóc dở cười. Một thanh niên (operator) tự tin thả xích cho một AI Agent kèm theo một API Key AWS có toàn quyền (administrator access) với nhiệm vụ nghe rất đơn giản: gia nhập và quét (scan) mạng DN42. Kết quả là chỉ sau vài ngày, thanh niên này nhận được hóa đơn AWS trị giá $6,531.30 và tuyên bố phá sản, phải lên mailing list của DN42 và các kênh Matrix để xin quyên góp crypto cứu đói.

Đọc thêm
Kiến trúc phần mềm: Monolith, Microservices và cái bẫy Distributed Monolith

Kiến trúc phần mềm: Monolith, Microservices và cái bẫy Distributed Monolith

Nhiều lập trình viên Backend trẻ thường có xu hướng xem các mô hình kiến trúc phần mềm như một tôn giáo hoặc thước đo trình độ. Microservices thường được tôn sùng như đỉnh cao công nghệ, Monolith bị gán nhãn lạc hậu, còn Distributed Monolith - trạng thái tệ hại nhất - lại thường bị nhầm lẫn với vi dịch vụ thực thụ.

Đọc thêm
Agent = Model + Harness: Đừng mang động cơ F1 lắp vào xe bus không phanh

Agent = Model + Harness: Đừng mang động cơ F1 lắp vào xe bus không phanh

Hồi cuối năm ngoái, mình có tự chế một con bot chạy ngầm để tự động đọc menu của các đối tác quán ăn gửi về dưới dạng PDF/Excel, rồi parse qua struct Go để nạp vào DB của hệ thống Menu Service.

Đọc thêm
Khi nào nên dùng cache (và khi nào không)

Khi nào nên dùng cache (và khi nào không)

Có một bug production mà đến giờ mình vẫn nhớ như in: user A hủy đơn hàng, nhưng app vẫn hiển thị “đang giao” trong 10 phút tiếp theo. Support nhận 30 ticket trong 1 buổi sáng. Nguyên nhân: cache TTL 10 phút, nhưng không ai invalidate khi order status thay đổi.

Đọc thêm