Bảo trì máy chủ MMORPG


14

Có vẻ như hầu hết các trò chơi mmorpg đều có một số bảo trì máy chủ thường xuyên, một số mỗi ngày, một số mỗi tuần một lần. Họ thực sự phải làm gì và tại sao lại cần thiết?

Nếu bạn bắt đầu với một dự án như vậy, bạn có thể làm gì để tránh điều này?

Câu trả lời:


17

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

    1. Báo hiệu cho khách hàng để kết nối với chuyển đổi dự phòng ấm và ngắt kết nối khỏi cụm cũ.
    2. Giữ trạng thái được đồng bộ giữa chuyển đổi dự phòng và máy chủ ứng dụng lỗi thời trong khi tất cả các máy khách chuyển.
  • 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ự .


12

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:

  • Các nút vật lý thất bại trên cơ sở phù hợp. Khi một nút thất bại, thông thường hoạt động của nó được di chuyển ở nơi khác bằng cách sử dụng bất kỳ số lượng phương tiện nào. Tuy nhiên, nút cần được đưa trở lại vào dịch vụ càng nhanh càng tốt. Trong trường hợp của EVE, họ sử dụng cả ngôn ngữ xử lý không chồng và máy chủ ảo; Tôi không chắc kiến ​​trúc của Blizzard là như thế nào.
  • Tính nhất quán của cơ sở dữ liệu cần được kiểm tra, các bản ghi cần được xóa, và các chỉ mục và bộ đệm dữ liệu cần được xây dựng lại. Điều này đặc biệt quan trọng trong một hệ thống như EVE chỉ với một thể hiện cơ sở dữ liệu "trực tiếp".
  • Các bản vá hệ điều hành cần được áp dụng tại thời điểm chúng có thể khởi động lại các nút mà không cần phải có quá nhiều hoạt động di chuyển ở nơi khác. Di chuyển chiếm rất nhiều tài nguyên mạng có thể được dành riêng cho xử lý trực tuyến.
  • Các MMO dựa trên RDBMS có vấn đề lớn với việc khóa dữ liệu và tính toàn vẹn tham chiếu. Thời gian chết được sử dụng để dọn sạch các ổ khóa cũ và phá vỡ tính toàn vẹn từ nhật ký hoạt động.
  • Hầu hết các trò chơi thực hiện lưu trữ dữ liệu được định vị theo địa lý cho thông tin tĩnh hoặc bán tĩnh (xem dữ liệu tóm tắt bộ đệm bên dưới) trong các khu vực sử dụng nặng, ví dụ bờ đông so với bờ tây Hoa Kỳ. Các cache được cập nhật thủ công trong thời gian chết.

Theo như lý do phần mềm:

  • Các trò chơi, khi hoạt động, sử dụng rất nhiều OLTP - đó là Xử lý giao dịch trực tuyến - loại đọc / ghi vào cơ sở dữ liệu. Tuy nhiên, đôi khi bạn muốn có một bản báo cáo tóm tắt ... như có bao nhiêu con thú cụ thể mà bạn đã giết trong 3 năm qua. Điều đó được xử lý tốt nhất bởi một báo cáo OLAP - đó là Xử lý phân tích trực tuyến - chứa thông tin tóm tắt dựa trên rất nhiều hàng trong bộ dữ liệu khổng lồ. Trong thực tế, các trò chơi triển khai các hệ thống sử dụng OLAP để xây dựng bộ đệm để hạn chế số lượng truy vấn cần đọc - nghĩa là, chúng xây dựng tổng số vào một ngày nhất định và sau đó khi bạn đặt câu hỏi, chúng chỉ đọc các hàng từ cửa hàng OLTP tóm tắt khoảng thời gian kể từ ngày nhất định. Hợp nhất cả hai, và bạn thực sự có thể định lượng được cuộc sống của bạn đã trở nên vô giá trị như thế nào.
  • Các bản vá nóng đã nói ở trên, mà tôi thấy là một vấn đề phần mềm nhưng các nhà phát triển phần mềm coi đó là một vấn đề hệ thống. ;)
  • Bổ sung các cửa hàng vật phẩm - trong đêm giao thừa, vành đai tiểu hành tinh được làm mới mỗi đêm và một số khu phức hợp cũng được tái chế. Điều này có thể được thực hiện ở một mức độ nào đó trên mạng, nhưng một số thuật toán quá phức tạp và cần được thực hiện ở chế độ ngoại tuyến vì chúng nhanh chóng đưa cơ sở dữ liệu đến đầu gối trong khi chúng tóm tắt hoạt động kinh tế của ngày hôm trước.

Đ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.


3

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.


Trên thực tế, hầu hết các thách thức đều xoay quanh nút duy trì trạng thái trung tâm đó, cơ sở dữ liệu. Đó là hồ sơ có thẩm quyền. Tất cả những thứ khác dường như quản lý trạng thái (máy chủ, máy khách và bất kỳ cơ chế lưu trữ nào ở giữa) thực sự chỉ là các nhà đàm phán liên quan đến dữ liệu nào đưa nó vào cơ sở dữ liệu. Lag là thời gian cơ sở dữ liệu cần xác nhận lại chuỗi những gì nó đã ghi lại.
Karl Katzke

1

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 .


Mặc dù với việc ảo hóa di chuyển các máy chủ được tải nặng sang phần cứng với nhiều tài nguyên sẵn có hơn nên hoàn toàn có thể thực hiện trực tiếp và tự động ... đặc biệt là trong một trò chơi có độ trễ hành động được đo bằng nhiều mili giây (đôi khi hơn một trăm). Nhưng nó có thể phức tạp và đắt đỏ ^^
Oskar Duveborn

Oskar, hãy nhớ rằng công nghệ cốt lõi đằng sau EVE và WoW đã được viết vào khoảng năm 2002, trước khi những công nghệ đó thực sự trưởng thành.
Karl Katzke

0

có lẽ là một cái gì đó bạn không thể giải quyết thông qua phân cụm / cân bằng tải, chẳng hạn như thay đổi lược đồ DB chính.



0

Một bản nâng cấp đơn giản của phần cứng (hoặc thay thế phần cứng) cũng được trình bày dưới dạng "bảo trì máy chủ" bởi các trò chơi MMORPG. Vì vậy, tầm thường chúng ta thường quên nó.


0

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 .


0

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.


Thường thì không. Họ sẽ chạy một số số liệu dự đoán trên phần cứng, nhưng họ thường không chủ động thay thế tất cả các quạt hoặc các bit 'có thể sử dụng' khác trong một hệ thống trừ khi nó có dấu hiệu bị lỗi, tức là RPM đang giảm hoặc SMART có số lỗi ghi cao.
Karl Katzke
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.