Tối ưu hóa máy chủ Minecraft

Tối ưu hóa máy chủ Minecraft
Trên blog của chúng tôi, chúng tôi đã có nói, cách tạo máy chủ Minecraft của riêng bạn, nhưng đã 5 năm trôi qua kể từ đó và rất nhiều thứ đã thay đổi. Chúng tôi đang chia sẻ với bạn những cách hiện tại để tạo và tối ưu hóa phần máy chủ của một trò chơi phổ biến như vậy.

Trong lịch sử 9 năm của mình (tính từ ngày phát hành), Minecraft đã thu về một lượng người hâm mộ và kẻ thù ghét đáng kinh ngạc trong cả những người chơi bình thường và những người đam mê công nghệ. Khái niệm đơn giản về một thế giới được tạo thành từ các khối đã phát triển từ một hình thức giải trí đơn giản thành một phương tiện phổ quát để giao tiếp và tạo ra nhiều đồ vật khác nhau từ thế giới thực.

Ngoài xây dựng, trò chơi còn có khả năng tạo Hợp lý, cho phép bạn triển khai các thuật toán chính thức bên trong Minecraft. YouTube có rất nhiều video rất ấn tượng trong đó mọi người, đã bỏ rất nhiều công sức và dành nhiều thời gian, đã tạo ra một bản sao của thiết bị điện tử này hoặc thiết bị điện tử kia hoặc tạo ra một bản sao chi tiết hiện có и hư cấu công trình kiến ​​trúc. Mọi thứ chỉ bị giới hạn bởi trí tưởng tượng của game thủ và khả năng của vũ trụ trò chơi.

Chơi video

Nhưng chúng ta đừng nói thêm về chính xác những gì người chơi tạo ra mà hãy xem xét phần máy chủ của ứng dụng và nêu bật các vấn đề (đôi khi rất phức tạp) có thể phát sinh trong quá trình hoạt động dưới tải. Hãy đặt chỗ ngay chúng ta sẽ chỉ nói về Phiên bản Java.

Các loại máy chủ

Tùy chọn đơn giản nhất là máy chủ được tích hợp trong ứng dụng khách trò chơi. Chúng tôi đã tạo ra một thế giới, nhấn một nút và máy chủ có thể truy cập được qua mạng cục bộ. Tùy chọn này không thể chịu được bất kỳ tải nghiêm trọng nào và do đó chúng tôi thậm chí sẽ không xem xét nó.

Vanilla

Mojang Studios đang phân phối miễn phí phần máy chủ của trò chơi dưới dạng ứng dụng Java trên trang web chính thức. Điều này cho phép bạn tạo của riêng bạn máy chủ chuyên dụng và thế giới cá nhân, giúp kết nối có thể truy cập được từ mọi nơi trên hành tinh. Đối với những người lần đầu tiên làm điều này, có một điều tuyệt vời hướng dẫn, có sẵn trên Wiki trò chơi tương ứng.

Cách tiếp cận này có một nhược điểm nghiêm trọng, đó là thiếu khả năng sẵn có để kết nối các plugin giúp mở rộng chức năng của máy chủ và không chỉ cho phép tự động hóa nhiều quy trình mà còn tối ưu hóa hiệu suất. Ngoài ra, máy chủ chính thức có mức tiêu thụ RAM khá lớn cho mỗi người chơi được kết nối.

bukkit

Một ứng dụng máy chủ được tạo ra bởi những người đam mê dựa trên phiên bản Vanilla bukkit mở rộng đáng kể khả năng của trò chơi bằng cách hỗ trợ các plugin và mod (sửa đổi). Nó không chỉ cho phép thêm các khối mới vào lối chơi mà còn cho phép thực hiện nhiều thao tác khác nhau mà phần mềm vanilla không thể truy cập được. Điều thú vị là ứng dụng này yêu cầu ít bộ nhớ hơn đáng kể.

Cài đặt Bukkit không khó; GamePedia. Nhưng điều này chẳng có ý nghĩa gì, vì nhóm Bukkit đã giải tán từ năm 2014, những người phát triển dự án đã trở thành nhân viên của Mojang Studios và kho bị bỏ rơi. Vì vậy, Bukkit thực sự đã chết và việc chú ý đến hai dự án tiếp theo là điều hợp lý.

cái vòi MC

