Facebook không thể sập? Khoan, chờ tí, sập được đó, và sập hẳn 6 tiếng mới lên lại được, kéo theo WhatsApp, Instagram cũng chết theo, và nhiều việc dựa trên các dịch vụ của Facebook hay những công ty, những việc cần chat qua WhatsApp cũng bị gián đoạn. Vì sao lại như thế? Mời các bạn xem giải thích chi tiết từ Cloudflare, một trong những công ty cũng thuộc dạng sừng sỏ cung cấp dịch vụ hạ tầng và bảo mật cho thế giới web, và cũng là công ty cung cấp dịch vụ 1.1.1.1 mà nhiều bạn đang dùng.
Ngày hôm nay lúc 15:51 UTC (là theo múi giờ GMT+0), chúng tôi mở một ticket lỗi mang tên “Việc tìm kiếm DNS của Facebook trả về SERVFAIL”. Lý do là Cloudflare nghĩ dịch vụ 1.1.1.1 bị lỗi gì đó không thể tìm thấy các server của Facebook. Nhưng sau đó ít lâu, các kĩ sư của Cloudflare cũng như cả thế giới đều xác nhận rằng lỗi nằm ở Facebook, hạ tầng của họ đã “biến mất” khỏi thế giới Internet trên phạm vi toàn cầu. Thậm chí các địa chỉ IP của server vận hành Facebook cũng không thể truy cập. Như thể có ai đó rút điện toàn bộ server của họ cùng lúc vậy.
Facebook giải thích rằng các kĩ sư của họ đã cấu hình không đúng các router dùng trong những data center của công ty, khiến việc điều hướng dữ liệu giữa các data center bị lỗi. Việc này tạo ra ảnh hưởng lên nhiều data center, nhiều dịch vụ khác nhau.
Về phần Cloudflare, họ nhận thấy vấn đề nằm ở BGP và DNS.
Ngày hôm nay lúc 15:51 UTC (là theo múi giờ GMT+0), chúng tôi mở một ticket lỗi mang tên “Việc tìm kiếm DNS của Facebook trả về SERVFAIL”. Lý do là Cloudflare nghĩ dịch vụ 1.1.1.1 bị lỗi gì đó không thể tìm thấy các server của Facebook. Nhưng sau đó ít lâu, các kĩ sư của Cloudflare cũng như cả thế giới đều xác nhận rằng lỗi nằm ở Facebook, hạ tầng của họ đã “biến mất” khỏi thế giới Internet trên phạm vi toàn cầu. Thậm chí các địa chỉ IP của server vận hành Facebook cũng không thể truy cập. Như thể có ai đó rút điện toàn bộ server của họ cùng lúc vậy.
Facebook giải thích rằng các kĩ sư của họ đã cấu hình không đúng các router dùng trong những data center của công ty, khiến việc điều hướng dữ liệu giữa các data center bị lỗi. Việc này tạo ra ảnh hưởng lên nhiều data center, nhiều dịch vụ khác nhau.
Về phần Cloudflare, họ nhận thấy vấn đề nằm ở BGP và DNS.
BGP là gì?
BGP viết tắt cho chữ Border Gateway Protocol, là cơ chế để điều hướng dữ liệu giữa các hệ thống tự động (autonomous systems - AS) trên Internet. Thế giới Internet thực chất là một mạng lưới những mạng lưới cùng kết nối với nhau. Nhờ có BGP mà router biết được gói tin mà nó nhận cần được di chuyển di đâu, có những lựa chọn đường đi khả thi nào để tới được điểm cuối cùng. Không có BGP, các router sẽ không biết làm gì, Internet sẽ chết.
Nói cách khác, BGP cho phép một network (ví dụ, network các máy chủ của Facebook) có thể tự “quảng cáo” (advertise) bản thân đến cho những network khác trên Internet. Khi gặp sự cố, network của Facebook đang không tự quảng cáo cho bản thân nó, nên các nhà mạng và những network khác sẽ không biết tìm network của Facebook ở đâu, đố anh bắt được em.
Mỗi network sẽ có một số định danh của nó, gọi là ASN - Autonomous System Number. Số này giống như địa chỉ của network. Một AS có thể biết và quản lý một cụm các địa chỉ IP khác nhau, hoặc nó cũng có thể biết đường để chuyển dữ liệu đến những cụm IP khác.
ASN của Cloudflare là AS13335. Mọi ASN cần phải thông báo về các đường đi của dữ liệu thông qua BGP, bằng không thì người khác không thể tìm thấy bạn.
Trong hình bên dưới, bạn có thể thấy 6 hệ thống AS trên Internet, chúng có 2 đường khả thi để một gói tin có thể đi từ điểm “start” đến điểm “end”. Đường AS1 → AS2 → AS3 là đường nhanh nhất, nhưng nếu đường này bị hỏng thì có thể dùng đường AS1 → AS6 → AS5 → AS4 → AS3. Đường thứ hai sẽ chậm hơn do phải đi qua nhiều bước trung gian, nhưng vẫn đỡ hơn là không có đường nào để đi.
Vào lúc 15:58 UTC, Cloudflare nhận thấy Facebook đã dừng thông báo các đường đi khả thi trong hệ thống DNS (phân giải tên miền) của họ. Nói cách khác, ít nhất là server dùng cho việc phân giải tên miền của Facebook đã chết. DNS làm nhiệm vụ chuyển tên miền chữ, ví dụ facebook.com, thành một địa chỉ IP cụ thể, ví dụ 234.14.200.89. Thường thì trong các web và app, lúc cần gọi dữ liệu, cũng như khi giao tiếp với nhau thì người ta chỉ dùng tên miền chữ, hiếm khi nào nhập nguyên IP thô lắm.
Thế nên khi hệ thống của Facebook gặp sự cố, app và web Facebook không thể tìm được server, và không thể lấy dữ liệu về, cũng không thể gửi dữ liệu lên. Mọi thứ mắc kẹt, và đó là lúc mà chúng ta nhận thấy Facebook sập. Cloudflare cũng vậy, DNS 1.1.1.1 của họ không biết làm sao để tìm thấy địa chỉ IP cho những yêu cầu về facebook.com.
Quảng cáo
Cloudflare theo dõi tất cả những thông tin cập nhật và thông báo liên quan tới BGP trên mạng lưới toàn cầu của họ. Ở quy mô lớn của Cloudflare, dữ liệu mà họ thu thập có thể giúp chúng ta nhìn rõ hơn về cách mà thế giới Internet được kết nối với nhau, dữ liệu sẽ chảy đi đâu.
Một gói tin dùng để cập nhật thông tin BGP được gọi là BGP UPDATE, nó sẽ báo cho router biết bất kì thay đổi nào có liên quan tới luồng đi của dữ liệu, hoặc nếu bạn hủy hoàn toàn luồng đi. Dữ liệu bên dưới là các gói tin BGP UPDATE của Facebook. Bình thường thì nó nhỏ thôi, không đáng kể, nhưng khoảng 15:40 UTC thì số lượng BGP UPDATE đột nhiên vọt lên cao. Đó cũng là lúc các vấn đề bắt đầu xảy ra.
Nếu tách các đợt cập nhật này ra chi tiết hơn, có thể thấy rằng các đường đi của dữ liệu bị rút đi, server DNS của Facebook không còn hoạt động, và sau đó 1 phút, các kĩ sư của Cloudflare bắt đầu hỏi nhau vì sao 1.1.1.1 không thể kết nối đến facebook.com. Cơ bản là với việc rút các route này, Facebook đã tự ngắt mình khỏi Internet.
Cơ chế hoạt động của các DNS server đó là nó sẽ kiểm tra trong cache để biết coi facebook.com có đang trỏ tới địa chỉ IP nào mà DNS server đã biết hay không. Nếu có thì dùng luôn, còn nếu không thì nó sẽ đi hỏi nameserver của tên miền, thường sẽ được host bởi công ty sở hữu tên miền. Nếu nameserver bị lỗi, bị chết hoặc có vấn đề gì đó, thì sẽ có một mã lỗi được trả về là SERVFAIL, rồi sau đó trình duyệt sẽ báo lỗi về cho người dùng.
Quảng cáo
Vì Facebook ngừng phát đi dữ liệu cần thiết, DNS server của Cloudflare và nhiều công ty khác không thể kết nối với nameserver của Facebook. Như vậy 1.1.1.1 hay 8.8.8.8 hay các ISP của nhà mạng đều nhận được mã SERVFAIL.
Nhưng chưa hết. Giờ là lúc loài người hành động theo bản năng. Khi thấy web và app bị lỗi, người dùng trên toàn thế giới bắt đầu refresh trang, hoặc mở lại app, thế là một loạt yêu cầu lại được gửi về các DNS server, và nó vẫn tiếp tục bị lỗi, nên có vọt lên như hình bên dưới. Ngoài con người, các hệ thống cũng được lập trình để tự thử lại khi yêu cầu bị thất bại, có khi thử lại tới 2-3 lần trước khi ngừng lại nên càng làm cho tình hình tệ đi.
Vì Facebook quá to, nên số lượt yêu cầu tăng thêm 30 lần so với bình thường và có thể gây ra lỗi với một số nhà cung cấp dịch vụ DNS khác, còn 1.1.1.1 thì không bị ảnh hưởng. Đa số yêu cầu phân giải DNS đều được xử lý dưới 10ms.
Ảnh hưởng đến các dịch vụ khác
Khi mà Facebook sập, người ta đi qua những nền tảng khác để thảo luận. Các nền tảng như Twitter, Signal, Telegram, TikTok ghi nhận mức tăng đột biến về lưu lượng truy cập.
Đến khoản 21:00 UTC, các gói cập nhật BGP từ Facebook bắt đầu xuất hiện lại, cao nhất là vào lúc 21:17 và các dịch vụ của Facebook dần dần xuất hiện trở lại.
Thế giới Internet mong manh hơn bạn nghĩ
Sự việc ngày hôm nay nhắc chúng ta rằng Internet rất phức tạp, và mức độ phụ thuộc lẫn nhau của các hệ thống là rất cao. Internet chạy được là nhờ việc tuân theo các chuẩn, các giao thức đã được thống nhất bởi cả thế giới.
Nguồn: Cloudflare, Ảnh đầu bài của The Verge