Optimización de servidores minecraft

Optimización de servidores minecraft
No noso blog xa temos contou, como crear o teu propio servidor Minecraft, pero pasaron 5 anos desde entón e moito cambiou. Compartimos contigo formas actuais de crear e optimizar a parte do servidor dun xogo tan popular.

Ao longo dos seus 9 anos de historia (a contar desde a data de lanzamento), Minecraft gañou un número incrible de fans e odiadores tanto entre os xogadores comúns como entre os frikis. O concepto sinxelo dun mundo feito de bloques evolucionou dunha simple forma de entretemento a un medio universal para comunicarse e crear diversos obxectos do mundo real.

Ademais da construción, o xogo ten a capacidade de crear lóxica, que che permiten implementar algoritmos completos dentro de Minecraft. YouTube está cheo de vídeos moi impresionantes onde a xente, despois de esforzarse enormemente e dedicando moito tempo, creou unha copia deste ou aquel dispositivo electrónico ou construíu unha copia detallada. existente и ficticio estruturas arquitectónicas. Todo está limitado só pola imaxinación do xogador e as posibilidades do universo dos xogos.


Pero non falemos máis sobre o que crean exactamente os xogadores, senón que vexamos a parte do servidor da aplicación e destaquemos os problemas (ás veces moi complexos) que poden xurdir durante o funcionamento baixo carga. Fagamos unha reserva de inmediato que só falaremos da edición Java.

Tipos de servidores

A opción máis sinxela é un servidor integrado no cliente do xogo. Creamos un mundo, pulsamos un botón e o servidor fíxose accesible a través da rede local. Esta opción non pode soportar ningunha carga grave e, polo tanto, nin sequera a consideraremos.

Vainilla

Mojang Studios está distribuíndo a parte do servidor do xogo como unha aplicación Java de balde na páxina web oficial. Isto permíteche crear o teu propio servidor dedicado e mundo persoal, facéndoo accesible para a conexión desde calquera lugar do planeta. Para aqueles que están facendo isto por primeira vez, hai un gran titorial, dispoñible na Wiki do xogo correspondente.

Este enfoque ten un serio inconveniente, é dicir, a falta de capacidades listas para conectar complementos que amplían a funcionalidade do servidor e permiten non só automatizar moitos procesos, senón tamén optimizar o rendemento. Ademais, o servidor oficial ten un consumo de RAM bastante grande para cada xogador conectado.

bukkit

Unha aplicación de servidor creada por entusiastas baseada na versión Vanilla bukkit expandiu significativamente as capacidades do xogo ao admitir complementos e modificacións (modificacións). Permitiu non só engadir novos bloques ao xogo, senón tamén realizar varias manipulacións que eran inaccesibles para o software vainilla. Curiosamente, esta aplicación requiriu significativamente menos memoria.

Instalar Bukkit non é difícil; as instrucións correspondentes están no recurso GamePedia. Pero isto non ten sentido, xa que desde 2014 o equipo de Bukkit se disolveu, os desenvolvedores do proxecto convertéronse en empregados de Mojang Studios e repositorio abandonado. Así, Bukkit está efectivamente morto, e ten sentido prestar atención aos próximos dous proxectos.

SpigotMC

Para facilitarlles a vida aos desenvolvedores de complementos, era necesario contar cunha API para interactuar co mundo do xogo. Este é exactamente o problema que resolveron os creadores. Espiga, tomando o núcleo de Bukkit e reelaborando para conseguir unha mellor fiabilidade e rendemento. Con todo, Repositorio Git o proxecto foi bloqueado debido á Digital Millennium Copyright Act (DMCA), e é imposible descargar o código fonte desde alí.

Actualmente, SpigotMC desenvólvese e úsase activamente. Admite todos os complementos creados para Bukkit, pero non é compatible con el. Para evitar a eliminación da DMCA, inventouse un método elegante chamado BuildTools. Esta ferramenta elimina a necesidade de distribuír unha aplicación compilada e permite aos usuarios compilar Spigot, CraftBukkit e Bukkit a partir do código fonte. Todo isto fai que a prohibición da DMCA sexa inútil.

PaperMC

