Dedicated-Server.RU  


Ответ
 
Опции темы Опции просмотра
Старый 15.03.2007, 08:13   #1
Практически Админ
 
Регистрация: 13.06.2004
Адрес: Кишинёв
Сообщений: 271
Сказал спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию AmxBans со скоростью света (оптимизация)

:) недавно в очередной раз мою голову с дружественным визитом посетила мысль. а какого фига мы, простите, грузим так SQL? дело в том, что всякий коннект игрока к серверу = 1 запрос к БД. (а в некоторых случаях даже 2!). вообще -- это не рационально и очень много. а если ещё выстраивается очередь долбящихся -- так и подавно.

наверное вы заметили разницу между обычными банами сервера, и amxbans банами.
- в первом случае (addip 1.2.3.4) при попытке подключиться к серверу вас выкидывает _моментально_.
- в случае же с amxbans (amx_banip 1.2.3.4) -- вас пускает на серв, появляется мини индикатор процесса входа в игру -- окошко "Loaging ...":



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

всё просто. в первом случае баны хранятся непосредственно в памяти сервера, всё происходит моментально. детект IP, сверка с банлистом в памяти, кик. с MYSQL же, запросы идут гораздо дольше, при этом мало того, что нагружая mysql базу, так ещё и слегка сбивая пользователей с толку: вроде заходит, но и выкидывает. причём с разными интервалами, так, что у игрока появляется надежда каким-то образом пробраться на серв и он некоторое время ещё долбится на входе (случается такое видеть в логах).

решение. правильно) перенести банлист в память сервера. например куда-нить рядом с данными об админах. ведь, попробуйте зайти на сервер с ником админа (без пароля) также моментально выкидывает с надписью "You have no entry to this server." или чё-т в таком духе. самое простое -- это сдублировать функцию amx_reloadadmins, видоизменив её, чтобы считывала айпишники из таблицы банов и прописывать каждому ипу флаг, скажем, "x" ну и отдельно написать мини плагинчик, расположив его выше amxbans с функцией, которая при коннекте товарища с флагом "х" будет его кикать с соообщением "вы забанены, дацвиданя", и отключаем подобный запрос в самом amxbans, так что нагрузка с бд колоссально спадает. (ну и добавляем в код функции бана amxbans, сразу после того, как игрок забанен и инфа о нём добавлена в бд: server_cmd amx_reloadamins -- это обновит банлист в памяти. так что только что выставленный наш "быстрый" бан тут же вступит в силу.

единственная сложность -- баны будут истекать в большинстве случаев только после смены карты. неудобно, если у вас много коротких банов. но и тут можно подкрутить шарниры. например при бане на 15 мин. ставить set_task через 15 мин. server_cmd amx_reloadadmins.

ещё что плохо, если у вас несколько серверов, то бан, выставленный на одном сервере на других появится только после смены на них карты. но, насколько я знаю, есть работающие решения в этой области, позволяющие посылать команду с одного серва (через master-server) для выполнения на другом(их).

Mercury добавил [date]1173935646[/date]:
в общем что. это, ессено, пока в виде идеи, опубликованной, как грится, на суд коллег, авось кого подтолкнёт на какие-то мысли, ещё более продвинутые)

за неимением мыслей конкретно по плагину, думаю, будет совершенно не лишним обсудить тут каким образом лучше, рациональней и изящней отсылать команду на amx_reloadadmins другим серверам.

з.ы.: amx_reloadadmins приведён лишь в пример, всё это при надобности легко видоизменяется и выделяется в отдельную функцию, без мешанины с аккаунтами админов.

заранее всем спасибо за внимание и участие.
Mercury вне форума   Ответить с цитированием
Старый 15.03.2007, 11:27   #2
с доступом к форуму безопасности
 
Регистрация: 22.04.2005
Адрес: Киев
Сообщений: 85
Сказал спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

