Logo Zephyrnet

Roblox quay trở lại dịch vụ 10 / 28-10 / 31/2021

Ngày:

Bắt đầu từ ngày 28 tháng 31 và khắc phục hoàn toàn vào ngày 73 tháng XNUMX, Roblox đã trải qua XNUMX giờ ngừng hoạt động.¹ Năm mươi triệu người chơi thường xuyên sử dụng Roblox mỗi ngày và để tạo ra trải nghiệm mà người chơi của chúng tôi mong đợi, quy mô của chúng tôi bao gồm hàng trăm dịch vụ trực tuyến nội bộ. Như với bất kỳ dịch vụ quy mô lớn nào, chúng tôi thỉnh thoảng bị gián đoạn dịch vụ, nhưng thời gian ngừng hoạt động kéo dài khiến nó trở nên đặc biệt đáng chú ý. Chúng tôi chân thành xin lỗi cộng đồng của chúng tôi vì thời gian ngừng hoạt động.

Chúng tôi chia sẻ những chi tiết kỹ thuật này để cung cấp cho cộng đồng của chúng tôi sự hiểu biết về nguyên nhân gốc rễ của vấn đề, cách chúng tôi giải quyết vấn đề và những gì chúng tôi đang làm để ngăn chặn các vấn đề tương tự xảy ra trong tương lai. Chúng tôi muốn nhắc lại rằng không có việc mất dữ liệu người dùng hoặc bị các bên không được phép truy cập bất kỳ thông tin nào trong sự cố.

Roblox Engineering và nhân viên kỹ thuật từ HashiCorp đã kết hợp nỗ lực để đưa Roblox trở lại hoạt động. Chúng tôi muốn ghi nhận nhóm HashiCorp, những người đã mang lại những nguồn lực đáng kinh ngạc và làm việc với chúng tôi không mệt mỏi cho đến khi vấn đề được giải quyết.

Tóm tắt sự cố

Sự cố ngừng hoạt động là duy nhất cả về thời lượng và độ phức tạp. Nhóm nghiên cứu đã phải giải quyết một số thách thức theo trình tự để hiểu nguyên nhân gốc rễ và đưa dịch vụ hoạt động trở lại.

  • Sự cố mất điện kéo dài 73 giờ.
  • Nguyên nhân sâu xa là do hai vấn đề. Việc kích hoạt một tính năng phát trực tuyến tương đối mới trên Consul trong điều kiện tải đọc và ghi cao bất thường đã dẫn đến sự tranh cãi quá mức và hiệu suất kém. Ngoài ra, các điều kiện tải cụ thể của chúng tôi đã gây ra sự cố hiệu suất bệnh lý trong BoltDB. Hệ thống BoltDB mã nguồn mở được sử dụng trong Consul để quản lý ghi nhật ký cho cuộc bầu cử lãnh đạo và sao chép dữ liệu. 
  • Một cụm Lãnh sự hỗ trợ nhiều khối lượng công việc đã làm trầm trọng thêm tác động của những vấn đề này.
  • Những thách thức trong việc chẩn đoán hai vấn đề chủ yếu không liên quan này được chôn sâu trong quá trình thực hiện Lãnh sự phần lớn là nguyên nhân dẫn đến thời gian ngừng hoạt động kéo dài. 
  • Các hệ thống giám sát quan trọng sẽ cung cấp khả năng hiển thị tốt hơn về nguyên nhân của sự cố mất điện dựa trên các hệ thống bị ảnh hưởng, chẳng hạn như Lãnh sự. Sự kết hợp này đã gây trở ngại nghiêm trọng cho quá trình phân loại.
  • Chúng tôi đã suy nghĩ và cẩn thận trong cách tiếp cận của mình để đưa Roblox đi lên từ trạng thái giảm hoàn toàn kéo dài, điều này cũng mất nhiều thời gian.
  • Chúng tôi đã tăng tốc các nỗ lực kỹ thuật để cải thiện khả năng giám sát của mình, loại bỏ các phụ thuộc vòng tròn trong ngăn xếp khả năng quan sát của chúng tôi, cũng như đẩy nhanh quá trình khởi động của chúng tôi. 
  • Chúng tôi đang nỗ lực chuyển sang nhiều khu vực khả dụng và trung tâm dữ liệu.
  • Chúng tôi đang khắc phục các vấn đề ở Lãnh sự vốn là nguyên nhân sâu xa của sự kiện này.

Mở đầu: Môi trường cụm của chúng tôi và HashiStack

Cơ sở hạ tầng cốt lõi của Roblox chạy trong các trung tâm dữ liệu Roblox. Chúng tôi triển khai và quản lý phần cứng của riêng mình, cũng như hệ thống máy tính, lưu trữ và mạng của riêng chúng tôi trên phần cứng đó. Quy mô triển khai của chúng tôi rất đáng kể, với hơn 18,000 máy chủ và 170,000 vùng chứa.

Để chạy hàng nghìn máy chủ trên nhiều trang web, chúng tôi tận dụng một bộ công nghệ thường được gọi là “ngăn xếp Hashi". Vô định, Lãnh sự Vault là những công nghệ mà chúng tôi sử dụng để quản lý các máy chủ và dịch vụ trên khắp thế giới, đồng thời cho phép chúng tôi sắp xếp các vùng chứa hỗ trợ các dịch vụ Roblox.

Vô định được sử dụng để lên lịch làm việc. Nó quyết định các thùng chứa sẽ chạy trên những nút nào và chúng có thể truy cập được trên những cổng nào. Nó cũng xác nhận tình trạng của vùng chứa. Tất cả dữ liệu này được chuyển tiếp đến một Cơ quan đăng ký dịch vụ, là cơ sở dữ liệu của các tổ hợp IP: Cổng. Các dịch vụ của Roblox sử dụng Sổ đăng ký Dịch vụ để tìm nhau để chúng có thể giao tiếp. Quá trình này được gọi là “khám phá dịch vụ”. Chúng tôi sử dụng Lãnh sự để khám phá dịch vụ, kiểm tra sức khỏe, khóa phiên (đối với hệ thống HA được tích hợp trên đầu) và như một cửa hàng KV.

