1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Тема наркодера.

Тема в разделе "Оффтопик", создана пользователем Flumaster, 4 ноя 2012.

  1. Linkinkov

    Linkinkov Старожил Пользователь

    Баллы:
    173
    Skype:
    linkinkov1
    Имя в Minecraft:
    linkinkov
    По сравнению с тем, что было раньше он сказка.
     
  2. ufes

    ufes Старожил Девелопер Пользователь

    Баллы:
    173
    Так и сделаю... когда заработаю себе нужную сумму денег.
    Даже скринов нет?
     
  3. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Никто их не делал. Тем более многие иностранные сервера по 500 человек держат и ничё.
    Даже на фиговом e3-1225v2 рагоняется 300 слотов.
     
  4. ufes

    ufes Старожил Девелопер Пользователь

    Баллы:
    173
    Надо будет как-нибудь посмотреть на топовые зарубежные сервера.. но не думаю, что они на "несамописных". Хотя может все же спигот реально так крут..
     
    Сникерсни нравится это.
  5. Linkinkov

    Linkinkov Старожил Пользователь

    Баллы:
    173
    Skype:
    linkinkov1
    Имя в Minecraft:
    linkinkov
    Как раз таки на "фиговом" e3-1225v2 на форуме spigotmc выкладывали лог с онлайном ~450. Не смог найти сейчас, поэтому не уточняю цифру.
     
  6. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Они на спайготе, спайгот реально крут, просто наши у наших есть привычка брать либо хостинг либо дедики у хетзера, а они берут дедики у овх самые дорогие либо ещё где, либо своё железо, в итоге собирают что-либо на e3-1290v2 или i7-3770k и сидят, ибо производительность на ядро лучшая у этих процессоров.
    Это было почти без плагинов, у среднего сервера таки побольше плагинов. и без включённого обфускатора.
    У меня такой проц и я вполне знаю его возможности.
     
    МиднайтЖелаетВамДобра и ufes нравится это.
  7. El Romerro

    El Romerro Активный участник

    Баллы:
    78
    О да тут все еще кипят страсти :)

    Concurrency это какое-то api явового SDK (java.util.concurrent)? Я просто в вашей кухне не очень :) Хорошим примером тут послужит просто гугл и основы построения архитектуры высоконагруженных серверов. Независимо от языка и платформы. Пулл из 4х потоков (если сервер у вас один за всех), либо в нашем случаи (кластеризация), допустим в логине (авторизация only) достаточно и двух на прослушку сети. И по одному (из того-же пулла) на самые важные циклы (отслеживаются профайлерами, если сразу не понятно). Вот и весь секрет успеха.

    Любой идиот новичок сможет написать вам программу, "прекрасно работающую" на топовой конфигурации. Вы сделайте так, чтоб эти 650 человек играли без проблем на 4м пентиуме - в противном случаи - ваш путь в никуда.
    з.ы Там дальше вы называете чуть ли не лучшую конфигурацию ДЕСКТОПНОГО компа :) Почему SSD (от количества r/w операций выполняемых этим вашим баккитом - он у вас улетит через пару месяцев)) - а не сразу RAMdisk? ;)
    [​IMG]
     
  8. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Оперативы не хватило держать огромный мир в памяти, у меня неограниченный мир был, потому SSD,
    и кстати логин, и работа с сетью таки асинхронна в спайготе, но вот проблема в том что сам сервер обрабатывает огромный постоянно изменяющийся мир, а там ещё мобы, редстоун и прочее веселье.
    И да для майнкрафта важна производительность на ядро так что лучше десткопного железа не найти, всякие e7 и рядом не стояли
     
  9. El Romerro

    El Romerro Активный участник

    Баллы:
    78
    На яве достаточно базиса вышеописанного. (Асинхронная сеть это необходимый минимум, а не "фишка". И асинхронность важна для обработчиков игровых событий, естественно на многоядерных платформах. То что в сокетах висит 4 потока - исключительно, что-бы не было задержек. Нагрузка там минимальная (учитывая кол-во пакетов в майнкрафте)). Остальные потуги, как по мне - малоперспективны (Фонаты могут начать кидать помидорами), ибо никакой openmp не поможет, когда обычный hello world кушает с ходу 10 метров памяти :) Я не критикую яву - она такая, какая есть. Просто чудес не бывает.
     
    xvlad и CryBot нравится это.
  10. ensirius

    ensirius Старожил Пользователь

    Баллы:
    123
    Да и весьма удобное API. Во-первых, там есть вещь для создания цикличных операций, которые будут выполнятся раз в N-ое время. Во-вторых, самое главное, там можно создавать Executor, который анологичен по смыслу с Netty. В него можно ставить сколько хочешь потоков. Все операции он выполняет по типу тасков. Просто всю логику на таски делишь и кидаешь в этот экзекзутор, а там внутри первый свободный поток хватает и делает. Таким образом, получается асинхронная загрузка всего и как хочешь. Не нужны специальные потоки для логики. Таким образом, получается 4 потока на сеть от netty, 1 поток для обновления и 4-10 потоков от экзекутора. К сожалению, вопросом о кластаризации не владею, но считаю, что лишние. Все же не сервер вова. Тут больше 1к людей просто не нужно. По поводу диска, лично я не наблюдал необходимости. 20мб/с даже близко там нет.
    Ну, если учесть, что там 1 поток сейчас, то чудо будет. И да, вопросом вы явно не владеете. Все итерации обновления выполняет 1 поток, который и проседает. Очень много чего ему приходится обновлять. Не справляется, проседает кол-во итераций в секунду -> лаги. Если сделать так, как я описал выше, то профит будет в столько раз, сколько потоков.
     
    ВремяПриключений нравится это.
  11. El Romerro

    El Romerro Активный участник

    Баллы:
    78

    Ну это и есть пулл (каждый называет по разному)). Только вот в пулле задается его рамер при создании - а тут как? Сам там выделяет динамически чтоли? :) Или все-таки настраиваемый? Просто масштабируемость его тогда не понятна (если сам выделяет), "усыпляет" или удаляет?

    з.ы по поводу диска - от меня лично это была ирония ;)
     
    slavik123123123 нравится это.
  12. ensirius

    ensirius Старожил Пользователь

    Баллы:
    123
    Размер пулла задается программистам. Я лично вроде поставил 1024.
     
    El Romerro нравится это.
  13. El Romerro

    El Romerro Активный участник

    Баллы:
    78
    Т.е у вас там чуть более 1к потоков в спячке сидят? :) (Спящие - они тоже кушают). Обычно делают необходимый минимум (который всегда задействован) + 4-5 резервных (Хотя наш пулл, к примеру - в случаи переполнения запросов выделяет самостоятельно недостающий поток, после выполнения которого удаляет. Медленней конечно, но уж лучше чем простаивать в очереди важной задаче).

    Преимущество пулла над простой многопоточностью - в том, что пулл содержит уже готовые потоки, которым присваиваются задачи. Т.е время на их инициализацию не тратится. Минусы - это трата ресурсов на поддержание его работы (мизер по сути) и возня с его синхронизацией (дедлок в часто вызываемом цикле и привет семье :) )
     
  14. ensirius

    ensirius Старожил Пользователь

    Баллы:
    123
    Нет, таски хранятся в коллекции и вот о размере этой коллекции мы и говорим. Я на экзекутор повесил 4 потока(пулла?). Там кстати есть возможность динамическии использовать больше потоков, чем нужно. Я задачи старался очень сильно дробить. Например, вместо того, что бы 1 поток обновлял все entity в мире, я просто каждый entity отправил в таск, таким образом задача решается без простоя потоков. С синронизацией проблем пока что не наблюдал. Не знаю даже почему.

    Последние чем занимался, это обновление света в мире. Приходится всю логику переписывать. Писали больные люди стандартный сервак(спасибо яве за возможность декомпиляции). Вы бы знали, сколько я матерюсь. Там такой хардкор...Я когда коллизию делал между entity очумел.
     
  15. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Ты бы поаккуратнее с потоками, а то будешь тратить много времени на переключение контекста.
    Больше чем 2*ядер в системе потоков создавать не стоит.

    но вообще удачи в написании и подтягивании к этому всего bukkit API, если получится - то молодец.

    И кстати например если в потоке в обычном изменять блоки и разбавлять sleep(0) на intel xeon, то шанс нарваться на проблемы с синхронизацией очень мал(я хз почему), причём то-же самое на древнем amd огребает сразу. (Я например в плагине случайно вчищал блоки заприваченные лвц в другом потоке, упал сервер только один раз, тогда то я и обратил на это внимание.)
     
  16. ensirius

    ensirius Старожил Пользователь

    Баллы:
    123
    Я и не планировал делать больше потоков, чем в системе. У нас стандартно 8 ядер на серверах. API я уже сделал. Оно более низкоуровневое, чем у баккита. К сожалению, совместимости с старыми плагинами нет. Но смысл тот же остался. Единственное что plugin.yml убрал и вклепал это в заголовок класса :) Не знаю правда зачем API мне xD
     
  17. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    А что скажешь насчёт моего добавления?

    И кстати например если в потоке в обычном изменять блоки и разбавлять sleep(0) на intel xeon, то шанс нарваться на проблемы с синхронизацией очень мал(я хз почему), причём то-же самое на древнем amd огребает сразу. (Я например в плагине случайно вчищал блоки заприваченные лвц в другом потоке, упал сервер только один раз, тогда то я и обратил на это внимание.) (я уверен что это физически работало в другом потоке ибо пустое тестирование дало те же самые результаты.)

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

    а насчёт апи - а не задолбаешься все плагины перекатывать снова, или как хил собираетесь сидеть на древних версиях?

    И кстати сейчас любой может склепать DDOS атаку скоростью в 2гбита ибо количество Recursive DNS серверов ещё велико, так что склепать атаку не проблема. Это к тому что у вас написано на сайте хоть я и слоу ) (Хотя я видел на фптиме тему про эту атаку)
    (А что все остальные реально заплатили? Причём взломщику, хотя можно было бы купить защиту за то же бабло.)
     
  18. El Romerro

    El Romerro Активный участник

    Баллы:
    78
    Эмм.. Вы наверно меня не правильно поняли. Threadpool - это паттерн (коллекция - как вы указали), содержащая в себе № готовых к исполнению потоков. Поток (Thread) это "оболочка" внутри программы для асинхронного исполнения некой задачи (Task). Т.е грубо говоря его применение сводится примерно к следующему:

    Создаем класс пулла, который (допустим в конструкторе) создает № кол-во потоков, готовых к исполнению, с нулевой задачей и отправляем в join(). В main() стартуем этот пулл - и получаем это № кол-во уже инициализированных потоков.

    Потом уже, в процессе - действуем по вышеописанному вами методу - нужные задачи (функции) присваиваем свободным потокам (вызывая какой-нибудь ThreadPool.Execute(void *)). Пулл - как только запущенный поток уедет в suspend - освободит его и отправит в конец очереди. Таким образом достигается "круговорот" без необходимости инициализировать новые потоки. Вы написали:

    Вот я и удивился, зачем создавать 1к потоков - даже если они спят, не стоит забывать, что каждый поток - это как минимум объект со своим адресом в памяти и приоритетом на выполнение у процессора :) И плодить их пачками - чревато.

    Касаемо синхронизации - то у вас она просто хорошо построена, либо вам просто повезло :) (Event'ы используете? Ява/Шарп программисты любят это дело)). Как запороть дело с тредпуллом (рецепт грубый и не совсем корректный, но суть думаю будет понятна):

    Код:
    if (a = 0) // опечатались и вместо сравнения поставили присвоение
    { lock(a); }
    и всю эту красоту засунули в пулл. Теперь представьте, если этот участок находится в куске часто вызываемого метода. Переполнение вам обеспечено (пока не будет снята блокировка - поток не вернется в "спячку", а она не будет снята по понятным, надеюсь причинам)).

    Многопоточность появилась задолго до многоядерных процессоров. Что какбэ намекает ;)
     
  19. ensirius

    ensirius Старожил Пользователь

    Баллы:
    123
    Не думаю, что подобный хак стоит делать. Почему у Вас так получалось без понятия :) колкостей не знаю. Сейчас опять же, проблем не наблюдаю. Я 80% плагинов уже давно переписал под нужды сервера. Нужды в апдейтах нет. Буквально пару строк приходится менять т.к. тащу из стандартного сервера, а баккит решил быть крутыми и переимновывает классы каждый раз исходя из версии. Вообщем, буквально пару минут занимает. Что касается переноса плагинов, то очень и очень легко. События остались как и раньше. Теперь только приходится самому их создавать :) Я серьезно считаю, что мой апи уже в таком виде лучшее баккита. Я могу без проблем добавить любые блоки из плагина. Дать ему свойство и т.д. Тоже самое с командами и итемами. Наследуешься от основного класса и погнал. Потом просто регистрируешь его в серваке. Можно даже предметы, пакеты, блоки вынести из основной логики. Думаю не стоит говорить, что такое апи подойдет и для модов. Как-то очень сумбурно все.

    Насчет любого не уверен. За 2 года не видел атак больше 300мб/с. Сейчас поставили защиту и там трафик фильтруют толи до 20гб/с, толи 60гб/c. В любом случаи, мы довольны. Относительно кстати дешево. Остальные заплатили. Мне лично писал админ экскалибура, ну а на гуди есть скрин. А что за тема на фптиме?

    Я считаю комньюнити должно очень жестоко осудить эти сервера т.к. они спонсировали атаку на другие сервера.
     
  20. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Баккит переименовывает версии так как в этой версии MinecraftServer.a().ae() закрывает сетевое соединение, а в следующей благодаря обфускации - уже анлоадит чанк например, и это не худший случай.
    И в итоге плагин юзающий нмс на 1.4.2 делал то что надо, а на 1.4.5 - крашал сервер, вот и стали переименовывать.

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

    За границей защита от ддоса стоит 200баксов в месяц что не так много, а эти ребята заплатили взломщику 300 баксов, ну где капитан Пикард когда он так нужен?

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

Поделиться этой страницей