За кулисами - Авторизация

Обсуждение работы движка сервера. Ваши предложения по улучшению игры. Вопросы по интерфейсу и механике игры

Модератор: Gorlum

Ответить
Gorlum
Император Вселенной
Сообщения: 7315
Зарегистрирован: 13 июн 2009, 15:06
Контактная информация:

За кулисами - Авторизация

Сообщение Gorlum » 29 авг 2015, 23:33

За кулисами - Авторизация

Отдельные игроки на основных серверах и на Блице http://blitz.supernova.ws/ (где сейчас как раз проходит альфа-плейтест нового режима "Рубилово") интересуются, почему замедлилось добавление фишек в СН

tl;dr (если лень читать остальной пост) - Я занят переделкой системы авторизации (регистрация и вход в игру). По идее это должно увеличить онлайн за счёт более легкого входа в игру для новичков. И за счёт того, что теперь переключаться между Вселенными будет легче

Отвечаю - я ОЧЕНЬ упорно работаю над новой системой авторизации. И это длится уже вторую (если не третью - сбился со счёта времени) неделю

Что такое "система авторизации"? Это та часть кода, которая отвечает за вход игроков в игру, регистрацию новых игроков и сброс пароля, если игрок его забыл. На данный момент в игре работает то, что во внутренних документах обзывается как authV3. Или по-простому - "Система авторизации, глобальная версия 3"

Немного истории:
  • "authV0" - это была оригинальная система авторизации в xnova. Сложная. Замороченная. Тупая. Местами - глюкавая;
  • "authV1" - первая попытка причесать систему. Исправлены все найденные глюки, немного упорядочен код;
  • "authV2" - попытка сделать из говна конфетку. Максимально унифицированы части системы, причёсан код (насколько можно причесать велосипед на костылях). С этим уже можно жить - количество жалоб на работу авторизации уменьшилась очень заметно;
  • "authV3" - эксплуатируется в настоящее время. С authV2 можно было "жить" - но не более. Малейшая попытка расширения системы оборачивалась такой жопоболью, что все попытки как-то что-то поменять заканчивались провалами. А была далеко не одна такая попытка! По итогу было решено переписать систему авторизации практически с нуля. В результате пришлось ПОЛНОСТЬЮ переписывать систему НЕСКОЛЬКО РАЗ. Итог, на первый взгляд, выглядел вполне кошерно: модульная объектно-ориентированная система авторизации с возможностью добавить другие системы входа (типа ВКшечки, гугля, фейсбучека - далее везде). Именно эту версию тестировали некоторые игроки (за что им огромный респект) в апреле-мае 2015 года. Фактически, альфа 40-го релиза (40а0.0) началась именно с переделки системы авторизации. Все страдания по authV3 легко проследить от корневого поста: viewtopic.php?f=2&t=3083 Но, в итоге, страдания закончились. Были проведены все возможные тесты (еще раз огромный респект игрокам, которые оказали мне помошь в тестировании!). Отловлены все возможные глюки. authV3 ушла на живые сервера... Казалось бы - всё отлично, всё отлажено, всё работает. Ничто не предвещало беды - была пятница, 13е...
Исторический обзор завершен. В настоящее время я уже несколько недель перерабатываю authV3 в authV4. Зачем я это делаю? Для понимания процесса надо опять открутить время немного назад.

authV3 была введена в эксплуатацию немногим более 3-х месяцев назад. На май 2015 года это была очень хорошая система. Ну, вы понимаете - ООП, расширяемость, упорядоченный код - всё при ней. И так действительно было 3 месяца назад. Проблема (проблема ли?) состоит в том, что за три месяца в моих скиллах случился качественный скачок. За три месяца ООП-шность никуда не делась, как и расширяемость. Только поменялась оценка. В начале августа 2015 мне уже стало очевидно - классы сделаны неоптимально. Расширяемость требует написание больших кусков уникального кода (который больше нигде не будет использоваться).

Самая большая беда случилась с упорядоченностью. Оказалось, что код организован далеко не так оптимально, как мне казалось 3 месяца назад. С моей текущей точки зрения, код authV3 представляет жуткую мешанину, в которой практически невозможно ориентироваться. И это с учётом того, что код писал я же - только три месяца назад! В итоге после тщательного взвешивания всех альтернатив, было принято решение ОПЯТЬ переписать систему авторизации.

Каждое действие должно иметь ЦЕЛЬ. Переписывание кода ради переписывания кода - занятие, конечно, увлекательное, кто бы спорил. Но на количество онлайна оно не влияет, на количества бабла - тоже. А как я уже говорил про РР - если нет ни онлайна, ни бабла - есть более актуальные задачи, которые нужно решить и которые принесут ЛИБО онлайн, ЛИБО бабло. В идеале - и то, и то. Поэтому сейчас перед тем, как что-то делать, я стараюсь предсказать возможный профит от своей работы - в виде увеличение онлайна или в виде увеличения прихода от игроков.