Lãnh sự được triển khai như một cụm máy với hai vai trò. “Cử tri” (5 máy) nắm giữ trạng thái của cụm; “Những người không được bình chọn” (5 máy bổ sung) là bản sao chỉ đọc hỗ trợ việc mở rộng các yêu cầu đọc. Tại bất kỳ thời điểm nào, một trong những cử tri được cụm bầu làm trưởng nhóm. Người lãnh đạo chịu trách nhiệm sao chép dữ liệu cho các cử tri khác và xác định xem dữ liệu bằng văn bản đã được cam kết đầy đủ chưa. Lãnh sự sử dụng một thuật toán gọi là cho cuộc bầu cử lãnh đạo và để phân phối trạng thái trên toàn cụm theo cách đảm bảo mỗi nút trong cụm đồng ý với các bản cập nhật. Không có gì lạ khi nhà lãnh đạo thay đổi thông qua bầu cử lãnh đạo nhiều lần trong một ngày nhất định.

Sau đây là ảnh chụp màn hình gần đây của bảng điều khiển Lãnh sự tại Roblox sau vụ việc. Nhiều chỉ số hoạt động chính được tham chiếu trong bài đăng trên blog này được hiển thị ở mức bình thường. Ví dụ: thời gian áp dụng KV được coi là bình thường ở mức dưới 300ms và hiện tại là 30.6ms. Lãnh đạo Lãnh sự đã có liên hệ với các máy chủ khác trong cụm trong 32ms vừa qua, rất gần đây.

1. Hoạt động bình thường của Lãnh sự tại Roblox

Trong những tháng trước sự cố tháng 1.9, Roblox đã nâng cấp từ Consul XNUMX lên Lãnh sự 1.10 để tận dụng một tính năng phát trực tuyến mới. Tính năng phát trực tuyến này được thiết kế để giảm đáng kể CPU và băng thông mạng cần thiết để phân phối các bản cập nhật trên các cụm quy mô lớn như tại Roblox.

Phát hiện ban đầu (10/28 13:37)

Chiều ngày 28/XNUMX, Vhiệu suất kết quả bị suy giảm và một máy chủ Lãnh sự duy nhất có ổ CPU caod. Các kỹ sư của Roblox bắt đầu tìm hiểu. Tại thời điểm này, các cầu thủ không bị ảnh hưởng.

Thử nghiệm sớm (10/28 13:37 - 10/29 02:00)

Điều tra ban đầu cho thấy cụm Lãnh sự mà Vault và nhiều dịch vụ khác phụ thuộc là không lành mạnh. Cụ thể, các chỉ số của cụm Lãnh sự cho thấy độ trễ ghi cao đối với cửa hàng KV bên dưới mà trong đó Lãnh sự lưu trữ dữ liệu. Độ trễ phần trăm thứ 50 trên các thao tác này thường dưới 300 mili giây nhưng hiện tại là 2 giây. Vấn đề phần cứng không phải là bất thường ở quy mô của Roblox và Consul có thể sống sót sau sự cố phần cứng. Tuy nhiên, nếu phần cứng chỉ chậm chứ không phải lỗi, nó có thể ảnh hưởng đến hiệu suất tổng thể của Consul. Trong trường hợp này, nhóm nghi ngờ hiệu suất phần cứng bị xuống cấp là nguyên nhân gốc rễ và bắt đầu quá trình thay thế một trong các nút của cụm Consul. Đây là nỗ lực đầu tiên của chúng tôi trong việc chẩn đoán sự cố. Trong khoảng thời gian này, nhân viên từ HashiCorp đã tham gia cùng các kỹ sư Roblox để giúp chẩn đoán và khắc phục. Tất cả các tham chiếu đến “nhóm” và “nhóm kỹ thuật” từ thời điểm này trở đi đề cập đến cả nhân viên Roblox và HashiCorp.

Ngay cả với phần cứng mới, hiệu suất của cụm Consul vẫn tiếp tục bị ảnh hưởng. Đến 16h35, lượng người chơi trực tuyến giảm xuống còn 50% so với bình thường.

2. CCU trong khi thả trình phát PST 16:35

Sự sụt giảm này đồng thời với sự suy giảm đáng kể về sức khỏe hệ thống, dẫn đến việc hệ thống ngừng hoạt động hoàn toàn. Tại sao? Khi một dịch vụ của Roblox muốn nói chuyện với một dịch vụ khác, nó dựa vào Lãnh sự để có kiến ​​thức cập nhật về vị trí của dịch vụ mà nó muốn nói chuyện. Tuy nhiên, nếu Lãnh sự không lành mạnh, các máy chủ sẽ đấu tranh để kết nối. Hơn nữa, Nomad và Vault phụ thuộc vào Lãnh sự, vì vậy khi Lãnh sự không khỏe mạnh, hệ thống không thể lên lịch cho các thùng chứa mới hoặc truy xuất bí mật sản xuất được sử dụng để xác thực. Tóm lại, hệ thống đã thất bại vì Lãnh sự là một điểm thất bại duy nhất, và Lãnh sự không khỏe mạnh.

Tại thời điểm này, nhóm đã phát triển một lý thuyết mới về những gì đang xảy ra: tăng lưu lượng truy cập. Có lẽ Lãnh sự đã chậm bởi vì hệ thống của chúng tôi đã đạt đến điểm giới hạn và các máy chủ mà Lãnh sự đang chạy không thể xử lý tải được nữa? Đây là nỗ lực thứ hai của chúng tôi trong việc chẩn đoán nguyên nhân gốc rễ của sự cố.

Với mức độ nghiêm trọng của sự việc, nhóm nghiên cứu đã quyết định thay thế tất cả các nút trong cụm Lãnh sự bằng các máy mới mạnh mẽ hơn. Những chiếc máy mới này có 128 lõi (tăng gấp 2 lần) và đĩa SSD NVME mới hơn, nhanh hơn. Đến 19h, đội đã di chuyển gần hết cụm sang máy mới nhưng cụm vẫn chưa khỏe. Cụm báo cáo rằng phần lớn các nút không thể theo kịp việc ghi và độ trễ phân vị thứ 00 khi ghi KV vẫn là khoảng 50 giây thay vì 2ms thông thường hoặc ít hơn.

