![]() |
Модераторы: 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 ) ![]() -------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
|||
|
||||
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 ) ![]() -------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
|||
|
||||
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. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |