Logo Zephyrnet

Cách chúng tôi làm cho cơ sở hạ tầng của Roblox hiệu quả hơn và linh hoạt hơn – Blog Roblox

Ngày:

Vì Roblox đã phát triển trong hơn 16 năm qua nên quy mô và độ phức tạp của cơ sở hạ tầng kỹ thuật hỗ trợ hàng triệu trải nghiệm 3D sống động cũng tăng theo. Số lượng máy chúng tôi hỗ trợ đã tăng hơn gấp ba lần trong hai năm qua, từ khoảng 36,000 máy tính đến ngày 30 tháng 2021 năm 145,000 lên gần 1,000 máy tính hiện nay. Để hỗ trợ những trải nghiệm luôn hoạt động này cho mọi người trên toàn thế giới cần hơn XNUMX dịch vụ nội bộ. Để giúp chúng tôi kiểm soát chi phí và độ trễ mạng, chúng tôi triển khai và quản lý các máy này như một phần của cơ sở hạ tầng đám mây riêng kết hợp và được xây dựng tùy chỉnh, chạy chủ yếu tại cơ sở.  

Cơ sở hạ tầng của chúng tôi hiện hỗ trợ hơn 70 triệu người dùng hoạt động hàng ngày trên toàn thế giới, bao gồm cả những người sáng tạo dựa vào Roblox nền kinh tế cho doanh nghiệp của họ. Tất cả hàng triệu người này đều mong đợi mức độ tin cậy rất cao. Do tính chất phong phú của trải nghiệm của chúng tôi, khả năng chấp nhận độ trễ hoặc độ trễ là cực kỳ thấp, chưa nói đến tình trạng ngừng hoạt động. Roblox là một nền tảng giao tiếp và kết nối, nơi mọi người đến với nhau trong trải nghiệm 3D sống động. Khi mọi người giao tiếp với tư cách là hình đại diện của họ trong một không gian sống động, ngay cả những sự chậm trễ hoặc trục trặc nhỏ cũng dễ nhận thấy hơn so với những sự cố xảy ra trên chuỗi văn bản hoặc cuộc gọi hội nghị.

Vào tháng 2021 năm 73, chúng tôi gặp phải tình trạng ngừng hoạt động trên toàn hệ thống. Mọi chuyện bắt đầu từ quy mô nhỏ, với sự cố ở một thành phần trong một trung tâm dữ liệu. Nhưng nó đã lan truyền nhanh chóng khi chúng tôi đang điều tra và cuối cùng dẫn đến việc ngừng hoạt động trong XNUMX giờ. Vào thời điểm đó, chúng tôi đã chia sẻ cả hai chi tiết về những gì đã xảy ra và một số bài học ban đầu của chúng tôi từ vấn đề này. Kể từ đó, chúng tôi đã nghiên cứu những bài học đó và nỗ lực tăng cường khả năng phục hồi của cơ sở hạ tầng trước các loại lỗi xảy ra trong tất cả các hệ thống quy mô lớn do các yếu tố như lưu lượng truy cập tăng đột biến, thời tiết, lỗi phần cứng, lỗi phần mềm hoặc chỉ con người mắc sai lầm. Khi những lỗi này xảy ra, làm cách nào để chúng tôi đảm bảo rằng sự cố trong một thành phần hoặc nhóm thành phần không lan sang toàn bộ hệ thống? Câu hỏi này đã là trọng tâm của chúng tôi trong hai năm qua và trong khi công việc đang diễn ra, những gì chúng tôi đã làm cho đến nay đã được đền đáp. Ví dụ: trong nửa đầu năm 2023, chúng tôi đã tiết kiệm được 125 triệu giờ tương tác mỗi tháng so với nửa đầu năm 2022. Hôm nay, chúng tôi sẽ chia sẻ công việc chúng tôi đã thực hiện cũng như tầm nhìn dài hạn hơn của chúng tôi đối với việc xây dựng một hệ thống cơ sở hạ tầng linh hoạt hơn.

Xây dựng một điểm dừng

Trong các hệ thống cơ sở hạ tầng quy mô lớn, các sự cố quy mô nhỏ xảy ra nhiều lần trong ngày. Nếu một máy gặp sự cố và phải ngừng hoạt động thì điều đó có thể quản lý được vì hầu hết các công ty đều duy trì nhiều phiên bản dịch vụ phụ trợ của họ. Vì vậy, khi một phiên bản bị lỗi, những phiên bản khác sẽ tiếp nhận khối lượng công việc. Để giải quyết những lỗi thường xuyên này, các yêu cầu thường được đặt thành tự động thử lại nếu gặp lỗi.

Điều này trở nên thách thức khi một hệ thống hoặc một người thử lại quá mạnh mẽ, điều này có thể trở thành cách để những lỗi quy mô nhỏ đó lan truyền khắp cơ sở hạ tầng đến các dịch vụ và hệ thống khác. Nếu mạng hoặc người dùng thử lại đủ liên tục thì cuối cùng nó sẽ làm quá tải mọi phiên bản của dịch vụ đó và có thể cả các hệ thống khác trên toàn cầu. Sự cố ngừng hoạt động năm 2021 của chúng tôi là kết quả của một hiện tượng khá phổ biến trong các hệ thống quy mô lớn: Một lỗi bắt đầu ở quy mô nhỏ sau đó lan truyền khắp hệ thống, trở nên lớn nhanh đến mức khó giải quyết trước khi mọi thứ ngừng hoạt động. 

Vào thời điểm ngừng hoạt động, chúng tôi có một trung tâm dữ liệu đang hoạt động (với các thành phần bên trong đóng vai trò dự phòng). Chúng tôi cần khả năng chuyển đổi dự phòng sang trung tâm dữ liệu mới theo cách thủ công khi có sự cố khiến trung tâm hiện tại bị hỏng. Ưu tiên hàng đầu của chúng tôi là đảm bảo chúng tôi đã triển khai Roblox sao lưu, vì vậy chúng tôi đã xây dựng bản sao lưu đó trong một trung tâm dữ liệu mới, nằm ở một khu vực địa lý khác. Điều đó đã bổ sung khả năng bảo vệ cho trường hợp xấu nhất: sự cố ngừng hoạt động lan rộng đến đủ các thành phần trong một trung tâm dữ liệu khiến nó hoàn toàn không thể hoạt động được. Hiện tại, chúng tôi có một trung tâm dữ liệu xử lý khối lượng công việc (hoạt động) và một trung tâm ở chế độ chờ, đóng vai trò dự phòng (thụ động). Mục tiêu dài hạn của chúng tôi là chuyển từ cấu hình chủ động-thụ động này sang cấu hình chủ động-chủ động, trong đó cả hai trung tâm dữ liệu đều xử lý khối lượng công việc, với bộ cân bằng tải phân phối các yêu cầu giữa chúng dựa trên độ trễ, công suất và tình trạng. Khi điều này được thực hiện, chúng tôi hy vọng sẽ có độ tin cậy cao hơn nữa cho toàn bộ Roblox và có thể xảy ra lỗi gần như ngay lập tức thay vì trong vài giờ.

Chuyển sang cơ sở hạ tầng di động

Ưu tiên tiếp theo của chúng tôi là tạo ra những bức tường chống nổ chắc chắn bên trong mỗi trung tâm dữ liệu để giảm khả năng toàn bộ trung tâm dữ liệu bị hỏng. Các tế bào (một số công ty gọi chúng là cụm) về cơ bản là một tập hợp các máy móc và là cách chúng ta tạo ra những bức tường này. Chúng tôi sao chép các dịch vụ cả trong và giữa các ô để tăng thêm sự dư thừa. Cuối cùng, chúng tôi muốn tất cả các dịch vụ tại Roblox chạy trong các tế bào để chúng có thể hưởng lợi từ cả bức tường nổ mạnh và khả năng dự phòng. Nếu một tế bào không còn hoạt động, nó có thể bị vô hiệu hóa một cách an toàn. Việc sao chép giữa các ô cho phép dịch vụ tiếp tục chạy trong khi ô được sửa chữa. Trong một số trường hợp, sửa chữa tế bào có thể có nghĩa là cung cấp lại toàn bộ tế bào. Trong toàn ngành, việc xóa và cung cấp lại một máy riêng lẻ hoặc một bộ máy nhỏ là khá phổ biến, nhưng thực hiện việc này cho toàn bộ một ô chứa ~1,400 máy thì không. 

Để tính năng này hoạt động, các ô này cần phải có sự đồng nhất lớn để chúng tôi có thể di chuyển khối lượng công việc từ ô này sang ô khác một cách nhanh chóng và hiệu quả. Chúng tôi đã đặt ra một số yêu cầu nhất định mà các dịch vụ cần phải đáp ứng trước khi chúng chạy trong một ô. Ví dụ: các dịch vụ phải được đóng gói, điều này làm cho chúng dễ mang theo hơn và ngăn chặn bất kỳ ai thực hiện thay đổi cấu hình ở cấp hệ điều hành. Chúng tôi đã áp dụng triết lý cơ sở hạ tầng dưới dạng mã cho các ô: Trong kho lưu trữ mã nguồn của mình, chúng tôi đưa định nghĩa về mọi thứ có trong một ô để có thể xây dựng lại nhanh chóng từ đầu bằng các công cụ tự động. 

Hiện tại, không phải tất cả các dịch vụ đều đáp ứng các yêu cầu này, vì vậy, chúng tôi đã nỗ lực giúp chủ sở hữu dịch vụ đáp ứng các yêu cầu đó nếu có thể và chúng tôi đã xây dựng các công cụ mới để giúp dễ dàng di chuyển dịch vụ vào các ô khi sẵn sàng. Ví dụ: công cụ triển khai mới của chúng tôi tự động “sọc” triển khai dịch vụ trên các ô, do đó chủ sở hữu dịch vụ không phải suy nghĩ về chiến lược sao chép. Mức độ nghiêm ngặt này làm cho quá trình di chuyển trở nên khó khăn và tốn thời gian hơn nhiều, nhưng lợi ích lâu dài sẽ là một hệ thống trong đó: 

  • Việc ngăn chặn lỗi và ngăn nó lây lan sang các ô khác sẽ dễ dàng hơn nhiều; 
  • Các kỹ sư cơ sở hạ tầng của chúng tôi có thể làm việc hiệu quả hơn và di chuyển nhanh hơn; Và 
  • Các kỹ sư xây dựng các dịch vụ cấp sản phẩm được triển khai cuối cùng trong các ô không cần biết hoặc lo lắng về việc dịch vụ của họ đang chạy trong các ô nào.

Giải quyết những thách thức lớn hơn

Tương tự như cách cửa chống cháy được sử dụng để ngăn chặn ngọn lửa, các ô hoạt động như những bức tường chống nổ vững chắc trong cơ sở hạ tầng của chúng tôi để giúp ngăn chặn bất kỳ vấn đề nào đang gây ra sự cố trong một ô duy nhất. Cuối cùng, tất cả các dịch vụ tạo nên Roblox sẽ được triển khai dự phòng bên trong và trên các ô. Sau khi công việc này hoàn tất, các vấn đề vẫn có thể lan truyền đủ rộng đến mức khiến toàn bộ một ô không thể hoạt động được, nhưng sẽ cực kỳ khó để một vấn đề lan truyền ra ngoài ô đó. Và nếu chúng ta thành công trong việc làm cho các tế bào có thể hoán đổi cho nhau thì quá trình phục hồi sẽ nhanh hơn đáng kể bởi vì chúng tôi sẽ có thể chuyển sang một ô khác và giữ cho sự cố không ảnh hưởng đến người dùng cuối. 

Điều này trở nên khó khăn khi tách các ô này đủ để giảm cơ hội lan truyền lỗi, đồng thời giữ cho mọi thứ hoạt động và hoạt động tốt. Trong một hệ thống cơ sở hạ tầng phức tạp, các dịch vụ cần liên lạc với nhau để chia sẻ truy vấn, thông tin, khối lượng công việc, v.v. Khi sao chép các dịch vụ này vào các ô, chúng tôi cần cân nhắc kỹ về cách quản lý liên lạc chéo. Trong một thế giới lý tưởng, chúng tôi chuyển hướng lưu lượng truy cập từ một ô không khỏe mạnh sang các ô khỏe mạnh khác. Nhưng làm thế nào chúng ta có thể xử lý “truy vấn về cái chết”—một câu hỏi gây ra một tế bào không khỏe mạnh? Nếu chúng tôi chuyển hướng truy vấn đó đến một ô khác, nó có thể khiến ô đó trở nên không lành mạnh theo cách mà chúng tôi đang cố gắng tránh. Chúng ta cần tìm ra cơ chế để chuyển lưu lượng truy cập “tốt” từ các ô không khỏe mạnh đồng thời phát hiện và ngăn chặn lưu lượng khiến các ô trở nên không khỏe mạnh. 

Trước mắt, chúng tôi đã triển khai các bản sao dịch vụ điện toán tới từng ô điện toán để hầu hết các yêu cầu tới trung tâm dữ liệu có thể được phục vụ bởi một ô duy nhất. Chúng tôi cũng đang cân bằng tải lưu lượng truy cập trên các ô. Nhìn xa hơn, chúng tôi đã bắt đầu xây dựng quy trình khám phá dịch vụ thế hệ tiếp theo sẽ được mạng lưới dịch vụ tận dụng. Chúng tôi hy vọng sẽ hoàn thành quy trình này vào năm 2024. Điều này sẽ cho phép chúng tôi triển khai các chính sách phức tạp chỉ cho phép giao tiếp giữa các tế bào khi nó sẽ không tác động tiêu cực đến các ô chuyển đổi dự phòng. Cũng sắp ra mắt vào năm 2024 sẽ là một phương pháp chuyển hướng các yêu cầu phụ thuộc đến một phiên bản dịch vụ trong cùng một ô, điều này sẽ giảm thiểu lưu lượng truy cập giữa các ô và do đó giảm nguy cơ lỗi lan truyền giữa các ô.

Vào lúc cao điểm, hơn 70 phần trăm lưu lượng truy cập dịch vụ phụ trợ của chúng tôi đang được phân phát ngoài các ô và chúng tôi đã học được rất nhiều về cách tạo các ô, nhưng chúng tôi dự đoán sẽ có nhiều nghiên cứu và thử nghiệm hơn khi chúng tôi tiếp tục di chuyển các dịch vụ của mình đến năm 2024 và vượt ra. Khi chúng ta tiến bộ, những bức tường nổ này sẽ ngày càng trở nên vững chắc hơn.

Di chuyển cơ sở hạ tầng luôn hoạt động

Roblox là một nền tảng toàn cầu hỗ trợ người dùng trên toàn thế giới, vì vậy chúng tôi không thể di chuyển các dịch vụ trong thời gian thấp điểm hoặc “thời gian ngừng hoạt động”, điều này càng làm phức tạp thêm quá trình di chuyển tất cả các máy của chúng tôi vào các ô và các dịch vụ của chúng tôi để chạy trong các ô đó . Chúng tôi có hàng triệu trải nghiệm luôn hoạt động cần tiếp tục được hỗ trợ, ngay cả khi chúng tôi di chuyển các máy chạy trên đó và các dịch vụ hỗ trợ chúng. Khi chúng tôi bắt đầu quá trình này, chúng tôi không có hàng chục nghìn máy chưa sử dụng và sẵn sàng để di chuyển những khối lượng công việc này sang. 

Tuy nhiên, chúng tôi đã mua thêm một số lượng nhỏ máy móc với dự đoán về sự tăng trưởng trong tương lai. Để bắt đầu, chúng tôi đã xây dựng các ô mới bằng cách sử dụng các máy đó, sau đó di chuyển khối lượng công việc sang chúng. Chúng tôi coi trọng tính hiệu quả cũng như độ tin cậy, vì vậy, thay vì ra ngoài và mua thêm máy khi đã hết máy "dự phòng", chúng tôi đã tạo ra nhiều ô hơn bằng cách xóa sạch và cung cấp lại các máy mà chúng tôi đã di chuyển. Sau đó, chúng tôi đã di chuyển khối lượng công việc sang các máy được cấp phép lại đó và bắt đầu lại quy trình. Quá trình này rất phức tạp—khi máy móc được thay thế và giải phóng để lắp vào các tế bào, chúng không được giải phóng theo cách lý tưởng và có trật tự. Chúng bị phân mảnh về mặt vật lý trên khắp các phòng dữ liệu, khiến chúng tôi phải cung cấp chúng theo kiểu từng phần, đòi hỏi quy trình chống phân mảnh ở cấp độ phần cứng để giữ cho các vị trí phần cứng được căn chỉnh với các miền lỗi vật lý quy mô lớn. 

Một phần trong nhóm kỹ thuật cơ sở hạ tầng của chúng tôi tập trung vào việc di chuyển khối lượng công việc hiện có từ môi trường kế thừa hoặc “tiền tế bào” của chúng tôi vào các tế bào. Công việc này sẽ tiếp tục cho đến khi chúng tôi di chuyển hàng nghìn dịch vụ cơ sở hạ tầng khác nhau và hàng nghìn dịch vụ phụ trợ sang các ô mới được xây dựng. Chúng tôi dự kiến ​​việc này sẽ mất cả năm tới và có thể kéo dài đến năm 2025 do một số yếu tố phức tạp. Đầu tiên, công việc này đòi hỏi phải xây dựng được công cụ mạnh mẽ. Ví dụ: chúng tôi cần công cụ để tự động cân bằng lại số lượng lớn dịch vụ khi triển khai một ô mới—mà không ảnh hưởng đến người dùng. Chúng tôi cũng đã thấy các dịch vụ được xây dựng dựa trên các giả định về cơ sở hạ tầng của chúng tôi. Chúng tôi cần sửa đổi các dịch vụ này để chúng không phụ thuộc vào những thứ có thể thay đổi trong tương lai khi chúng tôi chuyển đến các tế bào. Chúng tôi cũng đã triển khai cả cách tìm kiếm các mẫu thiết kế đã biết không hoạt động tốt với kiến ​​trúc di động cũng như quy trình thử nghiệm có phương pháp cho từng dịch vụ được di chuyển. Các quy trình này giúp chúng tôi giải quyết mọi vấn đề mà người dùng gặp phải do dịch vụ không tương thích với các ô.

Ngày nay, gần 30,000 máy móc đang được quản lý bởi các tế bào. Đó chỉ là một phần nhỏ trong tổng số hạm đội của chúng tôi, nhưng cho đến nay, đây là một quá trình chuyển đổi rất suôn sẻ và không có tác động tiêu cực nào đến người chơi. Mục tiêu cuối cùng của chúng tôi là hệ thống của chúng tôi đạt được 99.99% thời gian hoạt động của người dùng mỗi tháng, nghĩa là chúng tôi sẽ làm gián đoạn không quá 0.01% số giờ tương tác. Không thể loại bỏ hoàn toàn thời gian ngừng hoạt động trong toàn ngành nhưng mục tiêu của chúng tôi là giảm thời gian ngừng hoạt động của Roblox xuống mức gần như không thể nhận thấy.

Đảm bảo tương lai khi chúng tôi mở rộng quy mô

Mặc dù những nỗ lực ban đầu của chúng tôi đang tỏ ra thành công nhưng công việc của chúng tôi về tế bào vẫn chưa hoàn thành. Khi Roblox tiếp tục mở rộng quy mô, chúng tôi sẽ tiếp tục nỗ lực cải thiện hiệu quả và khả năng phục hồi của hệ thống thông qua công nghệ này và các công nghệ khác. Khi chúng tôi tiếp tục phát triển, nền tảng sẽ ngày càng trở nên linh hoạt trước các vấn đề và mọi vấn đề xảy ra sẽ dần dần trở nên ít được nhìn thấy và gây khó chịu hơn đối với những người trên nền tảng của chúng tôi.

Tóm lại, cho đến nay, chúng tôi có: 

  • Xây dựng trung tâm dữ liệu thứ hai và đạt được trạng thái chủ động/thụ động thành công. 
  • Đã tạo các ô trong trung tâm dữ liệu chủ động và thụ động của chúng tôi, đồng thời di chuyển thành công hơn 70% lưu lượng dịch vụ phụ trợ của chúng tôi đến các ô này.
  • Đặt ra các yêu cầu và phương pháp hay nhất mà chúng tôi cần tuân theo để giữ cho tất cả các ô thống nhất khi chúng tôi tiếp tục di chuyển phần còn lại của cơ sở hạ tầng. 
  • Bắt đầu một quá trình liên tục xây dựng “bức tường nổ” mạnh mẽ hơn giữa các tế bào. 

Khi các ô này trở nên dễ hoán đổi cho nhau hơn, sẽ có ít nhiễu xuyên âm hơn giữa các ô. Điều này mở ra một số cơ hội rất thú vị cho chúng tôi về việc tăng cường tự động hóa xung quanh việc giám sát, khắc phục sự cố và thậm chí tự động chuyển khối lượng công việc. 

Vào tháng XNUMX, chúng tôi cũng bắt đầu chạy các thử nghiệm đang hoạt động/đang hoạt động trên các trung tâm dữ liệu của mình. Đây là một cơ chế khác mà chúng tôi đang thử nghiệm để cải thiện độ tin cậy và giảm thiểu thời gian chuyển đổi dự phòng. Những thử nghiệm này đã giúp xác định một số mẫu thiết kế hệ thống, chủ yếu xoay quanh việc truy cập dữ liệu, mà chúng tôi cần làm lại khi hướng tới việc trở thành chủ động hoàn toàn. Nhìn chung, thử nghiệm đủ thành công để tiếp tục chạy nhờ lưu lượng truy cập từ một số lượng người dùng hạn chế của chúng tôi. 

Chúng tôi rất vui được tiếp tục thúc đẩy công việc này để mang lại hiệu quả và khả năng phục hồi cao hơn cho nền tảng. Công việc này trên các tế bào và cơ sở hạ tầng tích cực, cùng với những nỗ lực khác của chúng tôi, sẽ giúp chúng tôi có thể phát triển thành một tiện ích đáng tin cậy, hiệu suất cao cho hàng triệu người và tiếp tục mở rộng quy mô khi chúng tôi nỗ lực kết nối một tỷ người trong thực tế. thời gian.

tại chỗ_img

Tin tức mới nhất

tại chỗ_img