Blog
Thoughts on engineering, design, and building great products.
Cold Start: Đo Thật Rồi Tối Ưu Cái Tối Ưu Được
Quay lại cold start với số đo thật. Ép một cold start trên handler resolve để thấy Init Duration và cái giá của lần gọi đầu, rồi soi các cách giảm: tăng bộ nhớ (cũng là tăng CPU), cắt kích thước gói, SnapStart, và provisioned concurrency — mỗi cách có chỗ dùng riêng, và trên tài khoản test có cách không áp dụng được.
Quan Sát Hệ Thống: Lambda Powertools và X-Ray Tracing
Bắt đầu phần vận hành như production bằng việc nhìn được vào bên trong. Gắn Lambda Powertools để có log JSON có cấu trúc và đẩy metric, bật X-Ray để theo dấu một request đi qua những dịch vụ nào. Đọc một trace thật cho thấy resolve gọi DynamoDB và EventBridge thành các subsegment, và một dòng log mang sẵn trace id để nối log với trace.
Đếm Click An Toàn: Idempotency, DLQ và Partial Batch Failure
Biến consumer ghi log ở bài trước thành một aggregator thật. Chèn SQS giữa EventBridge và Lambda để có batch, retry và dead-letter queue, đếm click vào DynamoDB bằng transaction để vừa cộng bộ đếm vừa chống đếm trùng trong một thao tác nguyên tử, và báo lỗi theo từng message để chỉ thử lại cái hỏng. Test thật: gửi trùng sự kiện đếm một lần, sự kiện lỗi rơi vào DLQ.
Nối DynamoDB Vào Code: Ghi An Toàn và Atomic Counter
Gắn hai handler vào DynamoDB thật: tạo link ghi item với conditional write để không đè trùng mã, mở link tra cứu rồi đếm click bằng atomic counter. Bắn nhiều lượt mở song song để thấy atomic counter đếm chính xác, và bắt gặp một giới hạn thật của tài khoản — concurrency Lambda — khi 40 trong 50 request trả về 503.
Lambda Chạy Code Của Bạn Ra Sao Bên Trong
Mổ vòng đời môi trường thực thi của Lambda: ba pha Init, Invoke, Shutdown, vì sao có cold start, và code static chạy một lần ra sao. Đo cold start thật (Init Duration), rồi đo quan hệ memory–CPU bằng cùng một việc CPU ở 128 MB và 1769 MB. Hiểu phần này để các quyết định về hiệu năng và chi phí sau này có cơ sở.
Dựng Môi Trường: AWS SAM và Hàm Lambda Đầu Tiên
Cài AWS SAM CLI, dựng khung project cho URL shortener (TypeScript + esbuild), rồi deploy một hàm Lambda thật ra AWS qua Function URL, gọi nó bằng curl, chạy thử local trong Docker, và xóa sạch bằng một lệnh. Kèm bài học về việc SAM CLI phải đủ mới để hỗ trợ runtime nodejs22.x.
Serverless Là Gì và Khi Nào Nên Dùng
Bài mở đầu series: serverless thực ra nghĩa là gì (không phải 'không có server'), nó đánh đổi cái gì để lấy cái gì, khi nào KHÔNG nên dùng, và sản phẩm ta sẽ dựng xuyên suốt — một dịch vụ rút gọn URL có analytics realtime. Kèm sơ đồ kiến trúc tổng thể và lộ trình từng phần.