• avatar prool
  • 0
Не могу не согласиться
Перезагрузка это неудобство для игроков, им нужно из-за нее подстраиваться и планировать свое время. Понятно, что есть ситуации, что без нее никак. Но то, что в Diku-мадах чтобы исправить одну опечатку в описании одного предмета или моба нужно перезагружать весь сервер, это их недостаток. MUDы не нужно так делать, мне кажется. Слишком нерационально.
  • avatar prool
  • 0
Всё равно не понимаю, зачем отказываться от перезагрузок.

Вот, приведу близкий мне пример: есть операционные системы Виндовс и Линукс. В Винде (особенно в старых ее версиях) любая найстройка, смена параметров, установка доп. софта требовала перезагрузки, а о и не одной (виновато, наверное, monolitic ядро Винды). В Линуксе модульная архитектура и многие модули ядра и сервисы можно перезапустить без перезагрузки всего сервера. Но не все. И порой таки надо перезагружаться.

Так вот, у меня создается впечатление, что многие авторы современных мадов то ли боятся перезагрузок, то ли из спортивного интереса создают код, который перезагружать не надо никогда. (Либо перезагрузка там длительный и громоздкий процесс)
1. Да, но зачем они нужны, если от них можно отказаться?

2. В общих чертах это работает так: все скриптовые объекты сохраняются в Berkeley DB. Происходит это постепенно в конце каждого такта и ограничено по времени так, чтоб каждый такт по прежнему был равен 0.25 секунды. Все изменения сохраняются в контексте долгоиграющей транзакции. Когда нечего сохранять, состояние базы на диске полностью соответствует состоянию виртуальной машины и текущая транзакция завершается. Berkeley DB гарантирует что даже при аварийном отключении питания при повторном открытии базы ее состояние будет соответствовать одному из последних коммитов. Не важно какому именно. Т.е. всегда есть шанс, что какие-то изменения не сохранятся, однако есть гарантия, что состояние виртуальной машины (да и мира в целом) будет согласованным (consistent). Например, если ты бросил предмет в комнате, то после выключения/включения питания предмет окажется или на полу, или в инвентаре, но никак не «и там, и там», или «ни там, ни там». Статистика показывает что полное сохранение состояния занимает 3 мс. 10 лет назад, на старом железе сохранение 100,000 долгоживущих объектов было размазано на десяток тактов. Разумеется, если бы в мире тогда был скрипт, который бы это делал каждый такт, транзакция бы никогда не завершилась.
Вторая точно делается на них. Про первую не уверен, не понимаю как это сейчас организовано в Dreamland. И разве эти фишки должны быть обязательно фишками скриптового языка, а не вопросом архитектуры сервера, того как он работает с памятью?
Многочисленность игроков говорят о отличном геймдизайне и интересном геймплее, но не о том, что у них движок самый лучший. На самом деле движок ВОВ очень старый, они его конечно стараются периодически обновлять, но в такой огромной игре вряд ли можно поменять что-то кардинально. При любом изменении будут возникать многочисленные баги, которые замучаешься отлавливать.

Поэтому главное в поддержании работоспособности сервера — профилактика, а именно замена старых деталей по графику, хотя они еще работают.
Они каждую неделю меняют железо что-ли? Но для мадов это не нужно так часто делать.

Есть пример многочисленного семейства LPmud'ов которые годами прекрасно работают без перезагрузок, то есть ребут — это не абсолютная необходимость.
Бегло прочитал, но не заметил там ни первой возможности, ни второй.
  • avatar prool
  • 0
WOW одна из самых многочисленных и самых лучших игр всех времен и народов. И если они что-то делают, к этому надо прислушаться.

Начнем с того, что сервера работают на железе, а железо имеет свойство стареть и умирать. И чаще всего смерть происходит мгновенно и без предупреждения типа деградации сервиса. И не всё можно сдублировать (типа raid массивов). Поэтому главное в поддержании работоспособности сервера — профилактика, а именно замена старых деталей по графику, хотя они еще работают.

И перезагрузка в ВоВ происходит по графику, каждый четверг, об этом знают все и рейды не планируют.
Я в WOW не играю, но вряд ли игроки там ребутам рады. Чему тут радоваться то?

Вот проходишь большую зону с группой игроков полчаса, до конца прохождения еще где-то полчаса надо и тут сообщение приходит: «закругляйтесь, сейчас перезагрузка будет». Игрокам ничего не остается кроме как развести руками и заканчивать игру. А после ребута нет никаких гарантий, что группу снова получиться собрать. Координировать действия нескольких игроков — тот еще гемор.

И мне кажется, что частые плановые перезагрузки — признак того, что с сервером проблемы какие-то. Как минимум утечки памяти или еще что-нибудь. Для чего еще его перезагружать то так часто? Можно сделать так, чтобы ребуты несли минимум неудобств (например, делать их когда онлайн минимален), но не более.
  • avatar prool
  • 0
У меня два вопроса

1. Чо вы все так не любите ребуты? Вот, World of Warcraft перезагружается каждую неделю по графику и все довольны — и игроки и админы

2. А как вообще сохранять состояние машины так, чтобы оно не терялось даже при выдергивании сервера из розетки. Непрерывно писать на диск? Это тоже чревато сбоем файловой системы. И все равно, непрерывно не получится. То, что поменялось в ОЗУ и еще не записалось, потеряется
Извиняюсь, читал, но уже забыл. :)

Но раз уж начал спрашивать, то продолжу это грязное дело. Я конечно не специалист, но вроде бы для этих целей используют https://en.wikipedia.org/wiki/Pike_(programming_language) и https://en.wikipedia.org/wiki/AngelScript. Могли бы они подойти подойти для ваших целей? Или Феня все-равно лучше?
Пруль там выше процитировал мой комментарий, который частично отвечает на этот вопрос. В общих чертах:
— скриптовая виртуальная машина должна сохранять свое состояние между ребутами (включая внезапное выдергивание сервера из розетки),
— должна быть возможность расширять функциональность языка без ребутов.
На тот момент я не знал ни одного языка в котором можно было бы это сделать.
Максимум видели 12, обычно сидит от одного до 5-7. Есть несколько человек новеньких, остальные возвращенцы. Еще не до всех «cтареньких» сумели достучаться. Контакты 10 лет назад были в основном в icq.
Почему создали свой скриптовый язык, а не выбрали один из уже существующих?
Интересно почему выбор остановился на xml, какими соображениями руководствовались?
Поздравляю с отличным стартом! А сколько игроков, это старые «возвращенцы» или есть и новенькие?
Да, в XML. Это репозиторий одного из игроков, который сейчас активно помогает с переводами и картами.
Если есть какие-то вопросы по формату, отвечу.

Практически всё переведено на XML, кроме двух вещей:
* часть профайла игрока где хранится инвентарь и дом.животное
* так называемые дропы — информация о том, в какой комнате сейчас находятся какие предметы и мобы (для сохранения состояния между ребутами)
Наткнулся на это https://github.com/mister-grumbler/dreamland.rocks, арии у вас теперь в xml формате?
Баловство, конечно, но несколько лайков мне поставили. :) Насчет клиента я думаю так, браузеры это мощные комбайны по обработке медиа-файлов и делать веб-клиент только в тексте — это не рациональный путь.
Спасибо, это может пригодиться для меню умений/заклинаний в будущем. Пока еще не совсем ясно, в каком направлении двигать гуи: текстовые кнопки или графика.
Буду держать в курсе о том, как продвигается работа над клиентом.