Quay lại lần thử dịch vụ # 1 (10/29 02:00 - 04:00)

Hai nỗ lực đầu tiên để đưa cụm Lãnh sự về trạng thái khỏe mạnh đã không thành công. Chúng tôi vẫn có thể thấy độ trễ ghi KV tăng cao cũng như một triệu chứng khó giải thích mới mà chúng tôi không thể giải thích: lãnh đạo Lãnh sự thường xuyên không đồng bộ với các cử tri khác. 

Nhóm nghiên cứu đã quyết định đóng cửa toàn bộ cụm Lãnh sự và thiết lập lại trạng thái của nó bằng cách sử dụng ảnh chụp nhanh từ vài giờ trước - thời điểm bắt đầu ngừng hoạt động. Chúng tôi hiểu rằng điều này có thể dẫn đến một lượng nhỏ mất dữ liệu cấu hình hệ thống (không mất dữ liệu người dùng). Với mức độ nghiêm trọng của sự cố và sự tự tin của chúng tôi rằng chúng tôi có thể khôi phục dữ liệu cấu hình hệ thống này bằng tay nếu cần, chúng tôi cảm thấy điều này có thể chấp nhận được. 

Chúng tôi kỳ vọng rằng việc khôi phục từ một ảnh chụp nhanh được chụp khi hệ thống khỏe mạnh sẽ đưa cụm về trạng thái khỏe mạnh, nhưng chúng tôi có một mối quan tâm bổ sung. Mặc dù Roblox không có bất kỳ lưu lượng truy cập do người dùng tạo nào chạy qua hệ thống tại thời điểm này, các dịch vụ nội bộ của Roblox vẫn hoạt động và liên hệ với Lãnh sự một cách nghiêm túc. để tìm hiểu vị trí của các phụ thuộc của họ và cập nhật thông tin sức khỏe của họ. Những lần đọc và ghi này đã tạo ra một tải trọng đáng kể trên cụm. Chúng tôi lo lắng rằng tải này có thể ngay lập tức đẩy cụm trở lại trạng thái không khỏe mạnh ngay cả khi thiết lập lại cụm thành công. Để giải quyết mối lo ngại này, chúng tôi đã cấu hình iptables trên cụm để chặn quyền truy cập. Điều này sẽ cho phép chúng tôi khôi phục cụm theo cách có kiểm soát và giúp chúng tôi hiểu liệu tải mà chúng tôi đang đặt cho Lãnh sự độc lập với lưu lượng truy cập của người dùng có phải là một phần của vấn đề hay không.

Quá trình thiết lập lại diễn ra suôn sẻ và ban đầu, các chỉ số có vẻ tốt. Khi chúng tôi loại bỏ iptables khối, phát hiện dịch vụ và tải kiểm tra sức khỏe từ các dịch vụ nội bộ được trả về như mong đợi. Tuy nhiên, hiệu suất của Consul lại bắt đầu suy giảm, và cuối cùng chúng tôi đã trở lại nơi chúng tôi bắt đầu: phân vị thứ 50 trên các hoạt động ghi KV đã quay lại ở mức 2 giây. Các dịch vụ phụ thuộc vào Lãnh sự bắt đầu tự cho mình là “không lành mạnh”, và cuối cùng, hệ thống lại rơi vào tình trạng có vấn đề quen thuộc. Bây giờ là 04:00. Rõ ràng là có điều gì đó về việc chúng tôi tải Lãnh sự đang gây ra vấn đề, và hơn 14 giờ sau vụ việc, chúng tôi vẫn không biết đó là gì.

Quay lại lần thử dịch vụ # 2 (10/29 04:00 - 10/30 02:00)

Chúng tôi đã loại trừ lỗi phần cứng. Phần cứng nhanh hơn đã không giúp được gì và như chúng ta đã biết sau đó, có thể ảnh hưởng đến sự ổn định. Việc đặt lại trạng thái nội bộ của Lãnh sự cũng không giúp được gì. Không có lưu lượng người dùng đến, nhưng Lãnh sự vẫn chậm. Chúng tôi đã tận dụng iptables để cho phép lưu lượng truy cập trở lại cụm từ từ. Có phải cụm chỉ đơn giản là bị đẩy trở lại trạng thái không lành mạnh bởi khối lượng tuyệt đối của hàng nghìn vùng chứa đang cố gắng kết nối lại? Đây là nỗ lực thứ ba của chúng tôi trong việc chẩn đoán nguyên nhân gốc rễ của sự cố.

Nhóm kỹ sư đã quyết định giảm việc sử dụng Consul và sau đó giới thiệu lại một cách cẩn thận và có hệ thống. Để đảm bảo rằng chúng tôi có một điểm xuất phát rõ ràng, chúng tôi cũng đã chặn lưu lượng truy cập bên ngoài còn lại. Chúng tôi đã tập hợp một danh sách đầy đủ các dịch vụ sử dụng Consul và triển khai các thay đổi về cấu hình để tắt tất cả các hoạt động sử dụng không cần thiết. Quá trình này mất vài giờ do có nhiều loại hệ thống và các loại thay đổi cấu hình được nhắm mục tiêu. Các dịch vụ Roblox thường có hàng trăm phiên bản đang chạy đã được thu nhỏ xuống còn một chữ số. Tần suất kiểm tra sức khỏe được giảm từ 60 giây xuống 10 phút để cung cấp thêm cho cụm phòng thở. Vào lúc 16:00 ngày 29 tháng 24, hơn 02 giờ sau khi bắt đầu ngừng hoạt động, nhóm đã bắt đầu nỗ lực thứ hai để đưa Roblox trực tuyến trở lại. Một lần nữa, giai đoạn đầu của nỗ lực khởi động lại này có vẻ tốt, nhưng đến 00:30 ngày XNUMX tháng XNUMX, Consul lại ở trong trạng thái không khỏe mạnh, lần này với lượng tải ít hơn đáng kể từ các dịch vụ Roblox phụ thuộc vào nó.

Tại thời điểm này, rõ ràng là việc sử dụng Consul tổng thể không phải là yếu tố góp phần duy nhất dẫn đến sự suy giảm hiệu suất mà chúng tôi nhận thấy lần đầu tiên vào ngày 28. Với nhận thức này, nhóm nghiên cứu một lần nữa xoay trục. Thay vì xem xét Lãnh sự từ quan điểm của các dịch vụ Roblox phụ thuộc vào nó, nhóm bắt đầu xem xét nội bộ của Lãnh sự để tìm manh mối.

