Перейти к содержимому
eu_tomat

Банковская сеть сервера с публичным доступом на базе OpenComputers

Рекомендуемые сообщения

Предисловие

 

Здравствуйте, друзья!

 

Основная активность сообщества переместилась в чатики дискорда. Именно в них предпочитают задавать свои вопросы начинающие программисты. Кроме этого чаты удобны и для мозгового штурма задач с неочевидным на первый взгляд решением. Такой режим обсуждения позволяет не только быстро наполнить котёл сырых идей, но и так же быстро сварить их, отсеяв явно неработоспособные и выбрав более-менее применимые.

 

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

 

Сразу оговорюсь, что в этой теме я буду излагать свою субъективную точку зрения. С самого начала обсуждения у меня имелось  представление о допустимости тех или иных решений, и оно по большому  счёту не изменилось. Изменения коснулись лишь аргументации. Но некоторые из идей показались мне любопытными и достойными упоминания в этой теме.

 

Задача

 

В этой теме я предлагаю обсудить оптимальную архитектуру банковской сети игрового сервера. Банк принадлежит администратору, он же управляет сетью, но сеть имеет публичный API с доступом в неё других игроков для проведения банковских операций.

 

Во время мозгового штурма в дискорде были рассмотрены все варианты  обмена данными клиентов с банковской системой: проводные сетевые платы, беспроводные, связанные, интернет-платы. Также были рассмотрены некоторые их сочетания. Кроме того прозвучали предложения дописать моды, аддоны и серверные плагины.

 

Для начала я перечислю забракованные варианты с причиной отказа от них. Возможно, я забыл какие-то из них, но перечитывать несколько тысяч строк обсуждения в чате я не буду. Если чья-то идея оказалась незаслуженно забытой, я прошу других участников описать её отдельным постом.

 

Интернет-платы были отброшены разработчиком банка ради сохранения игровой атмосферы. Коммуникация компьютеров игроков с банком должна осуществляться исключительно с помощью игровых механик без использования сервисов за пределами игры.

 

Беспроводные сетевые платы являются ненадёжным звеном системы. Ограниченная глубина очереди событий в OpenComputers, а так же низкая скорость их извлечения приводят к тому, что несколько компьютеров, генерирующих спам на открытый порт, могут спровоцировать потерю пакетов сервером.

 

В качестве решения предлагалось использовать промежуточные фаерволлы, но они подвержены спаму точно так же, как и основной сервер. На мой взгляд, не имеет особого значения, будет ли пакет потерян на фаерволле или же на самом сервере.

 

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

 

Эта проблема, возможно, и не сыграла бы особой роли при наличии возможности быстро вычислить злоумышленника. В частных случаях это возможно. Но для общего случая такой возможности обнаружено не было.

 

Проводные сетевые платы совершенно неприменимы для публичной сети. Такие сети потребуется защищать приватом, растянувшимся по всему серверу. В противном случае их можно легко разрушить, или подключить любого нелегального абонента. А найти его будет не проще чем в беспроводных сетях.

 

Связанные платы я считаю наилучшим вариантом. В основе схемы лежит архитектура сети OpenNet, но без последнего слоя, реализованного на беспроводных платах. Выше я объяснил, почему считаю беспроводные платы неприменимыми для банковской сети.

 

Изначальный вариант для меня выглядел так: В админпривате находится банковский сервер, общающийся с сетью мостов-фаерволлов с помощью обычной проводной сети. Каждый такой мост общается с единственным клиентом через пару связанных плат. Одна плата работает на стороне моста. Вторая выдаётся клиенту банка. Можно сказать, это его пропуск в систему и удостоверение личности. Если эта плата попадёт в чужие руки, игрок всё равно будет нести ответственность как за финансовые потери, так и за возможный спам с этой платы. Правда, этот спам не повредит банку, т. к. он приведёт лишь к пропуску пакетов, идущих от самого спамера, но не от добросовестных игроков.

 

Но разработчику банка в такой архитектуре сети не понравилась её громоздкость.

 

