Câu chuyện · Amazon S3 năm 2017

Một lệnh nhầm,
bốn tiếng
Amazon S3

Kể lại từ bản tổng kết sau sự cố do chính AWS đăng. Một giá trị gõ sai, và công cụ cho phép gỡ nhiều hơn dự định. Không nêu tên người, không đoán họ nghĩ gì.

28/2/20179:37 sángChỉ mục và vị tríCông cụ an toàn hơn
9:37 đến 13:54 giờ Thái Bình Dương
sự cố ban ngày, không phải ban đêm
Ba ý chính

Chuyện S3, nói gọn

1Lệnh làm đúng điều nó được thiết kế để làm. Không có gì chặn nó gỡ quá nhiều.
2Khởi động lại đã nhiều năm không làm. Khả năng hồi phục chưa được thử ở quy mô hiện tại.
3AWS sửa cơ chế, không cấm gõ nhầm. Gỡ chậm hơn, có mức tối thiểu, chia ô độc lập.

Tóm lại: làm cho một giá trị gõ sai không gây hại lớn.
Lưu ý: giờ theo Thái Bình Dương như bản tổng kết. Bảng năm lớp là cách đọc của mình.

Từ khó, nói dễ

Sáu từ để theo dõi chuyện

Thuật ngữNói dễ hiểu
Amazon S3Dịch vụ lưu tệp trên đám mây của AWS, rất nhiều trang và ứng dụng dùng
Vùng (region)Cụm trung tâm dữ liệu ở một khu vực. US-EAST-1 là vùng lớn
Hệ thống chỉ mụcGiữ thông tin mỗi vật được lưu nằm ở đâu
Hệ thống vị tríChọn nơi lưu vật mới, phụ thuộc vào chỉ mục
Bán kính ảnh hưởngMột sự cố làm hỏng được bao nhiêu thứ xung quanh
Sổ tay (playbook)Các bước soạn sẵn cho một việc vận hành
Buổi sáng hôm đó

Một việc vận hành bình thường

1

Đang gỡ lỗi

Nhóm S3 đang tìm lý do một quy trình tính cước chạy chậm.

2

Theo sổ tay có sẵn

Người có quyền gỡ một ít máy chủ khỏi hệ thống liên quan đến cước.

3

9:37, một giá trị gõ sai

Nhiều máy chủ hơn dự định bị gỡ, thuộc chỉ mục và vị trí.

Dòng thời gian

Ngày 28/2/2017, giờ Thái Bình Dương

GiờChuyện gì xảy ra
9:37Lệnh chạy, nhiều máy chủ hơn dự định bị gỡ
11:37Bảng trạng thái dịch vụ cập nhật lại được
12:26Chỉ mục đủ sức phục vụ lấy, liệt kê, xóa
13:18Chỉ mục hồi phục hoàn toàn
13:54Hệ thống vị trí xong, S3 hoạt động bình thường
Chi tiết đáng nghĩ

Khởi động lại mà nhiều năm chưa làm

Điều bản tổng kết viết

Các hệ thống lớn này nhiều năm chưa được khởi động lại hoàn toàn ở vùng lớn. S3 đã lớn lên rất nhiều, và việc kiểm tra an toàn khi khởi động lại mất lâu hơn dự kiến.

Cách mình đọc

Khả năng hồi phục chưa được thử ở quy mô hiện tại. Giống bài học của GitLab: bản sao lưu chưa khôi phục thử thì chưa biết có dùng được không.

Đây là suy luận của mình từ bản tổng kết.
Ai bị ảnh hưởng

Cả bảng báo sự cố cũng nằm trên S3

Dịch vụ bị ảnh hưởng

Bảng điều khiển S3, tạo máy ảo EC2 mới, ổ EBS cần dữ liệu từ ảnh chụp trên S3, và AWS Lambda. Một số dịch vụ còn tồn hàng đợi cần thêm thời gian.

Chi tiết trớ trêu

Bảng trạng thái dịch vụ của AWS cũng phụ thuộc S3, nên đến 11:37 chưa cập nhật được. AWS phải dùng tài khoản Twitter và dòng chữ trên bảng để báo tin.

Suy luận chung: công cụ báo sự cố không nên sống trên chính thứ đang hỏng.
Bảng năm lớp

Một giá trị gõ sai thành bốn tiếng

1

Công cụ cho gỡ quá nhiều

Không có mức tối thiểu chặn lại.

2

Gỡ quá nhanh

Về sau đổi sang gỡ chậm hơn.

3

Bán kính ảnh hưởng lớn

Hai hệ thống lõi của cả vùng. Về sau chia ô độc lập.

4

Hồi phục chưa thử

Khởi động lại chậm hơn dự kiến.

5

Bảng báo phụ thuộc thứ hỏng

Về sau chạy trên nhiều vùng.

AWS đã sửa gì

Theo bản tổng kết

ViệcĐể làm gì
Gỡ chậm hơnGiảm tốc độ mất năng lực
Mức tối thiểuChặn việc gỡ xuống dưới mức cần thiết
Rà soát công cụ khácTìm chỗ thiếu kiểm tra an toàn tương tự
Chia ô độc lậpThu nhỏ bán kính ảnh hưởng, hồi phục nhanh hơn
Bảng trạng thái nhiều vùngVẫn báo được khi một vùng hỏng
So với GitLab

Hai chuyện năm 2017, hai bài học

GitLabAmazon S3
Cái saiXóa nhầm dữ liệu trên máy chủMột giá trị gõ sai, gỡ quá nhiều máy chủ
Chỗ yếu chínhSao lưu không dùng đượcCông cụ không giới hạn và hồi phục chưa thử
Bài học chungĐừng chỉ dựa vào việc người không saiĐừng chỉ dựa vào việc người không sai
Câu hỏi cho công cụ

Bốn câu hỏi cho mọi lệnh có thể gỡ

1

Nó cho biết sẽ gỡ bao nhiêu?

Trước khi chạy, không phải sau.

2

Có mức tối thiểu không?

Lệnh có thể bị từ chối nếu vượt mức.

3

Mặc định có chậm không?

Gỡ từng ít một để kịp thấy.

4

Hồi phục mất bao lâu ở quy mô thật?

Đã thử chưa, hay chỉ đoán.

Cân bằng

Bài này cũng có giới hạn

Điều nên nhớ
  • Đọc trực tiếp bản tổng kết của AWS
  • Không nêu tên người
  • Bảng năm lớp là cách đọc của mình
Đừng hiểu nhầm
  • Bản tổng kết không nói giá trị nào gõ sai
  • Không biết người đó nghĩ gì
  • Một nguồn, một thời điểm

Giờ theo Thái Bình Dương. Sự cố kéo dài khoảng 4 giờ 17 phút, ban ngày.

Việc làm ngay

Chọn một lệnh có thể gỡ hoặc xóa nhiều thứ trong công việc của bạn và hỏi: nếu gõ sai một giá trị, nó gỡ được tối đa bao nhiêu?

Nếu câu trả lời là "tất cả", đó là việc đầu tiên cần sửa.