Глобальная цель переделки системы авторизации - облегчить новым игрокам регистрацию и вход в игру. Плюс - возможность лёгкого переключения игроков между Вселенными (что, кстати, даст буст и режиму "Рубилово"). Если более детально разложить цели, то получится следующее:
  • Отвязка данных входа в игру (далее - "аккаунт") от собственно игровых данных (далее - "игрок"). Сейчас они свалены в одну кучу. Запись игрока кроме игровых данных (имя игрока, настройки, статусы сообщений, время обновления очереди итд) содержит и данные о его аккаунте (имя АККАУНТА - по нормальным делам оно должно быть отличным от имени аккаунта, пароль, системный данные для контроля анти-мультиковой системы итд). Разделение этих данных по сущностям "Игрок" и "Аккаунт" позволит заметно снизить частоту обращений к базе данных игры, уменьшить количество используемой памяти итд, итп. Не говоря о том, что разделение сущностей в рамках ООП сильно облегчит дальнейшую разработку
  • Как следствие предыдущего пункта, можно будет реализовать множество интересных вещей:
    • Поскольку аккаунт теперь не привязан к игроку, то один аккаунт потенциально может управлять несколькими игроками. Это открывает широчайшие перспективы:
      • Самое основное - энфорсинг правил ухода за аккаунтом. С новой системой можно будет передать свой аккаунт для ухода за ним на случай кратковременного отсутствия! Плюсы - налицо:
        • Не надо уходить в отпуск и затем неделю дергаться - а ВДРУГ опять придется бросить игру, а в отпуск не уйдёшь?
        • Защита от подсистемы чистки аккаунтов;
        • РЕСУРСЫ БУДУТ ПРОДОЛЖАТЬ КАПАТЬ!!! Ты не за компом - а ресы капают!
        • Облегчение поиска нелегальных мультиков;
        • ИТД, ИТП. Много чего хорошего следует из этого пункта
      • Платные легальные мультики. Сразу скажу - я пока ДУМАЮ над этой идеей. Всё нижеизлоенное - только черновик. Так сказать - пре-альфа. Всё еще может кардинально поменятся. Равно как и легмультики могут так и не появиться в игре
        • За смешную сумму в 500.000 ТМ (или ММ? надо думать. Но не меньше 500к ТМ) игрок может обзавестись легальным мультиаккаунтом. NB: Я не вижу ничего криминального в мультиаккаунтах, пока игрок за них платит;
        • Совершенно точно, мультиаккаунт не сможет быть аффилейтом ни одного из игроков. Т.е. партнёрская программа на легмультиков не распространяется;
        • Будут ли действовать на легмультиков ограничения при игре с одного IP? Пока не знаю. Склоняюсь к тому, что "будут";
        • Будут ли помечаться мультиаккаунты спецзначком? Точно - не будет известно, ЧЕЙ это мультиаккаунт. Сами легмультики скорее всего будут помечаться спецзначком;
  • Не обязательно брать сведения об "аккаунте" из базы данных сервера. Фактически, при дополнительном кодировании это может быть ЛЮБАЯ информация из ЛЮБОГО источника - главное, что бы основные её части можно было выразить в терминах "аккаунта". Что это дает?
    • Самым большим удобством для игроков станет "Единый Аккаунт" (далее ЕА - не путать с "Electronic Arts"). И чем же оно будет удобно?
      • Один логин-пароль на ВСЕ ИГРОВЫЕ ВСЕЛЕННЫЕ! Т.е. зайдя в игру один раз на альфе-бете-гамме-дельте-итд - не надо будет каждый раз регистрироваться в новых Вселенных!
      • И при этом - можно будет выбрать РАЗНЫЕ ИМЕНА ДЛЯ ИГРОКА при одном и том же имени аккаунта! Т.е. если игрок известен как "СуперИгрок" на Альфе, то на Гамме он сможет выбрать себе другое имя игрока. И играть в другой Вселенной совершенно иначе, не таская за собой нагрузку старого имени. Не то, что бы это было чем-то СуперНовым - и сейчас игрок может зарегистрироваться в другой Вселенной под иным именем и рвать всех там в отрыве от производства... Но настоящую силу данная фишка обретет с учётом следующего пункта...
      • ОБЩАЯ МЕТАМАТЕРИЯ ДЛЯ ВСЕХ СЕРВЕРОВ! Покупая ММ в одной Вселенной, она становится доступна сразу ВО ВСЕХ! Тут даже у меня фантазия отказывает в попытке охватить весь спектр использования данной фишки! Спецсервера типа Блица могут иметь дополнительные ограничения на использования общей ММ. И нет - ТМ не будет общей ни в каком из вариантов;
    • Но еще более офигенной фичей будет возможность залогиниться по существуюшим аккаунтом в различных соцсетях типа ВК, Гугля, Одноклассников, ЖЖ итд (список возможных внешних авторизаторов пока в разработке). Не надо будет больше вводить имя аккаунта, емейл и дважды вводить пароль. Вход в игру станет лёгким и простым. Это не только уменьшит порог вхождения для новых игроков, но и немного облегчит жизнь старым игрокам;
      • Не говоря уже о том, что это даст возможность игре выйти на другие площадки, которые требуют реализацию своих собственных систем авторизации. А это значит - больше игроков, больше онлайн. И - более интересную игру всем игрокам - от топов до новичков
  • "Более лучший" код. Спустя всего три месяца код authV3 перестал меня удовлетворять от слова "совсем". Это, на самом деле хорошо. Это показывает мой рост, как разработчика. Да, можно было бы сказать "а чего ты сразу не стал писать хороший код", но это всё - в пользу бедных. Это так называемое "пост-знание". Да, если бы я 3 месяца назад обладал теми же знаниями, что обладаю сейчас, я бы написал код authV3 совершенно иначе. Но я ими не обладал - поэтому написал наилучший код, исходя из своих знаний 3 месяца назад. И да - "более лучший" код - это не просто абстракция. Это - уменьшение издержек в будущем на его поддержку. Это - лучшая расширяемость. Как следствие - меньше времени надо тратить на поддержку "более лучшего" кода. И как следствие второго порядка - больше времени на совершенствование остальных подсистем игры.
