- Trong hai ngày 19~20/10/2025, khu vực AWS N. Virginia (us-east-1) đã gặp sự cố kéo dài trên Amazon DynamoDB cùng nhiều dịch vụ cốt lõi khác
- Sự cố bắt đầu khi một race condition tiềm ẩn trong hệ thống quản lý DNS tự động của DynamoDB tạo ra nhầm một bản ghi DNS rỗng không hợp lệ
- Điều này dẫn đến chuỗi sự cố gồm không thể tạo EC2 instance, lỗi kết nối Network Load Balancer (NLB), cùng độ trễ và lỗi API trên nhiều dịch vụ như Lambda, ECS, Redshift
- AWS xác định nguyên nhân là xung đột cập nhật đồng thời bất thường giữa các DynamoDB DNS Enactor, và đã khôi phục hoàn toàn vào khoảng 2:20 chiều ngày 20/10 sau khi can thiệp thủ công
- Sự cố lần này cho thấy độ phức tạp trong sự phụ thuộc lẫn nhau giữa các hệ thống tự động hóa nội bộ của AWS, và báo hiệu các cải tiến cấu trúc sắp tới để tăng khả năng phục hồi cho DNS, EC2 và NLB
Tổng quan sự cố
- Sự cố bắt đầu lúc 11:48 tối (PDT) ngày 19/10/2025 và kết thúc lúc 2:20 chiều (PDT) ngày 20/10
- Có ba giai đoạn ảnh hưởng chính:
- 11:48PM ngày 19/10 ~ 2:40AM ngày 20/10: tỷ lệ lỗi API của DynamoDB tăng vọt
- 5:30AM ~ 2:09PM ngày 20/10: lỗi kết nối NLB gia tăng
- 2:25AM ~ 10:36AM ngày 20/10: thất bại khi tạo EC2 instance mới và sự cố kết nối mạng
- Sự cố bắt đầu từ lỗi trong hệ thống quản lý DNS của DynamoDB rồi lan sang nhiều dịch vụ như EC2, NLB, Lambda, Redshift
Nguyên nhân và tác động của sự cố DynamoDB
- Hệ thống quản lý DNS tự động của DynamoDB đã kích hoạt một lỗi tiềm ẩn, khiến bản ghi DNS của
dynamodb.us-east-1.amazonaws.com bị cập nhật sai thành trạng thái rỗng
- Hệ thống được tách thành hai thành phần:
- DNS Planner: giám sát trạng thái load balancer và tạo kế hoạch DNS mới
- DNS Enactor: áp dụng thay đổi lên Route53
- Đã xảy ra race condition giữa các DNS Enactor được triển khai độc lập trên ba Availability Zone (AZ)
- Enactor thứ nhất áp dụng một kế hoạch cũ trong trạng thái bị trễ
- Enactor thứ hai áp dụng kế hoạch mới nhất rồi xóa kế hoạch cũ, khiến toàn bộ địa chỉ IP bị loại bỏ và hệ thống rơi vào trạng thái không nhất quán
- Việc tự động khôi phục thất bại nên cần can thiệp thủ công
- Ngay sau khi sự cố bắt đầu lúc 11:48PM, tất cả dịch vụ và lưu lượng khách hàng phụ thuộc vào DynamoDB đều gặp lỗi kết nối
- Khách hàng dùng global table vẫn có thể gửi yêu cầu tới bản sao ở khu vực khác, nhưng phát sinh replication lag
- Lúc 12:38AM, kỹ sư AWS xác nhận trạng thái DNS là nguyên nhân của sự cố
- Lúc 1:15AM, một biện pháp khôi phục tạm thời đã giúp khôi phục kết nối cho một phần dịch vụ nội bộ
- Lúc 2:25AM, thông tin DNS được khôi phục hoàn toàn, và đến 2:40AM thì mọi kết nối đã trở lại bình thường
Tác động tới Amazon EC2 và quá trình khôi phục
- Trong khoảng 11:48PM ngày 19/10 ~ 1:50PM ngày 20/10, đã xảy ra tăng tỷ lệ lỗi API EC2, thất bại khi tạo instance và tăng độ trễ
- Các instance đang chạy sẵn không bị ảnh hưởng
- Việc quản lý EC2 instance sử dụng hai hệ thống con là DropletWorkflow Manager (DWFM) và Network Manager
- DWFM quản lý trạng thái của các máy chủ vật lý (“droplet”) và thực hiện kiểm tra trạng thái định kỳ
- Network Manager truyền bá cấu hình mạng của instance
- Do sự cố DynamoDB, việc kiểm tra trạng thái của DWFM thất bại khiến lease của các droplet hết hạn
- Sau khi DynamoDB được khôi phục lúc 2:25AM, DWFM cố gắng kết nối lại nhưng do số lượng droplet quá lớn đã dẫn tới congestive collapse
- Lúc 4:14AM, kỹ sư chọn lọc khởi động lại các host DWFM để dọn hàng đợi và tiếp tục khôi phục
- Lúc 5:28AM, toàn bộ lease của droplet được phục hồi và việc tạo instance mới được nối lại
- Sau đó, khi Network Manager xử lý backlog lan truyền trạng thái mạng bị chậm, đã phát sinh độ trễ kết nối mạng
- Lúc 10:36AM, thời gian lan truyền mạng trở lại bình thường
- Lúc 11:23AM bắt đầu nới lỏng giới hạn yêu cầu (throttling), và đến 1:50PM thì EC2 được khôi phục hoàn toàn
Tác động tới Network Load Balancer (NLB)
- Từ 5:30AM ~ 2:09PM ngày 20/10, một số khách hàng gặp lỗi kết nối NLB gia tăng
- NLB có kiến trúc multi-tenant và định tuyến lưu lượng tới các EC2 instance backend
- Nguyên nhân là thất bại health check do chậm lan truyền trạng thái mạng
- Cấu hình mạng của các EC2 instance mới thêm chưa hoàn tất nên health check thất bại
- Kết quả health check dao động lặp lại, khiến các node NLB bị gỡ khỏi DNS rồi lại quay trở lại
- Lúc 6:52AM, hệ thống giám sát phát hiện vấn đề và kỹ sư bắt đầu xử lý
- Tải tăng trên hệ thống con health check đã kích hoạt cơ chế failover DNS AZ tự động
- Lúc 9:36AM, việc vô hiệu hóa failover tự động đã đưa toàn bộ node bình thường trở lại
- Lúc 2:09PM, sau khi EC2 khôi phục, failover tự động được bật lại
Tác động tới các dịch vụ AWS khác
- AWS Lambda:
- Lỗi API và độ trễ từ 11:51PM ngày 19/10 ~ 2:15PM ngày 20/10
- Do sự cố DynamoDB, việc tạo/cập nhật function thất bại và xử lý sự kiện SQS/Kinesis bị chậm
- Lúc 7:04AM, thất bại health check của NLB khiến hệ thống nội bộ bị thu hẹp, làm hạn chế các lời gọi bất đồng bộ
- Đến 2:15PM, mọi backlog đã được xử lý xong và hệ thống trở lại bình thường
- ECS, EKS, Fargate:
- Thất bại khi chạy container và chậm mở rộng cluster trong khoảng 11:45PM ngày 19/10 ~ 2:20PM ngày 20/10
- Amazon Connect:
- Lỗi trong xử lý cuộc gọi, chat và case từ 11:56PM ngày 19/10 ~ 1:20PM ngày 20/10
- Sau khi DynamoDB khôi phục, phần lớn chức năng hoạt động lại bình thường, nhưng từ 7:04AM lại phát sinh lỗi do ảnh hưởng của NLB và Lambda
- Khôi phục hoàn toàn lúc 1:20PM
- AWS STS:
- Lỗi và độ trễ trên API xác thực từ 11:51PM ngày 19/10 ~ 9:59AM ngày 20/10
- Tạm thời bình thường sau khi DynamoDB khôi phục, rồi lại phát sinh lỗi do vấn đề NLB
- Đăng nhập IAM và Identity Center:
- Tăng lỗi xác thực từ 11:51PM ngày 19/10 ~ 1:25AM ngày 20/10
- Trở lại bình thường sau khi DynamoDB được khôi phục
- Amazon Redshift:
- Thất bại khi truy vấn và chỉnh sửa cluster từ 11:47PM ngày 19/10 ~ 2:21AM ngày 20/10
- Sau khi DynamoDB khôi phục, một số cluster vẫn chưa bình thường do sự cố EC2
- Khôi phục hoàn toàn lúc 4:05AM ngày 21/10
- Do phụ thuộc vào IAM API, ngay cả các khu vực toàn cục cũng tạm thời gặp lỗi truy vấn
- Các dịch vụ khác:
- Managed Workflows for Apache Airflow, Outposts, AWS Support Center cùng một số dịch vụ khác cũng bị ảnh hưởng
Biện pháp hậu sự cố và kế hoạch cải thiện
- Tự động hóa DNS Planner và Enactor của DynamoDB đã bị vô hiệu hóa hoàn toàn, và trước khi kích hoạt lại AWS sẽ sửa race condition cũng như bổ sung cơ chế bảo vệ
- NLB: triển khai cơ chế điều tiết tốc độ để giới hạn lượng công suất mà một NLB đơn lẻ có thể loại bỏ khi health check thất bại
- EC2:
- Xây dựng bộ test mới bao gồm cả quy trình khôi phục DWFM
- Cải thiện smart throttling trong hệ thống lan truyền dữ liệu để bổ sung khả năng giới hạn yêu cầu theo kích thước hàng đợi chờ
- AWS đang tiếp tục rà soát thêm sự phụ thuộc lẫn nhau giữa các dịch vụ để rút ngắn thời gian khôi phục và ngăn các sự cố tương tự
Kết luận và lời xin lỗi
- AWS đã chính thức xin lỗi về tác động mà sự cố lần này gây ra cho khách hàng
- Dù trước nay công ty đã duy trì tính sẵn sàng cao cho các dịch vụ, AWS thừa nhận sự cố này đã gây ảnh hưởng nghiêm trọng tới hoạt động kinh doanh của khách hàng
- AWS cam kết lấy sự cố này làm bài học để tăng cường khả năng phục hồi của các hệ thống tự động hóa và quy trình ứng phó sự cố
2 bình luận
Nghe nói đây là dư chấn sau khi sa thải các nhân sự cấp cao... có đúng vậy không?
Ý kiến trên Hacker News
Tôi là người lúc nào cũng lặp lại cùng một điều về chủ đề này. Nếu bạn դեռ chưa đọc bài viết của Richard Cook, tôi khuyên hãy dừng bản postmortem này lại và đọc How Complex Systems Fail trước. Đây là một trong những bài viết kỹ thuật hay nhất về thất bại của các hệ thống phức tạp. Cook bác bỏ chính khái niệm “nguyên nhân gốc rễ (root cause)”, và tôi nghĩ trong sự cố lần này ông ấy đã đúng
Internet đang dần biến thành một mạng đơn tập trung (mononet). Internet sinh ra như một mạng phân tán thời Chiến tranh Lạnh, giờ đây lại trở thành cấu trúc mà chỉ một lỗi triển khai cũng có thể khiến ngân hàng, mua sắm và du lịch trên toàn thế giới ngừng hoạt động. Ẩn dụ “đám mây” đã vượt quá giới hạn của nó từ lâu.
Nó vẫn hữu ích cho startup hay R&D, nhưng các công ty đang ở giai đoạn tăng trưởng hoặc chính phủ thì nên có máy chủ riêng, cloud riêng, dịch vụ cốt lõi riêng. Công nghệ và nhân lực đều đã đủ
Tôi ấn tượng với cách trực quan hóa timeline chính xác trong bản postmortem của AWS. Giống như bài nói chuyện huyền thoại ở GDC “I Shot You First”, cách thể hiện dòng thời gian bằng các mũi tên nghiêng và đặt câu hỏi “độ trễ phát sinh ở đâu” rất hữu ích.
Nhưng điều làm tôi ngạc nhiên hơn là dịch vụ quản lý lease của node EC2 lại không có quy trình khôi phục (runbook). Với một dịch vụ cốt lõi của AWS, tôi đã nghĩ gần như mọi tình huống ngoại lệ đều phải được chuẩn bị sẵn
Cốt lõi của sự cố lần này có vẻ giống một biến thể của vấn đề vô hiệu hóa bộ nhớ đệm (cache invalidation) trong hệ thống DNS. Hai DNS Enactor áp dụng plan ở các thời điểm khác nhau nên phát sinh race condition, và plan cũ đã ghi đè lên plan mới
Enactor lẽ ra phải thực hiện so sánh phiên bản của record hiện tại (CAS) trước khi áp dụng giá trị mới. Dù hiệu quả có giảm thì đây vẫn là chốt an toàn cơ bản. Có lẽ DynamoDB tự nó cũng đã có thể xử lý việc này
Tôi ngạc nhiên khi thấy mô tả rằng DynamoDB quản lý hàng trăm nghìn DNS record theo từng khu vực.
dynamodb.us-east-1.amazonaws.commà có thể phân giải ra hàng trăm nghìn IP thì có vẻ vượt quá giới hạn của Route53. Có lẽ họ để TTL thấp và chỉ cập nhật một phầnBug thì lúc nào cũng tồn tại. Formal verification rất khó, và những bug xác suất thấp đôi khi phải nhiều năm sau mới phát nổ.
Vì vậy phải giả định rằng hệ thống chắc chắn sẽ thất bại, rồi thiết kế cấu trúc giới hạn thiệt hại. Kiến trúc dựa trên cell, rollout theo từng bước, và các zone cách ly là ví dụ.
AWS cũng đang thử theo hướng cell-based, nhưng đặc biệt ở us-east-1 vẫn còn các phụ thuộc chéo mang tính legacy. Về dài hạn, region cần được thiết kế độc lập hoàn toàn.
Công việc như vậy sẽ không thể tiến hành nếu không có sự hậu thuẫn của lãnh đạo cấp cao, nhưng ở góc độ cổ đông thì đây là khoản đầu tư cốt lõi để giảm rủi ro sống còn của công ty
Tôi thấy lạ khi báo cáo dùng múi giờ PT thay vì UTC
Tôi ngạc nhiên khi không có các mẫu như quản lý phiên bản per-endpoint hay 2PC, single writer lease. Dù vậy tôi vẫn đánh giá cao việc AWS công khai minh bạch như thế này
Tôi cho rằng nguyên nhân trực tiếp của sự cố lần này là race condition tiềm ẩn trong hệ thống quản lý DNS của DynamoDB. Plan cũ đã ghi đè plan mới nhất, khiến DNS record của endpoint khu vực bị trống
Tham khảo: How Complex Systems Fail