Так появилась идея админсредствами сделать пачку связанных плат с одинаковым адресом, получив соединение всех узлов со всеми. Но тогда возник вопрос, в каком устройстве будут размещаться эти платы. Просто выдать эти платы пользователям системы нельзя, т. к. все они имеют одинаковый адрес, и в случае спама вычислить его авторство будет почти невозможно. Можно было бы разместить их в админприватах, но тогда снова встаёт вопрос об организации последней мили. Да и проблема громоздскости не решается. Просто часть устройств переносятся из основного банка в его филиалы.

 

Для решения этой проблемы появилась идея размещать устройства непосредственно в приватах пользвователей, но с ограничением их доступа к содержимому самих устройств. Компьютеры на эту роль не подходят, т. к. позволяют извлечь из них любой из компонентов и полностью пересобрать компьютер. Робот, да ещё и установленный от имени администратора, может принести столько разрушений, что этот вариант следует рассмотреть, когда не удалось применить более простые. Остаётся микроконтроллер. Но возникают две проблемы. Во-первых, микроконтроллер тоже потребуется защитить от разборки игроком. А во-вторых, что более важно, система остаётся такой же громоздкой, просто её части переносятся в приваты клиентов, что затрудняет её контроль. То есть, это решение не позволяет исправить заявленную проблему, но систему усложняет.

 

Тем не менее, такая идея мне кажется любопытной, и я решил сохранить её для истории. Возможно, она натолкнёт читателей этого поста но более интересные решения. Были и другие идеи, но я не помню какая из них была бы достойна упоминания.

 

Написание модов, аддонов и плагинов было некоторым выходом за рамки заявленной темы. Практически все предложенные идеи предлагали так или иначе изменить привычные игровые механики.

 

@Fingercomp предложил наиболее перспективную, на мой взгляд, идею: добавить в игру блок маршрутизатора-фаерволла, который на уровне мода отсекал бы пакеты спамеров. Развивая эту мысль, я предложил использовать модифицированные сетевые платы, которые бы помещали в очередь событий лишь пакеты, принятые с адресов из белого списка.

 

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

 

Во-первых, можно было бы добавить разновидности плат, доступные как игровыми способами, так и исключительно в творческом режиме. Для плат игроков можно выставить серьёзные ограничения, которые при необходимости можно было бы изменить в файле настроек мода.

 

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

 

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

 

Послесловие

 

Ещё раз напомню, что я выразил лишь свою субъективную точку зрения. Извините, если я забыл упомянуть какую-то значимую идею, исказил её или же не упомянул её автора. Сообщество хорошо справилось с набросом идей. Я же был сосредоточен на критике этих идей и фильтрации защищающих их аргументов. Иначе бы у меня просто лопнул мозг.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, eu_tomat сказал:

Изначальный вариант для меня выглядел так: В админпривате находится банковский сервер, общающийся с сетью мостов-фаерволлов с помощью обычной проводной сети. Каждый такой мост общается с единственным клиентом через пару связанных плат. Одна плата работает на стороне моста. Вторая выдаётся клиенту банка. Можно сказать, это его пропуск в систему и удостоверение личности. Если эта плата попадёт в чужие руки, игрок всё равно будет нести ответственность как за финансовые потери, так и за возможный спам с этой платы. Правда, этот спам не повредит банку, т. к. он приведёт лишь к пропуску пакетов, идущих от самого спамера, но не от добросовестных игроков.

Как бы этот способ мне не нравился бы, он самый простой и самый лучший. Правда нужно админа который будет выдавать "банковские" карты пользователям

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
24 минуты назад, Wolframoviy сказал:

Как бы этот способ мне не нравился бы, он самый простой и самый лучший. Правда нужно админа который будет выдавать "банковские" карты пользователям