Nghiên cứu nội dung (10/30 02:00 - 10/30 12:00)

Trong 10 giờ tiếp theo, nhóm kỹ sư đã tìm hiểu sâu hơn về nhật ký gỡ lỗi và các chỉ số cấp hệ điều hành. Dữ liệu này cho thấy các bài viết của Lãnh sự KV bị chặn trong một thời gian dài. Nói cách khác, “tranh chấp.” Nguyên nhân của tranh cãi không rõ ràng ngay lập tức, nhưng một giả thuyết cho rằng việc chuyển từ các máy chủ CPU Core 64 sang 128 trong thời gian sớm nhất có thể đã làm cho vấn đề trở nên tồi tệ hơn. Sau khi xem xét dữ liệu htop và dữ liệu gỡ lỗi hiệu suất được hiển thị trong ảnh chụp màn hình bên dưới, nhóm nghiên cứu kết luận rằng đáng để quay lại máy chủ 64 Core tương tự như những máy chủ được sử dụng trước khi ngừng hoạt động. Nhóm bắt đầu chuẩn bị phần cứng: Consul đã được cài đặt, cấu hình hệ điều hành được kiểm tra ba lần và các máy đã sẵn sàng để bảo dưỡng một cách chi tiết nhất có thể. Nhóm nghiên cứu sau đó đã chuyển cụm Consul trở lại 64 máy chủ CPU Core, nhưng thay đổi này không giúp ích được gì. Đây là nỗ lực thứ tư của chúng tôi trong việc chẩn đoán nguyên nhân gốc rễ của sự cố.

3. Sau đó, chúng tôi hiển thị điều này với một báo cáo hiệu suất như được hiển thị ở trên. Phần lớn thời gian được dành cho các khóa spin của hạt nhân thông qua đường dẫn mã đăng ký Truyền trực tuyến.

4. HTOP hiển thị mức sử dụng CPU trên 128 lõi.

Nguyên nhân gốc rễ được tìm thấy (10/30 12:00 - 10/30 20:00)

Vài tháng trước, chúng tôi đã bật tính năng phát trực tuyến Lãnh sự mới trên một tập hợp con các dịch vụ của chúng tôi. Tính năng này, được thiết kế để giảm mức sử dụng CPU và băng thông mạng của cụm Consul, đã hoạt động như mong đợi, vì vậy trong vài tháng tới, chúng tôi đã dần dần kích hoạt tính năng này trên nhiều dịch vụ phụ trợ của mình. Vào ngày 27 tháng 14 lúc 00:50, một ngày trước khi ngừng hoạt động, chúng tôi đã bật tính năng này trên một dịch vụ phụ trợ chịu trách nhiệm định tuyến lưu lượng. Là một phần của đợt triển khai này, để chuẩn bị cho lưu lượng truy cập tăng mà chúng tôi thường thấy vào cuối năm, chúng tôi cũng đã tăng số lượng nút hỗ trợ định tuyến lưu lượng lên 15%. Hệ thống đã hoạt động tốt với tính năng phát trực tuyến ở cấp độ này trong một ngày trước khi sự cố bắt đầu, vì vậy ban đầu không rõ tại sao hiệu suất của nó lại thay đổi. Tuy nhiên, thông qua phân tích các báo cáo hiệu suất và biểu đồ ngọn lửa từ máy chủ của Consul, chúng tôi đã thấy bằng chứng về việc các đường dẫn mã phát trực tuyến là nguyên nhân gây ra tranh chấp gây ra việc sử dụng CPU cao. Chúng tôi đã tắt tính năng phát trực tuyến cho tất cả các hệ thống Consul, bao gồm cả các nút định tuyến lưu lượng. Thay đổi cấu hình hoàn tất lan truyền lúc 51:50, tại thời điểm đó phân vị thứ 300 cho KV Lãnh sự ghi giảm xuống còn XNUMXms. Cuối cùng chúng tôi đã có một bước đột phá.

Tại sao phát trực tuyến lại gặp sự cố? HashiCorp giải thích rằng, mặc dù tính năng phát trực tuyến nói chung hiệu quả hơn, nhưng nó sử dụng ít yếu tố kiểm soát đồng thời hơn (kênh Go) trong quá trình triển khai so với bỏ phiếu dài. Dưới tải rất cao - cụ thể là cả tải rất cao và tải ghi rất cao - thiết kế phát trực tuyến làm trầm trọng thêm lượng tranh chấp trên một kênh Go duy nhất, gây ra hiện tượng chặn trong khi ghi, làm cho nó kém hiệu quả hơn đáng kể. Hành vi này cũng giải thích ảnh hưởng của các máy chủ có số lõi cao hơn: các máy chủ đó là kiến ​​trúc ổ cắm kép với mô hình bộ nhớ NUMA. Do đó, sự tranh chấp bổ sung về các tài nguyên được chia sẻ trở nên tồi tệ hơn theo kiến ​​trúc này. Bằng cách tắt tính năng phát trực tuyến, chúng tôi đã cải thiện đáng kể tình trạng của cụm Lãnh sự.

Mặc dù có bước đột phá, chúng tôi vẫn chưa ra khỏi rừng. Chúng tôi thấy Lãnh sự liên tục bầu các lãnh đạo cụm mới, điều này là bình thường, nhưng chúng tôi cũng thấy một số lãnh đạo có vấn đề về độ trễ tương tự mà chúng tôi đã thấy trước khi chúng tôi tắt tính năng phát trực tuyến, điều này không bình thường. Không có bất kỳ manh mối rõ ràng nào chỉ ra nguyên nhân gốc rễ của vấn đề người lãnh đạo chậm và với bằng chứng cho thấy cụm hoạt động tốt miễn là một số máy chủ nhất định không được bầu làm người lãnh đạo, nhóm đã đưa ra quyết định thực dụng để giải quyết vấn đề bằng cách ngăn chặn vấn đề các nhà lãnh đạo ở lại bầu cử. Điều này cho phép nhóm tập trung vào việc đưa các dịch vụ Roblox phụ thuộc vào Consul về trạng thái khỏe mạnh.

Nhưng điều gì đã xảy ra với những nhà lãnh đạo chậm chạp? Chúng tôi không tìm ra điều này trong sự cố, nhưng các kỹ sư của HashiCorp đã xác định nguyên nhân sâu xa trong những ngày sau khi sự cố ngừng hoạt động. Consul sử dụng một thư viện bền vững nguồn mở phổ biến có tên BoltDB để lưu trữ nhật ký Raft. Nó là không được sử dụng để lưu trữ trạng thái hiện tại trong Lãnh sự, mà là nhật ký luân phiên các hoạt động đang được áp dụng. Để ngăn chặn BoltDB phát triển vô thời hạn, Consul thường xuyên thực hiện các ảnh chụp nhanh. Thao tác chụp nhanh ghi trạng thái hiện tại của Lãnh sự vào đĩa và sau đó xóa các mục nhật ký cũ nhất khỏi BoltDB. 

Tuy nhiên, do thiết kế của BoltDB, ngay cả khi các mục nhật ký cũ nhất bị xóa, không gian mà BoltDB sử dụng trên đĩa không bao giờ bị thu hẹp. Thay vào đó, tất cả các trang (phân đoạn 4kb trong tệp) được sử dụng để lưu trữ dữ liệu đã xóa thay vào đó được đánh dấu là “miễn phí” và được sử dụng lại cho các lần ghi tiếp theo. BoltDB theo dõi các trang miễn phí này trong một cấu trúc được gọi là “nhà tự do”. Thông thường, độ trễ ghi không bị ảnh hưởng đáng kể bởi thời gian cần thiết để cập nhật cho người viết tự do, nhưng khối lượng công việc của Roblox cho thấy một vấn đề về hiệu suất bệnh lý trong BoltDB khiến cho việc bảo trì của người viết tự do trở nên vô cùng tốn kém. 

Phục hồi dịch vụ bộ nhớ đệm (10/30 20:00 - 10/31 05:00)

Đã 54 giờ kể từ khi bắt đầu mất điện. Với việc tính năng phát trực tiếp bị vô hiệu hóa và một quy trình được áp dụng để ngăn các nhà lãnh đạo chậm tiếp tục được bầu, Lãnh sự hiện đã ổn định nhất quán. Nhóm nghiên cứu đã sẵn sàng tập trung vào việc trở lại phục vụ.

Roblox sử dụng một mẫu microservices điển hình cho phần phụ trợ của nó. Ở cuối "ngăn xếp" microservices là cơ sở dữ liệu và bộ nhớ đệm. Các cơ sở dữ liệu này không bị ảnh hưởng bởi sự cố ngừng hoạt động, nhưng hệ thống bộ nhớ đệm, thường xuyên xử lý yêu cầu 1B mỗi giây trên nhiều lớp của nó trong quá trình vận hành hệ thống thông thường, không lành mạnh. Vì bộ nhớ đệm của chúng tôi lưu trữ dữ liệu tạm thời có thể dễ dàng lưu trữ lại từ các cơ sở dữ liệu bên dưới, nên cách dễ nhất để đưa hệ thống bộ nhớ đệm trở lại trạng thái khỏe mạnh là triển khai lại nó.

Quá trình triển khai lại bộ nhớ cache gặp phải một loạt sự cố: 

  1. Có thể do đặt lại ảnh chụp nhanh cụm Lãnh sự đã được thực hiện trước đó, dữ liệu lập lịch nội bộ mà hệ thống bộ nhớ cache lưu trữ trong KV Lãnh sự không chính xác. 
  2. Việc triển khai các bộ nhớ đệm nhỏ mất nhiều thời gian hơn dự kiến ​​để triển khai và việc triển khai các bộ nhớ đệm lớn vẫn chưa kết thúc. Hóa ra có một nút không lành mạnh mà người lên lịch công việc cho là hoàn toàn mở chứ không phải là không lành mạnh. Điều này dẫn đến việc bộ lập lịch công việc cố gắng lên lịch tích cực các công việc trong bộ nhớ cache trên nút này, điều này không thành công do nút không lành mạnh. 
  3. Công cụ triển khai tự động của hệ thống bộ nhớ đệm được xây dựng để hỗ trợ các điều chỉnh gia tăng đối với các triển khai quy mô lớn đã xử lý lưu lượng truy cập trên quy mô lớn, chứ không phải các nỗ lực lặp đi lặp lại để khởi động một cụm lớn từ đầu. 

Nhóm đã làm việc suốt đêm để xác định và giải quyết những vấn đề này, đảm bảo hệ thống bộ nhớ cache được triển khai đúng cách và xác minh tính đúng đắn. Vào lúc 05:00 ngày 31 tháng 61, XNUMX giờ kể từ khi bắt đầu cúp điện, chúng tôi đã có một cụm Lãnh sự khỏe mạnh và hệ thống bộ nhớ đệm khỏe mạnh. Chúng tôi đã sẵn sàng cung cấp phần còn lại của Roblox.

Sự trở lại của người chơi (10/31 05:00 - 10/31 16:00)

Giai đoạn hoạt động trở lại cuối cùng đã chính thức bắt đầu vào lúc 05:00 ngày 31. Tương tự như hệ thống bộ nhớ đệm, một phần đáng kể các dịch vụ đang chạy đã bị tắt trong thời gian ngừng hoạt động ban đầu hoặc giai đoạn khắc phục sự cố. Nhóm cần khởi động lại các dịch vụ này ở các mức dung lượng chính xác và xác minh rằng chúng đang hoạt động bình thường. Việc này diễn ra suôn sẻ và đến 10:00, chúng tôi đã sẵn sàng mở cửa cho người chơi.

Với bộ đệm lạnh và một hệ thống mà chúng tôi vẫn chưa chắc chắn, chúng tôi không muốn lưu lượng truy cập tràn ngập có thể khiến hệ thống trở lại trạng thái không ổn định. Để tránh lũ lụt, chúng tôi đã sử dụng chỉ đạo DNS để quản lý số lượng người chơi có thể truy cập Roblox. Điều này cho phép chúng tôi cho phép một tỷ lệ phần trăm người chơi được chọn ngẫu nhiên nhất định trong khi những người khác tiếp tục được chuyển hướng đến trang bảo trì tĩnh của chúng tôi. Mỗi khi chúng tôi tăng tỷ lệ phần trăm, chúng tôi sẽ kiểm tra tải cơ sở dữ liệu, hiệu suất bộ nhớ cache và tính ổn định tổng thể của hệ thống. Công việc tiếp tục suốt cả ngày, tăng cường truy cập với mức tăng khoảng 10%. Chúng tôi rất vui khi thấy một số người chơi tận tâm nhất của chúng tôi tìm ra kế hoạch điều hành DNS của chúng tôi và bắt đầu trao đổi thông tin này trên Twitter để họ có thể có quyền truy cập “sớm” khi chúng tôi đưa dịch vụ trở lại. Vào lúc 16:45 Chủ nhật, 73 giờ sau khi bắt đầu ngừng hoạt động, 100% người chơi đã được cấp quyền truy cập và Roblox đã hoạt động hoàn toàn.

Phân tích thêm và các thay đổi dẫn đến từ việc ngừng hoạt động

Trong khi người chơi được phép quay trở lại Roblox vào ngày 31 tháng XNUMX, Roblox và HashiCorp tiếp tục tìm hiểu kỹ về sự cố ngừng hoạt động trong suốt tuần tiếp theo. Các vấn đề tranh chấp cụ thể trong giao thức phát trực tuyến mới đã được xác định và cô lập. Trong khi HashiCorp có phát trực tuyến chuẩn ở quy mô tương tự như việc sử dụng Roblox, họ đã không quan sát thấy hành vi cụ thể này trước đây do nó biểu hiện từ sự kết hợp của cả một số lượng lớn các luồng và tỷ lệ churn cao. Nhóm kỹ sư HashiCorp đang tạo ra các điểm chuẩn mới trong phòng thí nghiệm để tái tạo vấn đề tranh chấp cụ thể và thực hiện các bài kiểm tra quy mô bổ sung. HashiCorp cũng đang làm việc để cải thiện thiết kế của hệ thống phát trực tuyến để tránh tranh chấp dưới tải quá cao và đảm bảo hiệu suất ổn định trong những điều kiện như vậy. 

Phân tích sâu hơn về vấn đề người lãnh đạo chậm cũng phát hiện ra nguyên nhân chính của việc ghi dữ liệu Raft trong hai giây và các vấn đề về tính nhất quán của cụm. Các kỹ sư đã xem xét biểu đồ ngọn lửa như hình bên dưới để hiểu rõ hơn về hoạt động bên trong của BoltDB.

5. Phân tích hoạt động của người theo chủ nghĩa tự do BoltDB.

Như đã đề cập trước đó, Consul sử dụng một thư viện liên tục được gọi là BoltDB để lưu trữ dữ liệu nhật ký Raft. Do một kiểu sử dụng cụ thể được tạo ra trong sự cố, các hoạt động ghi 16kB thay vào đó trở nên lớn hơn nhiều. Bạn có thể thấy sự cố được minh họa trong các ảnh chụp màn hình sau:

6. Thống kê BoldDB chi tiết được sử dụng trong phân tích.

Đầu ra lệnh trước đó cho chúng ta biết một số điều:

  • Kho lưu trữ nhật ký 4.2 GB này chỉ lưu trữ 489 MB dữ liệu thực tế (bao gồm tất cả nội bộ chỉ mục). 3.8GB là không gian "trống".
  • Sản phẩm người làm nghề tự do là 7.8MB vì nó chứa gần một triệu id trang miễn phí.

Điều đó có nghĩa là, đối với mỗi lần nối nhật ký (mỗi lần Raft ghi sau một số đợt), một người viết tự do 7.8MB mới cũng được ghi ra đĩa mặc dù dữ liệu thô thực tế đang được nối thêm là 16kB hoặc ít hơn. 

Áp lực trở lại đối với các hoạt động này cũng tạo ra bộ đệm TCP đầy đủ và góp phần gây ra các lần ghi 2-3 giây trên các nhà lãnh đạo không lành mạnh. Hình ảnh dưới đây cho thấy nghiên cứu về TCP Zero Windows trong sự cố.

7. Nghiên cứu về TCP zero windows. Khi bộ đệm của bộ nhận TCP bắt đầu đầy, nó có thể giảm cửa sổ nhận của nó. Nếu nó đầy, nó có thể giảm cửa sổ xuống XNUMX, cửa sổ này thông báo cho người gửi TCP ngừng gửi.

HashiCorp và Roblox đã phát triển và triển khai một quy trình sử dụng công cụ BoltDB hiện có để "thu gọn" cơ sở dữ liệu, giải quyết các vấn đề về hiệu suất.

Cải tiến gần đây và các bước trong tương lai

Đã 2.5 tháng kể từ khi cúp điện. Chúng ta đã được những gì? Chúng tôi đã sử dụng thời gian này để học hỏi nhiều nhất có thể từ sự cố ngừng hoạt động, để điều chỉnh các ưu tiên kỹ thuật dựa trên những gì chúng tôi đã học được và tích cực củng cố hệ thống của chúng tôi. Một trong những giá trị Roblox của chúng tôi là Tôn trọng cộng đồng và mặc dù chúng tôi có thể đăng bài sớm hơn để giải thích những gì đã xảy ra, nhưng chúng tôi cảm thấy rằng chúng tôi nợ bạn, cộng đồng của chúng tôi, để đạt được tiến bộ đáng kể trong việc cải thiện độ tin cậy của hệ thống trước khi xuất bản. 

Danh sách đầy đủ các cải tiến đã hoàn thành và độ tin cậy trong chuyến bay quá dài và quá chi tiết đối với bản viết này, nhưng đây là các mục chính:

Cải tiến từ xa

Có một sự phụ thuộc vòng giữa hệ thống đo từ xa của chúng tôi và Lãnh sự, có nghĩa là khi Lãnh sự không khỏe mạnh, chúng tôi thiếu dữ liệu đo từ xa sẽ giúp chúng tôi dễ dàng tìm ra điều gì sai. Chúng tôi đã loại bỏ sự phụ thuộc vòng tròn này. Hệ thống đo từ xa của chúng tôi không còn phụ thuộc vào hệ thống mà chúng được cấu hình để giám sát.

Chúng tôi đã mở rộng hệ thống đo từ xa của mình để cung cấp khả năng hiển thị tốt hơn về hiệu suất của Lãnh sự và BoltDB. Giờ đây, chúng tôi nhận được các cảnh báo được nhắm mục tiêu cao nếu có bất kỳ dấu hiệu nào cho thấy hệ thống đang tiến đến trạng thái gây ra sự cố ngừng hoạt động này. Chúng tôi cũng đã mở rộng hệ thống đo từ xa của mình để cung cấp khả năng hiển thị rõ ràng hơn về các mô hình giao thông giữa các dịch vụ của Roblox và Lãnh sự. Khả năng hiển thị bổ sung này về hành vi và hiệu suất của hệ thống của chúng tôi ở nhiều cấp đã giúp chúng tôi trong quá trình nâng cấp hệ thống và phiên gỡ lỗi.

Mở rộng sang nhiều vùng khả dụng và trung tâm dữ liệu

Việc chạy tất cả các dịch vụ phụ trợ của Roblox trên một cụm Lãnh sự khiến chúng tôi gặp phải tình trạng ngừng hoạt động. Chúng tôi đã xây dựng các máy chủ và mạng cho một trung tâm dữ liệu bổ sung, khác biệt về mặt địa lý sẽ lưu trữ các dịch vụ phụ trợ của chúng tôi. Chúng tôi đang nỗ lực để chuyển sang nhiều vùng khả dụng trong các trung tâm dữ liệu này; chúng tôi đã thực hiện những sửa đổi lớn đối với lộ trình kỹ thuật và kế hoạch nhân sự của mình để đẩy nhanh những nỗ lực này.

Nâng cấp và làm sắc nét lãnh sự

Roblox vẫn đang phát triển nhanh chóng, vì vậy, ngay cả khi có nhiều cụm Lãnh sự, chúng tôi muốn giảm tải cho Lãnh sự. Chúng tôi đã xem xét cách các dịch vụ của chúng tôi sử dụng cửa hàng KV của Lãnh sự và kiểm tra sức khỏe, đồng thời đã chia một số dịch vụ quan trọng thành các cụm chuyên dụng của riêng họ, giảm tải cho cụm Lãnh sự trung tâm của chúng tôi đến mức an toàn hơn.

Một số dịch vụ cốt lõi của Roblox đang sử dụng trực tiếp cửa hàng KV của Consul như một nơi thuận tiện để lưu trữ dữ liệu, mặc dù chúng tôi có các hệ thống lưu trữ khác có thể phù hợp hơn. Chúng tôi đang trong quá trình di chuyển dữ liệu này sang hệ thống lưu trữ thích hợp hơn. Sau khi hoàn thành, điều này cũng sẽ giảm tải cho Lãnh sự.

Chúng tôi đã phát hiện ra một lượng lớn dữ liệu KV đã lỗi thời. Xóa dữ liệu lỗi thời này đã cải thiện hiệu suất của Lãnh sự.

Chúng tôi đang hợp tác chặt chẽ với HashiCorp để triển khai phiên bản Consul mới thay thế BoltDB bằng phiên bản kế nhiệm có tên là bu-lông điều đó không có cùng vấn đề với sự phát triển không giới hạn của những người theo chủ nghĩa tự do. Chúng tôi cố ý trì hoãn nỗ lực này sang năm mới để tránh nâng cấp phức tạp trong thời gian cao điểm cuối năm của chúng tôi. Quá trình nâng cấp hiện đang được thử nghiệm và sẽ hoàn thành trong Q1.

Cải tiến đối với thủ tục khởi động và quản lý cấu hình

Nỗ lực quay trở lại dịch vụ bị chậm lại do một số yếu tố, bao gồm cả việc triển khai và làm ấm các bộ nhớ đệm mà các dịch vụ Roblox cần. Chúng tôi đang phát triển các công cụ và quy trình mới để làm cho quy trình này tự động hơn và ít lỗi hơn. Đặc biệt, chúng tôi đã thiết kế lại các cơ chế triển khai bộ nhớ cache của mình để đảm bảo chúng tôi có thể nhanh chóng khởi động hệ thống bộ nhớ cache của mình ngay từ đầu. Việc thực hiện điều này đang được tiến hành.

Chúng tôi đã làm việc với HashiCorp để xác định một số cải tiến của Nomad sẽ giúp chúng tôi dễ dàng thực hiện các công việc lớn sau một thời gian dài không có sẵn. Những cải tiến này sẽ được triển khai như một phần của bản nâng cấp Nomad tiếp theo của chúng tôi, được lên lịch vào cuối tháng này.

Chúng tôi đã phát triển và triển khai các cơ chế để thay đổi cấu hình máy nhanh hơn.

Giới thiệu tính năng phát trực tuyến

Ban đầu, chúng tôi đã triển khai tính năng phát trực tuyến để giảm mức sử dụng CPU và băng thông mạng của cụm Lãnh sự. Khi một triển khai mới đã được thử nghiệm ở quy mô của chúng tôi với khối lượng công việc của chúng tôi, chúng tôi hy vọng sẽ giới thiệu lại một cách cẩn thận nó vào hệ thống của chúng tôi.

Lưu ý trên đám mây công cộng

Sau sự cố ngừng hoạt động như thế này, thật tự nhiên khi đặt câu hỏi liệu Roblox có cân nhắc chuyển sang đám mây công cộng và để bên thứ ba quản lý các dịch vụ máy tính, lưu trữ và mạng nền tảng của chúng tôi hay không.