ИМХО идея не очень понравилась - прелесть amxbans как раз в том что баны хранятся в базе, которая используется всеми серверами, а то что долго запросы идут так это проблема не amxbans, а кривости вашего mysql - у меня банит четко до того как человек зайдет на сервер.

зы: Если у вас забаненного человека пускало на сервер значит с mysql сервером у тебя серъезные проблемы (то есть ни на один запрос по игроку ответа не поступило). У мну был такой косяк, когда mysql сервак криво стоял на виндовой отдельной машине. Перенес все на линуховую тачку, как рукой сняло.

ззы: Хотя конечно идея реальная и вполне осуществимая, другой вопрос - надо ли оно кому-нить кроме тебя?

Например спроси у Михея - у него стоят два сервера удаленных - один в Киеве, другой в Чернигове, база amxbans живет на одном из серверов, при этом на другом сервере банит более чем нормально, а что уже говорить про машины, в которых и сервер cs и сервер mysql живут вместе.
__________________
зовите меня просто Пихто Макарыч
http://pcw.kiev.ua - the power of skill
http://devices.kiev.ua - LanManager - новое слово в администрировании локальных сетей
Дедуля вне форума   Ответить с цитированием
Старый 15.03.2007, 11:31   #3
DS.RU Moderator
 
Регистрация: 26.03.2004
Адрес: Москва
Сообщений: 2,751
Сказал спасибо: 9
Поблагодарили 93 раз(а) в 39 сообщениях
По умолчанию

Могу предложить только 1-но не используйте amxbans, на этом оптимизацию можно и закончить.
Ваши идеи нереальны.
амх проверяет игрока только на 50 % конекта к серверу.
__________________
© Специалист по выносу мозга...
© [DEAGLE.RU] - Комитет по борьбе с читерами.
------------------------------------------------
Клиент + update cs1.6 V43
Блокируем сегменты сети по маскам, также бан подсетей MTU-INTEL через плагин AMXX
Консольные команды CS Source и HL2
Да, был знаком с DeadMoroz в 1999 и что ?
Да, ломали защиту Sierra в 1999 и выпустили первого клиента CS и что ?
Да, был знаком с MaddoxEmporio и что ?
Да, делал сборки и патчи на CS и что ?
western вне форума   Ответить с цитированием
Старый 15.03.2007, 21:21   #4
Практически Админ
 
Регистрация: 13.06.2004
Адрес: Кишинёв
Сообщений: 271
Сказал спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Для Дедуля : дык. моя идея и не подразумевает делить базу. идея лишь призывает сократить в тыщи раз нерациональные обращения к бд. т.е. функциональность amxbans _полностью_ сохранится. обращения к бд останутся лишь:

1. при бане (с любого серва. нерешено.)
2. при смене карты (команда выполняется при старте, т.е. решено.)

вот например (к слову насчёт надобности). у меня 12+ серверов кс (не верю, что только у меня). в день коннектов десятки тыщ. банов - ну до 10-20 точно. получаем 1/1000. + баны действуют моментально. вообще, тут стоит оговориться, что, да, и с MYSQL они реагируют довольно быстро, то, что я описал, что игроки иногда проходят в игру, это таки во времена лагов, сетевых или сервера бд. такое не постоянно, но тем не менее случается, и от этого у нас будет защита. да и в любом случае из памяти баны будут работать ещё быстрее. т.е. прямо таки моментально. окошко loading даже не будет успевать показываться.

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

и вот кстати по поводу корректного истечения бана придумалась хитрость. при загрузке бана в память сверяем, если оставшееся время сидеть в бане меньше, чем mp_timelimit то set_task("оставшееся время", "снять бан"), что снимет бан через указанный промежуток времени. т.к скрипт будет работать на всех серверах, соответственно бан будет одновременно снят на всех серверах.

