Câu trả lời:
Tôi nghi ngờ rằng họ đang triển khai phiên bản mã mới nhất của họ, yêu cầu họ khởi động lại ứng dụng (và hy vọng sẽ chạy một số thử nghiệm trước khi bật lại quyền truy cập). Từ quan điểm đó, đó không chỉ là vấn đề StackOverflow và ít hơn là vấn đề của ServerFault.
Tôi nghĩ rằng có thể tạo ra một hệ thống vá nóng, nhưng nó sẽ rất phức tạp. Theo những gì tôi hiểu, một "ứng dụng" máy chủ MMO bao gồm một số thành phần khác nhau -
Đăng nhập máy chủ - Xử lý xác thực và hoạt động như một "trung tâm" giữa các máy chủ chơi trò chơi. Khi một khách hàng đang trong trò chơi, họ không còn tương tác với máy chủ đăng nhập. Trong một hệ thống như vậy, bạn có thể áp dụng các bản vá và khởi động lại máy chủ đăng nhập mà không can thiệp vào trò chơi (mặc dù bạn sẽ có một khoảng thời gian mà mọi người sẽ không thể đăng nhập).
Máy chủ trò chơi - Các cụm máy được nhóm thành các đơn vị độc lập logic ("thế giới", v.v.). Giả định rằng mỗi cụm trò chơi sử dụng một số loại giao thức giao tiếp nội bộ để tương ứng trạng thái với nhau; có lẽ bạn sẽ phải vá từng cụm một lúc. Một cách có thể để làm điều này là vá lỗi chuyển đổi ấm. Sau đó, bạn cần phải có khả năng cả hai
Máy chủ cơ sở dữ liệu - Một số loại kho dữ liệu liên tục, như RDBMS. Hy vọng rằng bạn không thường xuyên thay đổi kho dữ liệu. Có lẽ mỗi máy chủ / cụm trò chơi có một kho dữ liệu độc lập. Bạn có thể có thể sử dụng cùng một thủ thuật với chuyển đổi dự phòng ấm áp (và yêu cầu các máy chủ chơi trò chơi ngắt kết nối, đợi cơ sở dữ liệu cũ và chuyển đổi dự phòng, sau đó kết nối lại với chuyển đổi dự phòng) nhưng điều đó có vẻ khá rủi ro với tôi.
Tất cả các trường hợp trên thêm một mức độ phức tạp đáng kinh ngạc cho một hệ thống vốn đã phức tạp và giới thiệu một loạt các nơi mà lỗi mã có thể gây mất dữ liệu hoặc tham nhũng.
Một giải pháp khác là sử dụng một ngôn ngữ được thiết kế cho 100% thời gian hoạt động và có các capabilties tích hợp để chạy mã nóng. Erlang là một lựa chọn tốt ( ví dụ hotpatching ) và Java có chức năng tương tự .
Không ai khác có kinh nghiệm thực sự chạy một cái gì đó như thế này? Huh.
Có một số lý do kết nối cả mã và hệ thống. Đầu tiên, hãy nhớ rằng hầu hết các công cụ MMO 'lớn' hiện tại đã được lập trình từ vài năm trước, và mặc dù đã nâng cấp đồ họa và công nghệ, nhưng vẫn phụ thuộc vào cách nhiều hệ thống này được viết vào năm 2000 hoặc lâu hơn. Chẳng hạn, Eve-Online vẫn chạy trên một phiên bản Microsoft SQL Server khổng lồ, đó là lý do tại sao họ luôn cố gắng rút ra nhiều hơn bằng cách nâng cấp phần cứng.
Một ví dụ về sự cải tiến kể từ khi WoW và EVE bắt đầu là công việc được thực hiện trong cơ sở dữ liệu khóa / giá trị phân tán như MapReduce của Google (và đó là triển khai mã nguồn mở, Hadoop), các dịch vụ xếp hàng xử lý phản hồi khẳng định cực nhanh (Amazon SQS) và khác " công nghệ đám mây ".
Tôi có nhiều kinh nghiệm nhất với EVE (Tôi là một người thích laser hơn là một anh chàng battleaxes), vì vậy một số ví dụ này thiên về EVE hơn.
Theo như lý do hệ thống đi:
Theo như lý do phần mềm:
Điều hành một nền kinh tế với cả hai vòng khép kín và mở là một vấn đề đối với các nhà khai thác MMO - nếu bạn không tin tôi, hãy đọc một số tài liệu học thuật được viết về nền kinh tế trò chơi và một số nghiên cứu về các trò chơi cũ như Ultima Online có nền kinh tế tương đối nguyên thủy. Phân tích cần phải xảy ra để bổ sung các vòng mở và xác định gian lận và hoạt động kinh tế tiêu cực khác cần xảy ra ngoại tuyến với ảnh chụp nhanh dữ liệu, đôi khi chỉ có thể được thực hiện trong khi cơ sở dữ liệu bị khóa hoàn toàn.
Nếu bạn lưu ý, việc bảo trì của Eve xảy ra khi đó là buổi trưa ở Anh, nơi có trung tâm dữ liệu chính.
Tôi nghi ngờ rằng tổng thời gian mà Blizzard (tôi đang suy luận rằng đó là một buổi sáng thứ ba mà bạn đang đăng câu hỏi của bạn) trích dẫn để bảo trì là cho toàn bộ cụm; không phải mọi máy chủ đều mất nhiều thời gian để thực hiện công việc.
Mặc dù có thể đưa các máy chủ cá nhân trở lại nhanh hơn, nhưng điều đó sẽ gây ra tiếng kêu bất lợi cho những người chơi có cảnh giới xảy ra sớm hơn trong lịch trình. Như vậy, họ giữ mọi thứ xuống cho đến khi tất cả các công việc được thực hiện; với hàng trăm lĩnh vực để làm việc, họ có thể thực hiện song song nhiều công việc, nhưng vẫn tuần tự kiểm tra lần cuối trước khi đưa mọi thứ trở lại trực tuyến. Nếu bạn đang thực hiện nâng cấp phần cứng, điều này có thể được tuần tự hóa trên nhiều trung tâm dữ liệu như họ có.
Về lý do tại sao họ thực hiện bảo trì, một số có thể chỉ là khởi động lại hiệu suất. Mặc dù sẽ rất tuyệt nếu việc khởi động lại như vậy không cần thiết, chi phí cho việc đó so với tác động của việc không làm như vậy có thể hướng sự lựa chọn của họ ở đây.
Khi bạn xem lý do tại sao họ không thể phân cụm các quy trình và thực hiện bảo trì cuộn, những điều ít người biết về cơ sở hạ tầng WoW cho thấy rằng nhiều máy móc cung cấp dịch vụ cho mỗi vương quốc (một cho thế giới, một cho các trường hợp và đột kích, một cho chiến trường , v.v.) họ không sử dụng thiết lập quy trình hoạt động tích cực được nhà nước chia sẻ. Không có chia sẻ trạng thái trực tiếp, chỉ có dữ liệu liên tục thông qua cơ sở dữ liệu.
Cuối cùng, các cơ chế cung cấp dịch vụ trực tuyến có trạng thái cho một cơ sở thuê bao lớn đó thách thức một số thực tiễn tốt nhất mà chúng ta có thể tán thành khi nói về một trang web hoặc dịch vụ dựa trên internet truyền thống khác.
Một số thời gian ngừng hoạt động kéo dài gần đây trong EvE Online là về việc cài đặt phần cứng mới như SAN nhanh hơn. Mặc dù về mặt kỹ thuật, người ta có thể di chuyển phần lớn dữ liệu bằng cách tạo một nhóm mới trên ổ đĩa mới và sau đó làm trống ổ đĩa chính, điều đó sẽ dẫn đến thời gian kéo dài hiệu suất bị giảm do I / O không đổi. Vì vậy, họ đã chọn tách cơ sở dữ liệu 1.1TB và di chuyển nó trong một lần.
Câu trả lời cho câu hỏi này cũng dựa vào ứng dụng cụ thể. Ví dụ: một máy chủ xử lý một hệ thống sao cụ thể không thể bị nóng mà không làm gián đoạn trò chơi, do đó thời gian chết được sử dụng để gán lại các máy chủ mạnh hơn vào các điểm nóng tiềm năng. Ngoài ra, các tính toán sở hữu (chủ quyền) của các hệ thống sao được tính toán. Điều này phụ thuộc vào hàng chục biến khác nhau, tất cả đều có thể thay đổi tùy thuộc vào hành động của người chơi. Không cần phải nói, làm điều đó trực tiếp có thể gây ra khóa quá mức và / hoặc các vấn đề tương tranh khác. Nhưng giải quyết những điều đó là tốt nhất để lại stackoverflow .
Trong một chủ đề gần đây, tôi nên thường xuyên khởi động lại máy chủ linux một điểm tốt khác đã được đề cập, xác minh rằng mọi thứ khởi động đúng khi khởi động lại hoặc sau khi có bất kỳ thay đổi cấu hình (chính) nào.
Tôi đã triển khai kiến trúc MMO trong Erlang hỗ trợ nâng cấp và phân phối mã nóng. Ví dụ: một "Máy chủ GamePlay" có thể chạy trên một số lượng máy tùy ý, nếu cần nâng cấp phần cứng, các đối tượng của nó có thể được chuyển (trong thời gian thực) sang các máy khác. Điều này cho phép nâng cấp trong phần cứng phần mềm mà không có bất kỳ thời gian chết.
Bạn có thể kiểm tra trang web của tôi tại http://www.next-gen.cc .
Tôi tin rằng cửa sổ bảo trì cũng cho phép thay thế phần cứng thường xuyên để đảm bảo các thành phần không bị lỗi.