Để giúp cuộc sống của các nhà phát triển plugin trở nên dễ dàng hơn, cần có API để tương tác với thế giới trò chơi. Đây chính xác là vấn đề mà những người sáng tạo đã giải quyết. Spigot, lấy lõi Bukkit và làm lại để đạt được độ tin cậy và hiệu suất tốt hơn. Tuy nhiên, Kho Git dự án đã bị chặn do Đạo luật bản quyền thiên niên kỷ kỹ thuật số (DMCA) và không thể tải xuống mã nguồn từ đó.

Hiện tại, SpigotMC đang được tích cực phát triển và sử dụng. Nó hỗ trợ tất cả các plugin được tạo cho Bukkit, nhưng không tương thích ngược với nó. Để giải quyết vấn đề DMCA Takedown, một phương pháp hay có tên BuildTools đã được phát minh. Công cụ này loại bỏ nhu cầu phân phối ứng dụng đã biên dịch và cho phép người dùng biên dịch Spigot, CraftBukkit và Bukkit từ mã nguồn. Tất cả điều này làm cho lệnh cấm DMCA trở nên vô dụng.

giấyMC

Mọi thứ có vẻ ổn và Spigot trở thành một lựa chọn tuyệt vời. Nhưng điều này vẫn chưa đủ đối với một số người đam mê và họ đã tạo ra nhánh Spigot “trên steroid” của riêng mình. TRÊN trang dự án ưu điểm chính là “Nhanh đến mức ngu ngốc”. Đã phát triển cộng đồng cho phép bạn giải quyết nhanh chóng các vấn đề mới nổi và API mở rộng cho phép bạn tạo các plugin thú vị. Bạn có thể khởi chạy PaperMC bằng một lệnh đơn giản, được đưa ra trong tài liệu.

PaperMC có khả năng tương thích tuyệt vời, vì vậy các plugin được viết cho SpigotMC có thể dễ dàng hoạt động trên PaperMC mà không cần hỗ trợ chính thức. Khả năng tương thích ngược với SpigotMC cũng có mặt. Bây giờ chúng tôi đã liệt kê các tùy chọn khác nhau để tạo máy chủ, hãy chuyển sang các vấn đề về hiệu suất có thể phát sinh.

Vấn đề và giải pháp

Điều chính bạn cần hiểu là mọi thứ liên quan đến xử lý thế giới trò chơi sẽ chỉ được xử lý trên một lõi máy tính của máy chủ vật lý. Vì vậy, nếu đột nhiên bạn có một máy chủ xuất sắc với hàng tá lõi tính toán, thì sẽ chỉ có một lõi được tải. Tất cả những người khác sẽ hầu như không hoạt động. Đây là kiến ​​trúc của ứng dụng và bạn không thể làm gì với nó. Vì vậy, khi chọn máy chủ, bạn không nên chú ý đến số lượng lõi mà phải chú ý đến tần số xung nhịp. Nó càng cao thì hiệu suất sẽ càng tốt.

Về vấn đề dung lượng RAM, chúng ta nên tiến hành từ các chỉ số sau:

  • số lượng người chơi dự kiến;
  • số lượng thế giới theo kế hoạch trên máy chủ;
  • kích thước của mỗi thế giới.

Cần nhớ rằng một ứng dụng Java luôn cần một lượng RAM dự trữ. Nếu bạn mong đợi mức tiêu thụ bộ nhớ là 8 gigabyte, thì thực tế bạn cần phải có 12. Các con số chỉ mang tính chất tương đối, nhưng bản chất không thay đổi.

Để bắt đầu phần máy chủ, chúng tôi khuyên bạn nên sử dụng các cờ được chỉ định trong bài viết Điều chỉnh JVM – Cờ thu gom rác G1GC cho Minecraft. “Ma thuật đen” này cho phép máy chủ cấu hình chính xác “bộ thu gom rác” và tối ưu hóa việc sử dụng RAM. Bạn không nên phân bổ nhiều bộ nhớ hơn mức mà máy chủ thực sự tiêu thụ trong thời gian có lượng người chơi cao điểm.

Tạo bản đồ khối

“Bạn có thực sự nghĩ rằng mặt trăng chỉ tồn tại khi bạn nhìn vào nó không?” (Albert Einstein)

Máy chủ hoàn toàn mới. Ngay khi người chơi kết nối thành công lần đầu tiên, nhân vật trong game sẽ xuất hiện tại điểm tập hợp chung (spawn). Đây là nơi duy nhất mà thế giới trò chơi được máy chủ tạo trước. Đồng thời, phần khách hàng sẽ xem xét các cài đặt và tham số chính là khoảng cách vẽ. Nó được đo bằng khối (khu vực bản đồ có kích thước 16 × 16 và cao 256 khối). Có bao nhiêu khối được chỉ định chính xác có bao nhiêu khối sẽ được yêu cầu từ máy chủ.

Máy chủ lưu trữ một bản đồ toàn cầu về thế giới và nếu chưa có khối nào được tạo trong đó tại thời điểm nhân vật trò chơi xuất hiện, thì máy chủ sẽ tự động tạo chúng và lưu trữ chúng. Điều này không chỉ đòi hỏi tài nguyên tính toán lớn mà còn không ngừng tăng kích thước của bản đồ thế giới. Trên một trong những máy chủ vô chính phủ lâu đời nhất 2b2t (2builders2tools) Kích thước của bản đồ đã vượt quá 8 Tb và biên giới của thế giới là khoảng 30 triệu khối. Có hàng nghìn câu chuyện liên quan đến máy chủ này và nó xứng đáng có một bài viết riêng trong loạt bài này.

Tạo ra một thế giới xung quanh một người chơi không phải là vấn đề. Việc tạo ra một thế giới xung quanh hàng trăm người chơi sẽ khiến máy chủ bị chậm một chút trong một thời gian ngắn, sau đó tải sẽ giảm. Việc tạo ra một thế giới ở khoảng cách kết xuất máy khách khoảng một nghìn người chơi đã có khả năng “đánh rơi” máy chủ và ném tất cả máy khách ra khỏi máy chủ do hết thời gian chờ.

Trong phần mềm máy chủ có một giá trị như TPS (Ticks per Server - tích tắc mỗi giây). Thông thường, 1 chu kỳ xung nhịp bằng 50 ms. (1 giây của thế giới thực bằng 20 tích tắc của thế giới game). Nếu quá trình xử lý một tích tắc tăng lên 60 giây, ứng dụng máy chủ sẽ bị đóng, loại bỏ tất cả người chơi.

Giải pháp là giới hạn thế giới ở những tọa độ nhất định và thực hiện tạo khối sơ bộ. Do đó, chúng tôi loại bỏ nhu cầu tạo động trong trò chơi và máy chủ sẽ chỉ cần đọc bản đồ hiện có. Cả hai vấn đề đều có thể được giải quyết bằng một plugin duy nhất Biên giới thế giới.

Cách dễ nhất là đặt ranh giới thế giới ở dạng vòng tròn tương ứng với điểm sinh sản (mặc dù bạn có thể tạo nó theo bất kỳ hình dạng nào) bằng một lệnh:

/wb set <радиус в блоках> spawn

Nếu nhân vật của người chơi cố gắng vượt qua biên giới, anh ta sẽ bị đẩy lùi vài khối. Nếu điều này được thực hiện nhiều lần trong một thời gian giới hạn, người vi phạm sẽ bị buộc phải dịch chuyển đến điểm sinh sản. Việc tạo thế giới trước thậm chí còn được thực hiện đơn giản hơn bằng lệnh:

/wb fill

Vì hành động này có thể ảnh hưởng đến người chơi trên máy chủ, hãy nhớ xác nhận:

/wb confirm

Tổng cộng, mất khoảng 5000 giờ để tạo ra một thế giới có bán kính 40 khối (~2 tỷ khối) trên bộ xử lý Intel® Xeon® Gold 6240. Do đó, nếu bạn muốn tạo trước một bản đồ lớn hơn, hãy lưu ý rằng. quá trình này sẽ mất một khoảng thời gian khá dài và TPS của máy chủ sẽ bị giảm nghiêm trọng. Ngoài ra, hãy nhớ rằng ngay cả bán kính 5000 khối cũng sẽ cần khoảng 2 GB dung lượng ổ đĩa.

Mặc dù thực tế là phiên bản mới nhất của plugin đã được phát triển cho phiên bản Minecraft 1.14, nhưng qua thực nghiệm, người ta thấy rằng nó hoạt động tốt trên các phiên bản tiếp theo. Có sẵn danh sách đầy đủ các lệnh kèm theo giải thích trên diễn đàn plugin.

Khối vấn đề