Для western : вы ошибаетесь по поводу нереальности идеи. для полной реализации возможно понадобится сторонний софт, а-ля webmod.
по поводу 50%. попробуйте зарезервировать ник у себя на сервере и войти под ним (без пароля). вас кикнет моментально. амх. так, что окошко "loading" только успеет промелькнуть. и ники эти как раз сидят в памяти сервера постоянно, подгружаясь при смене карты автоматом.

в любом случае, спасибо за высказанные мнения.
Mercury вне форума   Ответить с цитированием
Старый 15.03.2007, 21:38   #5
Приемная комиссия DS.RU
 
Регистрация: 25.01.2004
Адрес: Тирасполь
Сообщений: 3,174
Сказал спасибо: 1
Поблагодарили 1 раз в 1 сообщении
По умолчанию

Серверов 8, на 5 или 6 стоит Вар3мод с сохранением експы (на каждый сервер отдельная база). В каждой базе от 5 до 15 тысяч записей. При конекте каждого естественно сервер делает селект к базу чтобы узнать сколько игроков.
При выходе или смене карты апдейт (инсерт).
База расположено на отдельной машине за 2000 часов сервера MySQL сьел около часа (стоит добавить что к этой же базе привязана статистика сервер Анриал турнамент, и сервер WOWEmu).

Да и всё это работает под ненавистной и призераемой многими - виндой.

Так что Mercury, не там ишешь проблему.
Баны можно и на файерволе делать :).
Если под линух - то проблем нету там всё имеется, если под винду, то можно поставить wipfw, хороший консольный файервол.
__________________
3 x PentiumD 930 (2x3.0), 2 GB, 2xSATA 160GB, (Win2K3, FC12)
1 x Xeon 3.0 HT, 4 GB, 2xUltraSCSI 146 GB, Centos 5.2
1 x Xeon 5450, 6GB, 2xSAS 145GB, Win2k3
1 x Xeon 5450 х 2, 4GB, 2xSAS 145GB, FC13
15xCS 1.6, 1хDoD 1.3, Half-Life, CSS, TF-2, 3хDoD Source, 2хUnreal Tournament, WoW Mangos, PVPGN + D2, Quake 3, 2хCOD4, MUOnline, web
В прошлом: CS 1.5, DOD 1.1, WOWEmu, S.T.A.L.K.E.R, IL2, LineAge-2 C4OFF, NFS:U, Crysis Wars, GTA SA:MP, BF-2, Left4Dead
http://gamecenter.idknet.com
Консультации по icq: настройка, статистика, защита от читерства... Недорого.
Dead-Master вне форума   Ответить с цитированием
Старый 16.03.2007, 04:03   #6
DS.RU Moderator
 
Регистрация: 26.03.2004
Адрес: Москва
Сообщений: 2,751
Сказал спасибо: 9
Поблагодарили 93 раз(а) в 39 сообщениях
По умолчанию

Цитата:
по поводу 50%. попробуйте зарезервировать ник у себя на сервере и войти под ним (без пароля). вас кикнет моментально. амх. так, что окошко "loading" только успеет промелькнуть. и ники эти как раз сидят в памяти сервера постоянно, подгружаясь при смене карты автоматом.
Те самые 2 секунды которые как вы говорите появляется окно и есть тот самый ненависный лаг для сервера при конекте игрока, досих пор народ мучается с плагинами реконект и никак толком не сделает нормальную версию (хотя тут понятно без коментов что такой плагин как реконект нада делать модулем dll и подключать его непосредственно к метамоду, только тогда все будет происходить вовремя)
Работу всех плагинов подключенных к AMX можно оценить по цепочке и затраченное время на каждой кухне.
server -> metamod -> amxx -> modules -> plugins как видите плагины в самом конце, хотя самыми последними идут конфиги.
Я думаю пример понятен.