Một trong những giá trị Roblox khác của chúng tôi là Take The Long View, và giá trị này thông báo rất nhiều cho việc ra quyết định của chúng tôi. Chúng tôi xây dựng và quản lý cơ sở hạ tầng nền tảng của riêng mình tại chỗ bởi vì, ở quy mô hiện tại của chúng tôi và quan trọng hơn, quy mô mà chúng tôi biết rằng chúng tôi sẽ đạt được khi nền tảng của chúng tôi phát triển, chúng tôi tin rằng đó là cách tốt nhất để hỗ trợ doanh nghiệp và cộng đồng của chúng tôi. Cụ thể, bằng cách xây dựng và quản lý các trung tâm dữ liệu của riêng chúng tôi cho các dịch vụ phụ trợ và biên mạng, chúng tôi đã có thể kiểm soát đáng kể chi phí so với đám mây công cộng. Những khoản tiết kiệm này ảnh hưởng trực tiếp đến số tiền chúng tôi có thể trả cho những người sáng tạo trên nền tảng. Hơn nữa, sở hữu phần cứng của riêng chúng tôi và xây dựng cơ sở hạ tầng tiên tiến của riêng chúng tôi cho phép chúng tôi giảm thiểu các biến thể về hiệu suất và quản lý cẩn thận độ trễ của người chơi trên toàn thế giới. Hiệu suất nhất quán và độ trễ thấp là yếu tố quan trọng đối với trải nghiệm của người chơi của chúng tôi, những người không nhất thiết phải ở gần trung tâm dữ liệu của các nhà cung cấp đám mây công cộng.

Lưu ý rằng chúng tôi không dựa trên ý thức hệ với bất kỳ cách tiếp cận cụ thể nào: chúng tôi sử dụng đám mây công cộng cho các trường hợp sử dụng mà nó có ý nghĩa nhất đối với người chơi và nhà phát triển của chúng tôi. Ví dụ: chúng tôi sử dụng đám mây công cộng để có dung lượng bùng nổ, một phần lớn quy trình làm việc DevOps của chúng tôi và hầu hết các phân tích nội bộ của chúng tôi. Nhìn chung, chúng tôi thấy đám mây công cộng là một công cụ tốt cho các ứng dụng không quan trọng về hiệu suất và độ trễ, và chạy ở quy mô hạn chế. Tuy nhiên, đối với khối lượng công việc quan trọng về hiệu suất và độ trễ cao nhất của chúng tôi, chúng tôi đã lựa chọn xây dựng và quản lý cơ sở hạ tầng của riêng mình tại chỗ. Chúng tôi đã đưa ra lựa chọn này vì biết rằng cần thời gian, tiền bạc và tài năng, nhưng cũng biết rằng điều đó sẽ cho phép chúng tôi xây dựng một nền tảng tốt hơn. Điều này phù hợp với giá trị Take The Long View của chúng tôi.

Hệ thống ổn định kể từ khi ngừng hoạt động

Roblox thường nhận được lượng truy cập tăng vọt vào cuối tháng XNUMX. Chúng tôi còn nhiều việc phải làm về độ tin cậy hơn, nhưng chúng tôi vui mừng thông báo rằng Roblox không có một sự cố sản xuất nào đáng kể trong đợt tăng đột biến vào tháng XNUMX và rằng hiệu suất và độ ổn định của cả Consul và Nomad trong đợt tăng này đều rất tuyệt vời. Có vẻ như những cải tiến về độ tin cậy ngay lập tức của chúng tôi đã được đền đáp và khi các dự án dài hạn của chúng tôi kết thúc, chúng tôi mong đợi kết quả thậm chí còn tốt hơn.

Đóng cửa suy nghĩ

Chúng tôi muốn cảm ơn cộng đồng Roblox toàn cầu của chúng tôi vì sự hiểu biết và hỗ trợ của họ. Một trong những giá trị Roblox của chúng tôi là Chịu trách nhiệm và chúng tôi hoàn toàn chịu trách nhiệm về những gì đã xảy ra ở đây. Một lần nữa chúng tôi muốn gửi lời cảm ơn chân thành đến đội ngũ của HashiCorp. Các kỹ sư của họ đã nhảy vào hỗ trợ chúng tôi ngay từ đầu sự cố chưa từng có này và không rời bỏ phía chúng tôi. Ngay cả bây giờ, với sự cố ngừng hoạt động vài tuần sau chúng tôi, các kỹ sư của Roblox và HashiCorp vẫn tiếp tục hợp tác chặt chẽ để đảm bảo rằng chúng tôi cùng nhau làm mọi thứ có thể để ngăn sự cố tương tự xảy ra lần nữa.

Cuối cùng, chúng tôi muốn cảm ơn các đồng nghiệp Roblox của chúng tôi đã xác nhận lý do tại sao đây là một nơi tuyệt vời để làm việc. Tại Roblox, chúng tôi tin tưởng vào sự lịch sự và tôn trọng. Thật dễ dàng để cư xử văn minh và tôn trọng khi mọi thứ đang diễn ra tốt đẹp, nhưng bài kiểm tra thực sự là cách chúng ta đối xử với nhau khi mọi thứ trở nên khó khăn. Vào một số thời điểm trong 73 giờ ngừng hoạt động, đồng hồ tích tắc và căng thẳng gia tăng, sẽ không ngạc nhiên khi thấy ai đó mất bình tĩnh, nói điều gì đó thiếu tôn trọng hoặc tự hỏi tất cả đều là lỗi của ai. Nhưng đó không phải là những gì đã xảy ra. Chúng tôi hỗ trợ lẫn nhau và chúng tôi đã làm việc cùng nhau như một nhóm suốt ngày đêm cho đến khi dịch vụ hoạt động tốt. Tất nhiên, chúng tôi không tự hào về sự cố ngừng hoạt động này và tác động của nó đối với cộng đồng của chúng tôi, nhưng chúng tôi đang tự hào về cách chúng tôi đã cùng nhau trở thành một nhóm để mang Roblox trở lại cuộc sống, và cách chúng tôi đối xử với nhau bằng sự lịch sự và tôn trọng ở mỗi bước trên đường đi.

Chúng tôi đã học được rất nhiều điều từ trải nghiệm này và chúng tôi cam kết hơn bao giờ hết để biến Roblox trở thành một nền tảng mạnh hơn và đáng tin cậy hơn trong tương lai.

Cảm ơn bạn một lần nữa. 


¹ Lưu ý rằng tất cả ngày và giờ trong bài đăng blog này đều theo Giờ chuẩn Thái Bình Dương (PST).

Source: https://blog.roblox.com/2022/01/roblox-return-to-service-10-28-10-31-2021/

tại chỗ_img

Tin tức mới nhất

tại chỗ_img