За последние 24 часа нас посетили 34299 программистов и 1749 роботов. Сейчас ищут 1225 программистов ...

О банах

Тема в разделе "Прочие вопросы по PHP", создана пользователем Psih, 10 мар 2007.

  1. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Есть проблема, требующая скорее идейного, чем технического решения..

    Есть таблица банов, там щас весьма их много, есть не только конкретные IP адреса, но и диапазоны. В базе храниться в виде INT (ip2long и long2ip). Поскольку у меня много запросов, при каждом запросе лезть в базу смерти подобно. Есть memcache сервер. Тупо пихать масив в котором сидит вся таблица банов и перебирать его каждый раз тоже не годиться, это опять же смертельный номер для PHP (там за 1000 записей как минимум).
    Может у кого есть идеи, как можно реализовать проверку на бан IP'ки так, что бы это было без последствий для сервера и базы данных... В memcache пихать можно всё что необходимо, там места хватит под всю базу :)
     
  2. Anonymous

    Anonymous Guest

    Я вот читаю... зачем тебе вообще база? =)) Если юзать ее нельзя?
     
  3. xak2

    xak2 Guest

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

    Но есть выход, почему ты не хочеш масив в текстовом файле хранить?
     
  4. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    потому что с реальными нагрузками никогда не работал, видимо.

    опять вредные советы раздаешь?
     
  5. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    Psih

    а индексация не помогает?
     
  6. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Индексы есть, но нагрузка даже с ними растёт сильно слишком. Я же говорю, WEB сервер обслуживает порядка 30 запросов в секунду, на каждый запрос надо проверить, а не стоит ли бан на этот IP!
     
  7. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Ещё как напрягает, если запросов много!

    Ага, создавать в памяти масив в 1000 элементов, а потом ещё проверять, а есть ли в нём такой IP? Вы хоть имеете представление, НАСКОЛЬКО это долго и ресурсоёмко.
     
  8. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    Psih

    а в htaccess не покатит записывать забаненные IP?
     
  9. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    У меня Lighttpd, я давно не пользуюсь Apache из-за его тормознутости :)
    Да и как прикажешь в .htaccess прописывать диапазоны типа 192.168.0.14 - 192.168.0.105 ? :)
     
  10. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    Psih, вот читаю я ваши посты (в разных топиках) и везде вижу что вы кого-то пытаетесь ввести в священный трепет какими то сервисами с запредельными нагрузками...
    То заявляете что пхп пользоваться тупо то апач тормознутый, завтра окажется что хттп через пятую точку разработан?

    Можно хоть на один мегаресурс взглянуть на котором база которой нельзя пользоваться и апач ставить нельзя?
     
  11. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    http://www.file.lv
    Пожайлуста, торрент-трекер. Если вы имели с ними дело с точки зрения программирования и настройки сервера - должны знать какую нагрузку они создают.
    По поводу Apache - да, я это говорю. Потому что это идиотизм, когда WEB сервер оттяпывает почти 600 мегабайт оперативки под себя. К тому же FastCGI побыстрее будет.
    P.S. Стоит Gentoo AMD64 2006.1 полностью пересобранная с модифицированными CFLAGS и USE флагами на GCC 4.1.1, Lighttpd 1.4.11, PHP 5.1.6-r6 (FastCGI, Unix Socket) с XCache, MySQL 4.1.21 (Unix socket only, no InnoDB), Memcached 1.2.1 (Unix Socket). Перелопачены ОС TCP/IP настройки. Всё это крутиться на AMD X2 3800+, 2GB DDR 400, база лежит на SATA WD Raptor 36GB (10 000 rmp).
     
  12. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    у нас долгое время сервер с апачем, пхп, перлом, мускулом и сотней сайтов крутился на 512 метрах :) правда недавно мускулу стало тесно - пришлось удвоить памяти. так что 600 мегов - это скажем так, многовато.
     
  13. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    У вас явно небыло большого трафика или посещаемости. У меня вся проблема упиралась в то, что запросов было много, поэтому приходилось держать ~80-100 apache процессов, иначе сайт просто уходил в 500-ю ошибку, т.к. собиралась большая очередь. Lighttpd решил эту проблему + дал довольно хороший прирост мощьности за счёт FastCGI, да и сам он жрёт куда меньше процесорного времени в отличии от Apache.
     
  14. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    Psih, а сколько серверов, с какими характеристиками?
     
  15. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    всмысле?
     
  16. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    а что запрашивают? от статики хорошо nginx спасает...
     
  17. xak2

    xak2 Guest

    Есть выход... разбирайся с банами.
    Всмысле... я имел с трекерами ST TorrentBit и многими другими. Как я понял перед запросом проверяетя не забанен ли. Но можно ведь при входе на сайт один раз сделать проверку и записать в сессию. Помойму это самый оптимальный вариант. Количество запросов в базу сократится во много раз. Проверил не забанен ли ИП и записал в сессию инфу ($_SESSION['ip'] = 'blocked'; ('unblocked')) допустим, потом перед каждым запросом проверяем if ($_SESSION['ip'] == 'blocked') ... else mysql_query();
     
  18. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    А как быть с announce ? Ведь банить, так банить всех. + не все авторизацию проходят. Сессий у меня нету как таковых, всё на куках ведь в TBSource работает (а сессию я храню в memcache).
     
  19. xak2

    xak2 Guest

    Про memcache слышал, но всеже почемубы не попробовать? Анонс проблема во всех трекерах, но так ты в начале анонса тоже сделай проверку сесии и если ИП заблокирован убей анонс если же нет пусть качают.

    Тагда уж раз банить так банить по конкретному:

    $query = mysql_query("SELECT * FROM blocks WHERE ip = '".$_SERVER['REMOTE_ADDR']."'");
    if (mysql_num_rows($query) >= 1) die("Sorry, but your IP banned");
     
  20. Pridemode

    Pridemode Активный пользователь

    С нами с:
    13 окт 2006
    Сообщения:
    64
    Симпатии:
    0
    лучше банить маску сети особенно если нарушитель докучливый, а посещаемость ресурса небольшая (шанс что вы забаните других людей из его сети - чрезвычайно мал)

    хотя 100% вариант это бан mac адреса :D
     
  21. xak2

    xak2 Guest

    Посещяемость в день в среднем 16 000 человек.
    Всего зарегистрировано 40 000 человек.
    Смысл.
     
  22. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    xak2

    м, вот твой запрос.
    он вернет:
    1) id записи
    2) ip забаненные
    в лучшем случае, а в худщем, он вернет еще и причину бана, срок бана, кто банил и так далее..

    ИМХО, лучше бы всегда указывать именованный список полей, которые тебе нужны. чтобы лишние данные не гонять..
     
  23. xak2

    xak2 Guest

    Он вернет мне одно поле если такой ИП существует в базе или не вернет ни одного если такого ИП в базе нету.
     
  24. lasc

    lasc Активный пользователь

    С нами с:
    28 мар 2007
    Сообщения:
    1
    Симпатии:
    0
    ничего подобного не замечали(нагрузка ~1000k хитов в день)
    соединие с бд происходит в разы дольше
     
  25. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    На описанном железе лишний запрос к субд займёт менее 0,0003с. Необходимость такой функциональности как отслеживание блокировки доступа пользователя стоит того, чтобы затратить на неё 0,01% ресурсов сервера, это принебрежимо малая цифра.

    Я незнаю, что там внутри делает этот трэкер, но 30 запросов в секунду для описанного серверного железа на первый взгляд, кажется скромной цифрой,Ю может стоит поискать другие узкие места?