Цитата:
Да и всё это работает под ненавистной и призераемой многими - виндой.
Ну незнаю кто это ляпнул но он был неправ, думайте как хотите но я считаю использование линукса для игровых серверов "ИЗВРАЩЕНИЕ", можете меня поправить.
__________________
© Специалист по выносу мозга...
© [DEAGLE.RU] - Комитет по борьбе с читерами.
------------------------------------------------
Клиент + update cs1.6 V43
Блокируем сегменты сети по маскам, также бан подсетей MTU-INTEL через плагин AMXX
Консольные команды CS Source и HL2
Да, был знаком с DeadMoroz в 1999 и что ?
Да, ломали защиту Sierra в 1999 и выпустили первого клиента CS и что ?
Да, был знаком с MaddoxEmporio и что ?
Да, делал сборки и патчи на CS и что ?
western вне форума   Ответить с цитированием
Старый 16.03.2007, 05:31   #7
Практически Админ
 
Регистрация: 13.06.2004
Адрес: Кишинёв
Сообщений: 271
Сказал спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Для western : вы не попробовали. а если бы попробовали, то убедились бы, что амх кикает за долю секунды. (позасекал ~0.3sec, я думаю можно назвать это "моментально"?) странно откуда у вас "2 секунды"? у меня amxbans кикает через ~5 sec. т.е. выходит в ~15 раз дольше.

оо. есть же логи!
Цитата:
L 03/16/2007 - 03:27:36: "mercury<27><><>" connected, address "x.x.x.x:27005"
L 03/16/2007 - 03:27:40: "mercury<27><><>" entered the game
L 03/16/2007 - 03:27:41: Kick: "mercury<27><><>" was kicked by "Console" (message " Banned by amxbans")
L 03/16/2007 - 03:27:41: "mercury<27><><>" disconnected
Цитата:
L 03/16/2007 - 03:28:05: "mercury<28><><>" connected, address "x.x.x.x:27005"
L 03/16/2007 - 03:28:05: Kick: "mercury<28><><>" was kicked by "Console" (message ""Reserved nick"")
при amxbans происходят всякие ненужности типа "entered the game". то, о чём я и говорил: игрок начинает входить в игру, хотя делать ему там нечего))

Для Dead-Master : мне кажется будет совершенно не лишним изучить возможность решения этой проблемы) несмотря на то, что, она в большинстве случаев _не_критична_. это есть лишь оптимизация (о чём я сразу предупредил в заголовке). это как код. некоторые пишут как попало, главное, чтоб работало. а некоторые терпеть не могут "кривой" код, полагая, что "code is poetry" )
Mercury вне форума   Ответить с цитированием
Старый 16.03.2007, 08:06   #8
с доступом к форуму безопасности
 
Регистрация: 22.04.2005
Адрес: Киев
Сообщений: 85
Сказал спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Цитата:
Это писал Дедуля
У мну был такой косяк, когда mysql сервак криво стоял на виндовой отдельной машине. Перенес все на линуховую тачку, как рукой сняло.
Вероятно эта фраза послужила толчком :) но вобщем-то я на винду тут практически не сетовал, просто mysql стал криво (благодаря кривости моих рук) и поставить его ровно не представлялось никакой возможности - кроме как реинстал винды + реинстал mysql. По поводу серверов на Линухе мог бы поспорить, но не буду - тема не об этом.

Mercury - собственно если есть необходимость в данном апдейте амхбансов и есть знания то сам бог велел - вперед :) а люди оценят
__________________
зовите меня просто Пихто Макарыч
http://pcw.kiev.ua - the power of skill
http://devices.kiev.ua - LanManager - новое слово в администрировании локальных сетей
Дедуля вне форума   Ответить с цитированием
Старый 16.03.2007, 08:26   #9
с доступом к форуму безопасности
 
Регистрация: 03.05.2002
Адрес: Новосибирск
Сообщений: 442
Сказал спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию Re: AmxBans со скоростью света (оптимизация)

Цитата:
Это писал Mercury
за неимением мыслей конкретно по плагину, думаю, будет совершенно не лишним обсудить тут каким образом лучше, рациональней и изящней отсылать команду на amx_reloadadmins другим серверам.
смотри в сторону sockets.inc... список серверов можно поместить в ini-файл или, опять же, держать в БД...

P.S. при огромном кол-ве коннектов к серверу MySQL производительность падает... это факт... в большенстве крупных вэб-проектов, когда обращение к БД высоко, то используют уже не MySQL, а что-нить покруче... к примеру PostgreSQL... поддерживаю идею Mercury... только тут есть и обратная сторона... если банов много, то подобный список будет отжирать много памяти на серваке... я точно не знаю, как АМХХ размещает переменные, статически или динамически... т.ч. тут надо проводить эксперементы...

SHELLDER добавил [date]1174023435[/date]:
Для Mercury : я знаю, есть работающие решения в этой области, позволяющие посылать команду с одного серва (через master-server) для выполнения на другом(их).

с этого места можно подробнее? ссылки например
SHELLDER вне форума   Ответить с цитированием
Старый 16.03.2007, 09:31   #10
Просто вредный эксперт
 
Регистрация: 20.12.2004
Адрес: Ялта
Сообщений: 4,199
Сказал спасибо: 35
Поблагодарили 284 раз(а) в 179 сообщениях
По умолчанию

ИМХО не надо так извращаться, берем пример с иркботов.
бан, записался куда в базу, поставился на сервере, если менее 2 часов, то на то время которое назначено. При более 2 часов бан ставим на сервере все равно на 2 часа.
При конекте забаненного игрока происходит только один запрос и система ставит обычный бан на сервере. Все )
__________________
web developer, системный администратор и т.д.
Люблю помогать ;)
max_rip вне форума   Ответить с цитированием
Старый 16.03.2007, 10:12   #11
Приемная комиссия DS.RU
 
Регистрация: 25.01.2004
Адрес: Тирасполь
Сообщений: 3,174
Сказал спасибо: 1
Поблагодарили 1 раз в 1 сообщении
По умолчанию

Опять таки задаю вопрос, для чего извращения с MySQL, когда можно реализовать эту же вещь на уровне файервола?

Если есть желание - могу реализовать данный комплекс, потому как сам задумываюсь о таком.

Для Mercury :
Можно подробности о твоей MySQL, какое количество записей в базе? Какие-то ещё базы в ней есть?
__________________
3 x PentiumD 930 (2x3.0), 2 GB, 2xSATA 160GB, (Win2K3, FC12)
1 x Xeon 3.0 HT, 4 GB, 2xUltraSCSI 146 GB, Centos 5.2
1 x Xeon 5450, 6GB, 2xSAS 145GB, Win2k3
1 x Xeon 5450 х 2, 4GB, 2xSAS 145GB, FC13
15xCS 1.6, 1хDoD 1.3, Half-Life, CSS, TF-2, 3хDoD Source, 2хUnreal Tournament, WoW Mangos, PVPGN + D2, Quake 3, 2хCOD4, MUOnline, web
В прошлом: CS 1.5, DOD 1.1, WOWEmu, S.T.A.L.K.E.R, IL2, LineAge-2 C4OFF, NFS:U, Crysis Wars, GTA SA:MP, BF-2, Left4Dead
http://gamecenter.idknet.com
Консультации по icq: настройка, статистика, защита от читерства... Недорого.
Dead-Master вне форума   Ответить с цитированием
Старый 16.03.2007, 12:31   #12
DS.RU Moderator
 
Регистрация: 16.01.2004
Адрес: Киев
Сообщений: 1,490
Сказал спасибо: 26
Поблагодарили 37 раз(а) в 20 сообщениях
По умолчанию

согласен, на уровне фаервола это лучшее решение, правдв человек не увидит в консоли причину бана и тд.
Я не силен в линухе, но любой админ напишет скрипт который сверяет ипы в бане и банит их на фаерволе, там пару строк как я видел.
__________________
http://pcw.kiev.ua/forum
hasta вне форума   Ответить с цитированием
Старый 16.03.2007, 13:50   #13
с доступом к форуму безопасности
 