Todo parecía xenial, e Spigot converteuse nunha gran opción. Pero isto non foi suficiente para algúns entusiastas, e crearon o seu propio garfo de Spigot "con esteroides". Activado páxina do proxecto a principal vantaxe é que "É estúpido rápido". Desenvolvido comunidade permítelle resolver rapidamente problemas emerxentes e a API estendida permítelle crear complementos interesantes. Podes iniciar PaperMC cun comando sinxelo, indicado en documentación.

PaperMC ten unha excelente compatibilidade, polo que os complementos escritos para SpigotMC poden funcionar facilmente en PaperMC, pero sen soporte oficial. A compatibilidade con versións anteriores con SpigotMC tamén está presente. Agora que enumeramos as distintas opcións para crear un servidor, pasemos aos problemas de rendemento que poidan xurdir.

Problemas e solucións

O principal que debes entender é que todo o relacionado co procesamento do mundo do xogo procesarase só nun núcleo informático do servidor físico. Entón, se de súpeto tes un excelente servidor cunha ducia de núcleos informáticos, só se cargará un. Todos os demais estarán practicamente inactivos. Esta é a arquitectura da aplicación e non podes facer nada respecto diso. Polo tanto, ao elixir un servidor, debes prestar atención non ao número de núcleos, senón á frecuencia do reloxo. Canto máis alto sexa, mellor será o rendemento.

En canto ao tema da capacidade da memoria RAM, debemos partir dos seguintes indicadores:

  • número previsto de xogadores;
  • número planificado de mundos no servidor;
  • o tamaño de cada mundo.

Hai que lembrar que unha aplicación Java sempre necesita unha reserva de RAM. Se esperas un consumo de memoria de 8 gigabytes, entón tes que ter 12. Os números son relativos, pero a esencia non cambia.

Para iniciar a parte do servidor, recomendamos usar as bandeiras especificadas no artigo Axustando as bandeiras do colector de lixo G1GC para Minecraft. Esta "maxia negra" permite ao servidor configurar correctamente o "recolector de lixo" e optimizar o uso da memoria RAM. Non debes asignar máis memoria da que realmente consome o servidor durante a máxima afluencia de xogadores.

Xeración dun mapa de bloques

"De verdade pensas que a lúa só existe cando a miras?" (Albert Einstein)

Servidor completamente novo. Tan pronto como o xogador se conecta con éxito por primeira vez, o personaxe do xogo aparece no punto de reunión xeral (spawn). Este é o único lugar onde o servidor xera previamente o mundo do xogo. Ao mesmo momento, a parte do cliente mira a configuración e o parámetro clave é a distancia de debuxo. Mídese en anacos (a área do mapa é de 16×16 e 256 bloques de alto). Cantos anacos se indican é exactamente cantos se solicitarán ao servidor.

O servidor almacena un mapa global do mundo, e se aínda non hai bloques xerados nel no punto de aparición do personaxe do xogo, entón o servidor xeraos e gárdaos de forma dinámica. Isto non só require grandes recursos informáticos, senón que tamén aumenta constantemente o tamaño do mapa mundial. Nun dos servidores anarquistas máis antigos 2b2t (2builders2tools) O tamaño do mapa xa superou as 8 Tb, e a fronteira do mundo está a uns 30 millóns de bloques. Hai miles de historias asociadas a este servidor e merece un artigo propio na serie.

Xerar un mundo arredor dun xogador non é un problema. Xerar un mundo ao redor de centos de xogadores provocará pequenas ralentizacións do servidor durante un curto período de tempo, despois do cal a carga diminuirá. Xerar un mundo a distancia de renderización do cliente ao redor de mil xogadores xa é capaz de "soltar" o servidor e botar a todos os clientes fóra del debido a un tempo de espera.

No software do servidor hai un valor como TPS (Ticks por servidor - ticks por segundo). Normalmente, 1 ciclo de reloxo é igual a 50 ms. (1 segundo do mundo real é igual a 20 ticks do mundo do xogo). Se o procesamento dun tick aumenta a 60 segundos, a aplicación do servidor pecharase, expulsando a todos os xogadores.

A solución é limitar o mundo a determinadas coordenadas e realizar a xeración preliminar de bloques. Así, eliminamos a necesidade de xeración dinámica durante o xogo, e o servidor só necesitará ler un mapa existente. Ambos problemas pódense resolver cun único complemento Fronteira Mundial.

O xeito máis sinxelo é establecer o límite do mundo en forma de círculo en relación ao punto de aparición (aínda que podes facelo de calquera forma) cun comando:

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