Có rất nhiều loại khối trong Minecraft. Tuy nhiên, chúng tôi muốn thu hút sự chú ý của độc giả đến một khối như TNT. Đúng như tên gọi, khối này là một chất nổ (ghi chú của biên tập viên - đây là vật phẩm trò chơi của thế giới ảo và vật phẩm này không có chất nổ thật). Điểm đặc biệt của nó là tại thời điểm kích hoạt, lực hấp dẫn bắt đầu tác dụng lên nó. Điều này buộc máy chủ phải tính toán tất cả tọa độ nếu tại thời điểm này khối bắt đầu rơi.

Nếu có một số khối TNT, thì việc phát nổ của một khối sẽ gây ra vụ nổ và kích hoạt trọng lực ở các khối lân cận, làm phân tán chúng theo mọi hướng. Tất cả cơ chế tuyệt đẹp này ở phía máy chủ trông giống như rất nhiều thao tác để tính toán quỹ đạo của từng khối, cũng như sự tương tác với các khối lân cận. Nhiệm vụ này cực kỳ tốn nhiều tài nguyên mà bất kỳ ai cũng có thể dễ dàng kiểm tra. Tạo và kích nổ khối lập phương từ các khối TNT có kích thước tối thiểu 30x30x30. Và nếu bạn nghĩ rằng mình có một chiếc máy tính chơi game tốt, mạnh mẽ thì bạn đã nhầm to rồi 😉

/fill ~ ~ ~ ~30 ~30 ~30 minecraft:tnt

Tối ưu hóa máy chủ Minecraft
Một “thử nghiệm” tương tự trên máy chủ có Intel® Xeon® Gold 6240 đã dẫn đến sự sụt giảm TPS nghiêm trọng và tải CPU 80% trong toàn bộ thời gian phát nổ khối. Vì vậy, nếu bất kỳ người chơi nào có thể làm được điều này thì vấn đề về hiệu suất sẽ ảnh hưởng đến tất cả người chơi trên máy chủ.

Một lựa chọn thậm chí còn khó khăn hơn - Tinh thể cạnh. Tuy nhiên, nếu TNT phát nổ liên tiếp thì Edge Crystal sẽ phát nổ cùng lúc, theo lý thuyết có thể dừng hoàn toàn hoạt động của ứng dụng máy chủ.

Kịch bản này chỉ có thể tránh được bằng cách cấm hoàn toàn việc sử dụng các khối này trong thế giới trò chơi. Ví dụ: sử dụng plugin Bảo vệ thế giới. Xin lưu ý rằng bản thân plugin này không hoạt động nếu không có plugin khác Thế giới. Vì vậy, hãy cài đặt WorldEdit trước, sau đó là WorldGuard.

Kết luận

Quản lý đúng cách một máy chủ trò chơi không phải là một nhiệm vụ dễ dàng. Khó khăn và hiệu suất giảm sút sẽ chờ đợi bạn ở mỗi lượt, đặc biệt nếu bạn không tính đến cơ chế chơi trò chơi. Không thể đoán trước được mọi thứ, bởi vì người chơi đôi khi có thể rất sáng tạo khi cố gắng ép máy chủ làm điều gì đó mà nó không có ý định. Chỉ có sự cân bằng hợp lý giữa rủi ro và các hạn chế đã thiết lập mới cho phép máy chủ hoạt động liên tục và không làm giảm hiệu suất của nó xuống các giá trị quan trọng.

Trong thời gian cách ly, một số nhân viên của chúng tôi đã bỏ lỡ văn phòng yêu thích của họ và quyết định tạo lại chúng trong Minecraft. Bạn cũng có cơ hội đến thăm chúng tôi mà không phải mạo hiểm sức khỏe hay lãng phí thời gian trên đường.

Để làm điều này, chúng tôi mời mọi người đến máy chủ của chúng tôi minecraft.selectel.ru (phiên bản máy khách 1.15.2), nơi các trung tâm dữ liệu Tsvetochnaya-1 và Tsvetochnaya-2 được tạo lại. Đừng quên đồng ý tải xuống các tài nguyên bổ sung, chúng cần thiết để hiển thị chính xác một số vị trí.

Nhiệm vụ, mã khuyến mại, trứng Phục sinh và giao tiếp thú vị đang chờ đợi bạn.

Nguồn: www.habr.com

Mua dịch vụ lưu trữ đáng tin cậy cho các trang web có bảo vệ DDoS, máy chủ VPS VDS 🔥 Mua dịch vụ hosting website đáng tin cậy với bảo vệ DDoS, máy chủ VPS VDS | ProHoster