Я думаю, тут нужен не админ, а программист. Если новых предложений по архитектуре сети не поступит, составим схему реализации. Предварительно я вижу её таким образом:

  • В банке имеется компьютер-банкомат. Банкомат при взаимодействии с ним игрока выполняет его идентификацию. Система ведёт базу данных игроков и точно знает, кому из них выдана карта.
  • С записью об этой карте связана запись о данных персонального сетевого моста этого игрока.
  • При запросе игроком карты через банкомат в машинном зале генерируется персональный сетевой мост этого игрока, включая одну из связанных плат, а в стоящем рядом раздатчике создаётся вторая связанная плата, которая позже выбрасывается игроку.
  • Для предотвращения случаев хищения карты неожиданно появившимися игроками рядом с банкоматом она потребует дополнительной активации через тот же банкомат позже, когда игрок будет уверен, что карта доставлена в его дом и находится в безопасности.
  • В случае утери принадлежащей игроку связанной платы тот может аннулировать её или же создать новую. В этом случае персональный сетевой мост также должен быть деактивирован или перегенерирован с новым адресом.
  • Новую карту игрок может получить не чаще одного раза в неделю или в месяц.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А если создать мод который условно добавляет для игроков "банковскую карту" которую можно скрафтить или купить на спавне и в которой будут методы а ля bank.getbalanse() 

И креативный блок администратора банка который можно подключить к серверу и он всем этим будет управлять

 

Таким образом мы решаем проблему с хакерами которые ломают порты, с дальностью, со спамом да и плюсом игроки смогут делать свой интерфейс. А если человек не умеет или не хочет писать код - давать реад онли дискету с простенькой програмкой

 

Остаётся одна проблема которая есть и в варианте с соединёнными платами - мы теряем слот для карты, а с планшетом это доводи критично ведь вытаскивать её не получится

 

Изменено пользователем Bumer_32

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Bumer_32 сказал:

А если создать мод который условно добавляет для игроков "банковскую карту" которую можно скрафтить или купить на спавне и в которой будут методы а ля bank.getbalanse() 

И креативный блок администратора банка который можно подключить к серверу и он всем этим будет управлять

 

Таким образом мы решаем проблему с хакерами которые ломают порты, с дальностью, со спамом да и плюсом игроки смогут делать свой интерфейс. А если человек не умеет или не хочет писать код - давать реад онли дискету с простенькой програмкой

 

Остаётся одна проблема которая есть и в варианте с соединёнными платами - мы теряем слот для карты, а с планшетом это доводи критично ведь вытаскивать её не получится

 

Я вообще Java не знаю. Так что это надо искать добровольца. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а ты C# не знаешь? java вроде на C# очень похож

а как на майн мод делать нужно гуглить, хотя я гуглил вроде не так сложно я даже чёт понял

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
16 часов назад, Bumer_32 сказал:

А если создать мод который условно добавляет для игроков "банковскую карту" которую можно скрафтить или купить на спавне и в которой будут методы а ля bank.getbalanse() 

И креативный блок администратора банка который можно подключить к серверу и он всем этим будет управлять

А чем эти банковские карты будут лучше беспроводных плат, фильтрующих сообщения по белому списку? Игроки будут иногда терять свои платы, и тогда потерянные платы потребуют блокировки. Иначе мы снова вернёмся к проблеме спама с похищенных плат.

 

Даже если ты предлагаешь расширить идею фильтрующих сетевых плат, то какой смысл добавлять им специальные функции для работы с банком, если уже имеются стандартные возможности передачи и приёма сообщений? Что это даст?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Скриншот обсуждения в дискорде.

Скрытый текст

 

image.pngimage.pngimage.png

 

Изменено пользователем eu_tomat

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
20 часов назад, Wolframoviy сказал:

Скриншот обсуждения в дискорде...

Это оффтопик. Но раз ты считаешь, что он заслуживает внимания, я отвечу.

 

Ранее от использования интернет-платы ты отказался сам:

В 26.11.2022 в 20:47, eu_tomat сказал:

Интернет-платы были отброшены разработчиком банка ради сохранения игровой атмосферы. Коммуникация компьютеров игроков с банком должна осуществляться исключительно с помощью игровых механик без использования сервисов за пределами игры.

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, eu_tomat сказал:

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

Всё же электронная валюта позволяет совершать сделки на расстоянии по типу "я тебе деньги, а ты мне информацию". Также с электронной валютой меньше шанс на то что деньги не дойдут до получателя(во время обмена валюту подберёт другой игрок)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...