Se o personaxe do xogador tenta cruzar a fronteira, será afastado varios bloques. Se isto se fai varias veces nun tempo limitado, o infractor será teletransportado pola forza ao punto de aparición. A pre-xeración do mundo faise aínda máis sinxela, co comando:

/wb fill

Dado que esta acción podería afectar aos xogadores do servidor, asegúrate de confirmar:

/wb confirm

En total, levou aproximadamente 5000 horas xerar un mundo cun radio de 40 bloques (~2 mil millóns de bloques) nun procesador Intel® Xeon® Gold 6240. Polo tanto, se quere xerar previamente un mapa máis grande, teña en conta que este proceso levará un tempo decente e o TPS do servidor reducirase seriamente. Ademais, recorda que incluso un radio de 5000 bloques requirirá aproximadamente 2 GB de espazo en disco.

A pesar de que a última versión do complemento foi desenvolvida para a versión 1.14 de Minecraft, descubriuse experimentalmente que funciona moi ben nas versións posteriores. Dispoñible unha lista completa de comandos con explicacións no foro de complementos.

Bloques problemáticos

Hai unha gran variedade de bloques en Minecraft. Non obstante, queremos chamar a atención dos lectores sobre un bloque como TNT. Como o nome indica, este bloque é un explosivo (Nota do editor: este é un elemento de xogo do mundo virtual e este elemento non ten nada con explosivos reais). A súa peculiaridade é tal que no momento da activación comeza a actuar sobre ela a forza da gravidade. Isto obriga ao servidor a calcular todas as coordenadas se neste momento o bloque comeza a caer.

Se hai varios bloques de TNT, entón a detonación dun bloque provoca a detonación e a activación da gravidade nos bloques veciños, dispersándoos en todas as direccións. Toda esta fermosa mecánica no lado do servidor parece unha gran cantidade de operacións para calcular a traxectoria de cada bloque, así como a interacción cos bloques veciños. A tarefa é moi intensiva en recursos, que calquera pode comprobar facilmente. Xera e detona un cubo a partir de bloques de TNT que teña polo menos un tamaño de 30x30x30. E se pensabas que tiñas un ordenador de xogos bo e potente, estabas moi equivocado 😉

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

Optimización de servidores minecraft
Un "experimento" similar nun servidor con Intel® Xeon® Gold 6240 levou a unha grave caída do TPS e a carga da CPU do 80 % durante todo o tempo de detonación do bloque. Polo tanto, se algún xogador é capaz de facelo, o problema de rendemento afectará a todos os xogadores do servidor.

Unha opción aínda máis difícil - Cristais de borde. Con todo, se TNT explota secuencialmente, entón os cristais Edge detonan todos ao mesmo tempo, o que en teoría pode deter completamente o funcionamento da aplicación do servidor.

Este escenario só se pode evitar prohibindo completamente o uso destes bloques no mundo do xogo. Por exemplo, usando o complemento WorldGuard. Teña en conta que este complemento por si só non funciona sen outro complemento WorldEdit. Polo tanto, instale WorldEdit primeiro, e despois WorldGuard.

Conclusión

Xestionar correctamente un servidor de xogos non é unha tarefa fácil. As dificultades e a diminución do rendemento agardarán por ti a cada paso, especialmente se non tes en conta a propia mecánica de xogo. É imposible prever todo, porque ás veces os xogadores poden ser moi creativos ao tentar forzar o servidor a facer algo para o que non estaba destinado. Só un equilibrio razoable entre riscos e restricións establecidas permitirá que o servidor funcione continuamente e non reduza o seu rendemento a valores críticos.

Durante a corentena, algúns dos nosos empregados perderon as súas oficinas favoritas e decidiron recrealas dentro de Minecraft. Tamén tes a oportunidade de vir visitarnos sen arriscar a túa saúde nin perder o tempo na estrada.

Para iso, convidamos a todos ao noso servidor minecraft.selectel.ru (versión cliente 1.15.2), onde se recrearon os centros de datos Tsvetochnaya-1 e Tsvetochnaya-2. Non esquezas aceptar descargar recursos adicionais, son necesarios para a visualización correcta dalgunhas localizacións.

Agardan por ti misións, códigos promocionais, ovos de Pascua e unha agradable comunicación.

Fonte: www.habr.com

Engadir un comentario