Задачи, которые я поставил перед собой, несомненно очень амбициозны. Реализация общей аутентификации внешних пользователей по протоколу OAuth 2.0 хотя бы даже для ВКонтактика откроет широчайщие перспективы для дальнейшей интеграции - даже если спустя 3 месяца меня ОПЯТЬ перестанет удовлетворять текущий код.

Однако путь к этому благолепию - сложен и тернист. Я уже знаю, что пусть в тысячу ли начинается с одного шага. Поэтому жылы рвать особо не буду. Ну, не считая того, что 2+ недели уже потрачено на новую версию авторизации - дальше рвать не буду. Хотя...

Тут ведь какой нюанс? Можно сделать так:
  • authV4 - отвязка "аккаунта" от "игрока";
  • authV5 - Единый Логин
  • authV5.1 - Единая ММ
  • authV6 - подключение внешней OAuth 2.0 авторизации на примере ВКонтактика
  • authV6.1 - подключение других авторизаций на основе OAuth 2.0
Но такое "поступательное" развитие чревато своими сложностями.
Во-первых - каждый этап надо будет массово тестировать. Т.е. до внедрения, скажем, логина по аккаунту Гугля, игрокам прийдется выдержать 5 тестирований и 5 итераций системы авторизации. Уверяю - каждая будет со своими уникальными глюками плюс будет вскрывать новые проблемы, незамеченные на предыдущих этапах. Что потенциально может вылиться в переписывание системы авториазации С НУЛЯ и НА КАЖДОМ ЭТАПЕ!

А можно всё попытаться упихннуть в authV4. Это, конечно, займет гораздо больше времени. Зато как плюс - игрокам прийдется тестировать только одну итерацию и мириться с глюками только одной итерации. Но как минус - тестирование нужно будет провести особо тяжелое, да и глюки обещают быть особо жесточайшими и сложными в обнаружении.

Не волнуйтесь - это не выбор игроков. Я сам в процессе разработки authV4 освобожу вас от тяжелого бремени выбора и сделаю его за вас. Но игроки должны быть готовы к тому, что их ожидает.

Итак, я потратил 4 часа на эту графоманию. Казалось бы - можно было бы легко это время потратить на написание authV4. А ВОТ НИХУЯ! Я за две+ недели уже настолько охуел от режима "хуярить authV4 16/7", что мне нужна какая-то разгрузка. Бесспорно - я мог бы эти 4 часа потратить с большей пользой. Посмотреть пару фильмов. Или 6-8 серий сериала/аниме. Или поиграть в какую-нибудь игрушку (благо на аккаунте в Стиме пылятся буквально десятки игр, в которых стоит поиграть). Но я решил потратить это время на информирование игроков о текущем положении дел. Я думаю, это стоит благодарности в виде покупки ММ (тем более, что сейчас курс рубля зафиксирован на отметке 60 рублей и вдобавок - идёт скида ОТ 15%. Чем больше объем покупки - тем скидка больше).
ВНИМАНИЕ! Администрация в личную переписку не вступает, рукописи не возвращает и не рецензирует!
* Если у меня слишком хорошее настроение - я хожу почитать чат *

Ответить

Вернуться в «Движок сервера: жалобы и предложения»