Регистрация: 03.05.2002
Адрес: Новосибирск
Сообщений: 442
Сказал спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Цитата:
Это писал max_rip
При конекте забаненного игрока происходит только один запрос и система ставит обычный бан на сервере. Все )
кстати, тож замечательный вариант... экономит память и процессорное время на серваке...

SHELLDER добавил [date]1174042401[/date]:
для управления файером надо иметь права супер-пользователя или доступ к ним (имеется в виду никс системы)... чтобы читать базу и прописывать правила в файере надо писать отдельный софт... то, что предложил max_rip реализуется средствами АМХХ и самого сервера...
SHELLDER вне форума   Ответить с цитированием
Старый 16.03.2007, 21:58   #14
Приемная комиссия DS.RU
 
Регистрация: 25.01.2004
Адрес: Тирасполь
Сообщений: 3,174
Сказал спасибо: 1
Поблагодарили 1 раз в 1 сообщении
По умолчанию

Для SHELLDER :
Софт подвинду на делфях пишется в течение получаса.
Подобная схема бана у меня реализована на игре МУ-Онлайн.
Там нету команды бан, пришлось дописать средствами файервола...
__________________
3 x PentiumD 930 (2x3.0), 2 GB, 2xSATA 160GB, (Win2K3, FC12)
1 x Xeon 3.0 HT, 4 GB, 2xUltraSCSI 146 GB, Centos 5.2
1 x Xeon 5450, 6GB, 2xSAS 145GB, Win2k3
1 x Xeon 5450 х 2, 4GB, 2xSAS 145GB, FC13
15xCS 1.6, 1хDoD 1.3, Half-Life, CSS, TF-2, 3хDoD Source, 2хUnreal Tournament, WoW Mangos, PVPGN + D2, Quake 3, 2хCOD4, MUOnline, web
В прошлом: CS 1.5, DOD 1.1, WOWEmu, S.T.A.L.K.E.R, IL2, LineAge-2 C4OFF, NFS:U, Crysis Wars, GTA SA:MP, BF-2, Left4Dead
http://gamecenter.idknet.com
Консультации по icq: настройка, статистика, защита от читерства... Недорого.
Dead-Master вне форума   Ответить с цитированием
Старый 17.03.2007, 14:09   #15
DS.RU Moderator
 
Регистрация: 26.03.2004
Адрес: Москва
Сообщений: 2,751
Сказал спасибо: 9
Поблагодарили 93 раз(а) в 39 сообщениях
По умолчанию

Самое просто это нашим кодерам написать модуль типа amxx подключающиеся к метамоду но с функциями amxbans и писать баны в базу .bin или еще чего, статистика amxx типа 3500 содержит записей и не тормозит, и читатся будут быстро.

Там фактически думать то не нада тк как все что должно быть в таком модуле уже придуманно осталось только перенести в код.

А ваобще забейте... в европе с полок пропала cstrike 1.6 и cz я вчера по телефону с пацаном говорил, он хотел купить и поиграть у меня на сервере но нет нигде, а при попытке купить ключ на стиме выдает ошибку, глюки ли или закономерность <_< кто знает....
__________________
© Специалист по выносу мозга...
© [DEAGLE.RU] - Комитет по борьбе с читерами.
------------------------------------------------
Клиент + update cs1.6 V43
Блокируем сегменты сети по маскам, также бан подсетей MTU-INTEL через плагин AMXX
Консольные команды CS Source и HL2
Да, был знаком с DeadMoroz в 1999 и что ?
Да, ломали защиту Sierra в 1999 и выпустили первого клиента CS и что ?
Да, был знаком с MaddoxEmporio и что ?
Да, делал сборки и патчи на CS и что ?
western вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 04:16. Часовой пояс GMT +3.


Лицензия принадлежит Dedicated-Server.Ru