![]() |
|
Модераторы: LSD, AntonSaburov Страницы: (29) « Первая ... 23 24 [25] 26 27 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]()
|
|
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
||||
|
||||
| Stampede |
|
||||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Надо обязательно, но не сейчас. Пока проект маленький и не особо известный, никто его атаковать не будеь. И страшное тут - это не флуд, а нашествие непрошенного наглого и агрессивного бота, который не моргнув глазом может за считанные секунды выкачать весь сайт, если его своевременно не распознать и не дать ему отлуп. В плане возможных мероприятий по пресечению таких заходов есть свои тонкости, и вообще эта задача довольно слабо связана с ведением логов, так что предлагаю поговорить об этом отдельно, когда придет время. Что касается распознавания "хороших" ботов. В принципе это может быть полезным: например, чтобы иметь возможность выводить статистику типа "как часто и насколько глубоко индексирует рамблер", "сколько всего страниц было посещено яндексом", и т. д. В принципе это несложно: надо просто проанализировать заголовок Referer на предмет тех или иных признаков, и дело с концом. Но тут возникает ряд тонких моментов. Вот, скажем, у бота яндекса подпись такая: Yandex/1.01.001 (compatible; Win16; I) . Но мы не можем быть уверены, что она останется такой и в будущем. Поэтому нужно ориентироваться на какой-то паттерн. Вопрос - какой именно? Если выискивать в тексте слово Yandex, то это может показаться надежным, но вот беда: помимо основного бота есть еще бот картинок с индексом P: Yandex/1.01.001 (compatible; Win16; P), и дифференциальный с индексом D, и даже какой-то Yandex/2.01.000 (compatible; Win16; Dyatel; Z) сейчас промелькнул. Можно, конечно, свалить их все в одну категорию - Yandex, а там уж разбираться, что к чему. Но можно и дать им индивидуальные имена и различать по отдельности. Единого рецепта тут нет. Поэтому, в частности, я и повторяю все время, что в логи надо смотреть регулярно, и своевременно реагировать на всякие новинки и сюрпризы. Да, нелегка доля вебмастера. Но некоторые находят в этом фан Теперь о том, где и как разместить код распознавания ботов. Можно, конечно, навалить все кучей в конструкторе LogEntry, а то и еще того хлеще - в логике сервлета-контроллера. Но это, как мы понимаем, будет не комильфо. Правильнее изолировать это хозяйство в отдельное место, чтобы его легко можно было найти и при необходимости подкорректировать. Как, например, нам такая иерархия: интерфейс BotDetector - реализации под конкретные боты?
Ну и так далее. Таких детекторов можно наинициализировать один раз при старте приложения и пользоваться, например, как статическими переменными, перебирая в цикле при каждом запросе, пока один из них не вернет true. А можно сделать детектирующий метод статическим, но тогда плясать придется не от интерфейса, а от общего класса с таким же статическим методом. Короче, вариантов - масса. Надо просто брать и делать. Более того, со временем может появиться желание сделать еще более универсальный класс, который будет детектировать не только ботов, но и, скажем, заходы с поисковиков - с определением своих сцецифических параметров, таких как строка поиска и номер страницы в выдаче. И в этом-то и заключается кайф принятого нами программного подхода (в противовес конфигурированию существующих фреймворков), что мы в любой момент можем реализовать такую фичу, какую пожелаем, и сделать это таким образом, каким считаем нужным. Как, кстати, вообще система логирования, получается? Пиши -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
||||
|
|||||
| diablero |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
Сама система логирования готова. Выше, можно сказать, что я представил ее в полном объеме.
На счет ботов: Когда то, блуждая по просторам интернета, я натыкался на огромный список "хороших ботов". Попробывал его найти и пока, не получилось. Кто видел, дайте линк? Начал думать над отчетами и запросами. Пишу запросы потихоньку. Давно я не замарачивался с SQL:) Вспоминаю, разбираюсь... В данный момент работа стоит, грипп напал, мать его за ногу... -------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
|||
|
||||
| Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Тебе не нужен огромный список хороших ботов. Хорошие - только те, которые могут привести трафик, а их можно сосчитать по пальцам: яндекс, рамблер, гугль и мейл.ру. От мсн и яху ничего кроме ботов не видел, так что толку ноль. Вот этим вот хорошим ботам и нужно разрешить доступ в robots.txt. А всех остальных отлавливать по referer и сразу бить по рукам - возвращать, например, код 403 (доступ запрещен). А потому как не уважают директивы robot.txt. Но такой блокировщик лучше написать отдельно, и оформить его в виде фильтра со своей конфигурацией. -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
| diablero |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
Я решил всю "систему сбора и обработки статистических данных", по возможности, изолировать от всего приложения. Выделил все в отдельный пакет.
Пакет имеет следующую структуру
[manager] [report] [util] [robot] [SGPSD.class] ControllerServlet принял следующий вид:
Это желание уже появилось. Поискал в инете, инфу у самих поисковиков, и так и не нашел как идентифицировать эти данные. Это сообщение отредактировал(а) diablero - 15.4.2008, 19:41 Присоединённый файл ( Кол-во скачиваний: 32 )
sgpsd.zip 4,15 Kb-------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
|||
|
||||
| Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Ну что я могу сказать - молодец, растешь. Все четко и грамотно. Что изолировал - тоже очень правильное решение: позволит легко переиспользовать в других проектах. Так что держи от меня плюса - впервые в сериале!
Ну, что касается анализа заходов с поисковиков, то тут все проще пареной репы: заходишь браузером в рамблер/яндекс/гугл с любым запросом, и изучаеншь УРЛ страницы выдачи. Например: www.google.com/search?q=%D0%B2%D0%B8%D0%BD%D0%B3%D1%80%D0%B0%D0%B4&hl=en&start=40&sa=N И сразу все понятно, какие параметры проверять и что из них извлекать. Там, правда, будет небольшой гемор с кодировками, но и это тоже решаемо. Как столкнешься - пиши. -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
| diablero |
|
||||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
Проанализировал пока Rambler, Yandex и Google. В этом деле мне помогла Опера, которая если навести курсор на вкладку, показывает запрос и кодировку.
Гемор вылез с яндексом. Мне абсолютно не понятено почему урл для первой страницы в utf-8, а для всех последующих они перекодируют его в windows-1251. Реализованно все следующим образом:
Как мне показалось, выявить кодировку урл невозможно или по крайне мере жутко дорого (в плане производительности, если использовать эвристический анализ). Очень хочу быть непраавым Тестировал на пару тройках запросах. Если что подправлю. -------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
||||||||||||
|
|||||||||||||
| diablero |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
Немного поразмыслив, я пришел к выводу, что существующий подход меня не устраивает.
По следующим соображениям: - отсутствие возможности подсчитать количество пользователей посетивших ресурс, за любой период времени, только количество хинтов; - каждый раз выполняется ряд ненужных операций; - не разумно раздувается база; Чтобы исправить сие, я решил разбить исходную таблицу на две: - ClientEntry - HintEntry Вновь испеченные сущности имеют следующую структуру: HintEntry: - id; - userName; - date; - method; - bytes; - millis; - search; - postTitle. ClientEntry: - id; - date; - host; - refererUrl; - userAgent; - bot; - query; - page; Объект ClientEntry создается только один раз при открытии сессии, а HintEntry на каждый хинт. В итоге я получил то, что хотел. Плюс к тому есть возможность сделать более гибким механиз избавления от устаревшей или по усмотрению админа не нужной информации. ControllerServlet принял следующий вид:
Вся система в аттаче. Ты можешь объяснить сей механизм? Очень хочу реализовать эту фичу Присоединённый файл ( Кол-во скачиваний: 21 )
sgpsd.zip 7,99 Kb-------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
|||
|
||||
| Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
diablero, да на здоровье! Сайт все-таки твой, и его потребности тебе известны лучше как кому бы то ни было. Нравится в две таблицы - пускай будет в две.
Вообще идея выделить инфу, относящуюся к клиенту, в отдельную таблицу как бы не лишена смысла и согласуется с идеей нормализации данных, но на самом деле при ее реализации надо будет учитывать некоторые тезнические нбансы, которые лучше знать заранее:
Ну и еще по мелочи -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
| diablero |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
Думал, думал, не выходит у меня каменный цветок Либо я чего-то не понимаю, либо не до понимаю.
1. Вариант с кукисами. Как мне кажется, это может стать ахиллесовой пятой в системе. Создавать объект ClientEntry лучше при открытии сессии, а выявлять постоянных посетителей, смотреть как часто и с какой страницы они начинают просмотр, где и сколько времени проводят, на какой странице заканчивают уже можно на основе кукисов. 2. Про поле userName и refererUrl. Имеет значение только первое значение refererUrl, что у меня берется один раз при открытии сессии. Все последующие значение смысла не имеют. Лучше добавить к hit поле url. Поле userName в hit, чтобы иметь информацию от зарегистрированных пользователей. Все остальные, это просто все остальные. Тут я вообще ничего не понял. Ну создам я ClientEntry зная что это бот, куда я потом дену этот объект, ведь при следующем запросе к сайту, в любом случае создаться новая сессия. Чтобы не пораждать кучу записей ClientEntry, придется ложить объект в сессия независемый контент. какие? -------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 10 Всего: 40 |
Знаете, уважаемые. А меня всё равно утомляет писать на Java. Смотрите сами: я пишу быстренько какой-то код, теперь чтобы его запустить я должен запустить приложение на сервере, а это на моей тачке занимает около 10-20 секунд. Обидно. чтобы ввести изменение в программный код мне нужно столько времени! На стадии разработки руки просто опускаются. Слава Богу с Velocity проще, подсунул на сервере в нужную папку новую версию верстки и наслаждаешься результатами. Но в целом за Web on Java браться ой как не хочется!
|
|||
|
||||
| Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 24 Всего: 62 |
Platon
У меня средних размеров проект стартует на Tomcat 6 в Eclipse WTP секунд 5-7. Нормально, чтобы вздохнуть и перевести дух Это сообщение отредактировал(а) Maksym - 14.5.2008, 17:15 |
|||
|
||||
| diablero |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
Я уж не знаю чего такого можно быстренько написать, да так чтобы старт сервера занимал столько времени. У меня например сейчас в основном проекте более 100 классов, и куча еще всего. На ноутбуку старт занимает в среднем 2-3 секунды. Может вам стоит подумать об апгрейде. Или вплотную занятся ос? -------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 10 Всего: 40 |
Во-первых, Думаю моя машинка с 2ГГц проц и 768 МБ ОЗУ еще имеет право на жизнь. а с ОС я не понял.
Во-вторых, я не говорил о сервере, я говорил о приложении, как называют, редеплой из IDE. |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
У меня Jboss в дебаг-режиме из-под иде стартует больше минуты.
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |