Регистрация  Забыли пароль?

Сообщество web программистов

Настроение : Отличное!

DOS-атака на наш веб-сервер! (nginx)

На днях пришлось изучать возможность перехода наших сервисов на более быстрые веб-сервера под управлением nginx. Да, да, да... и мне иногда приходится делать грязную работу системного администратора :(. Процесс установки шел не совсем гладко, но все было поставлено.

Установил я значит все, и думаю, что-то не так, ну "не прет" меня от такого :), ну какой смысл от сервера без нагрузки? как от курицы, которая не несет золотые яйца :)

Решил исправить ситуацию и сделать испытание, устроил ему DOS-атаку (Denial of Service - «отказ в обслуживании»). Стресс-тест позволяющий проверить производительность и устойчивость серверов под искусственно сгенерированными "пользователями" сайта. Или в другой интерпретации - это разновидность атаки злоумышленника на компьютерные системы. Целью этой атаки является создание таких условий, при которых настоящие пользователи системы не могут получить доступ к предоставляемым системой ресурсам, либо этот доступ затруднен.

Помощи в организации попросил у моих друзей из КПИ, которые сидят на высокоскоростном интернете. Для этой цели установил бесплатную CMS от WikiPedia на нашем сервере, а в качестве программы, которая генерирует пользователей на сайте использовали продукт под названием Webserver Stress Tool. Вначале запустили небольшую нагрузку, но сервер даже не заметил что его «клюют». Потом решили «вжарить по полной». Запустили на 2-х компьютерах подключенных к каналу 100 МБ/сек (UA-IX) 250 лже-пользователей с интервалом нажатия на ссылки и заходом на сайт 0 сек, тем самым, сымитировав ситуацию, как будто на сайте сидят 250 пользователей и непрерывно (в реальности такого просто быть не может) давят на все ссылки в течение 180 секунд. Сервер наконец-то понял, что к нему идут обращения, индикатор загрузки показывал отметку 55%. При этом, на сайт можно было зайти с небольшой задержкой с любого компьютера. В общем, как мы не старались, выше 60% так и не вышло «завалить» сервер.

Оценки конечно субъективные, и не понятно как будет вести себя реальный сайт с его сложными запросами под реальной нагрузкой, но даже такой небольшой тест несет в себе позитивные эмоции и надежды что в скором будущем наши сервисы окончательно перестанут тормозить :) !!!

Одним словом: МЫ ПЕРЕХОДИМ на nginx!

Пользуясь случаем, хочу выразить благодарность Игорю Сысоеву, который является разработчиком данного веб-сервера nginx.

Спасибо за внимание! :)


Создано: Олексій Акулов Открыть Комментариев: 18

Ослинный мораторий

 Меня не перестает поражать количество глюков в каждой новой версии осла (IE), которые разработчики с гордостью называют "фичами".

Меня не перестает поражать ослинное отношение к HTML, CSS и вообще к стандартам.

Как насчет моратория? Представьте, если посетители Вашего сайта увидят "Этот сайт можно смотреть в нормальных браузерах, а Ваш ........... IE к таковым не относится" :)

Понятно, что это все мечты, ибо такое действие должно быть массовым... А пока - выполняем страшные прыжки с переподвыподвертами в коде...

Эх...


Метки : ie
Создано: Styx Открыть

я что то не так сделал?

Иногда забываешь в каких темах ты писал коменты, ну собственно поэтому я решил подписатся на некоторые из них.

Теперь мне на почту приходят вот такие письма...

От кого:Hiblogger Team
Тема:Reply in blog in which you are subscribed
Користувач Ася відповів на запис
відповідь була:
Для того, аби відписатись від розсилки на цей запис, натисніть тут
 
 
тут - это ссылка на какой то блог http://blogs.football.ua/ , либо какой то другой блог на который я не подписывался, и как отписатся неизвестно!!! Ну что за нах??? И в таком случае, почему письмо приходит пустым??? У кого нить было такое? И если было кто как с этим боролся??? Уж надоело получать эти безсмысленые, пустые письма с блогов про которые я ничего не знаю....

Создано: azod Открыть Комментариев: 9

Опубликована предварительная версия стандарта HTML5

Консорциум W3С (The World Wide Web Consortium) обнародовал первую версию стандарта разметки гипертекста HTML5. За последние 10 лет это крупнейшее внесение изменений в стандарт.
 

Как ожидается, финальная версия будет принята в 2010 году, дабы все браузеры включили поддержку новой спецификации. Тем временем, Mozilla Firefox уже поддерживает HTML5, а компании Microsoft, Apple и Opera, также разрабатывающие собственные движки Интернет-браузеров, являются активными членами консорциума.
На текущий момент официально принятой является версия HTML4, которая датируется 18 декабря 1997 года.
 
Изменения, в стандарте HTML большей частью касаются мультимедийных возможностей. Так, в стандарт будет включен интерфейс прикладного программирования, позволяющий создавать двумерную графику средствами языка HTML, а также воспроизводить аудио и видео. Также более мощной станет система исправления и обнаружения ошибок в HTML-коде.
 
Как заявляет сопредседатель рабочей группы W3C HTML Ден Конноли, в HTML5 работа с видео и звуком станет не сложнее аналогичной работы с изображениями. На данный момент в сети существует множество технологий работы с мультимедиа-контентом, несовместимых между собой. Стандарт HTML5 стандартизирует эти технологии и сделает их применение максимально простым для веб-мастера.

HTML5 будет поддерживать модульную структуру построения сайта, как, например, это реализовано в языках программирования. Теперь повторяющиеся элементы, такие как заголовок или меню можно будет описать один раз использовать там, где это необходимо.
Adobe Flash будет добавлен непосредственно в стандарт HTML5. Еще одно новшество, которое сейчас доступно только при использовании языков программирования для Web, например, PHP или ASP – возможность редактирования веб-страниц непосредственно на сервере.
Как запланировано, последняя предварительная версия будет доступна к концу 2009 года, а финальный релиз увидит свет к осени 2010 года.

Метки : html, w3c, новое
Создано: Олексій Акулов Открыть Комментариев: 3

Библиотека IBM: в поисках идеального парсера для XML

Вероотступник Geronimo: Использование интегрированных пакетов: Woodstox от Codehaus

 Майкл Галпин, инженер по программному обеспечению, Vitria Technology

21.11.2007

Парсер (parser - программа синтаксического анализа, парсинга) для XML часто является ключевым элементом в обеспечении устойчивости и производительности приложения. К традиционным методам парсинга XML относятся - Document Object Model (DOM) и Simple API для XML (SAX). Сейчас появился инновационный метод, названный Streaming API for XML (StAX), и уже оказался настолько полезным, что его интегрировали в спецификацию платформы Java Platform, Enterprise Edition (Java EE) 5. Apache Geronimo 2.0, и теперь полная реализация Java EE 5 включает StAX-парсер Woodstox от компании Codehaus. В данной статье мы научим вас использовать преимущества парсера StAX, а также расскажем, почему команда Geronimo выбрала Woodstox в качестве своего StAX-парсера.

Значение XML

XML был создан в 1996 г. (авторы Тим Брэй и Майкл Сперберг-Макквин). Его перспективы сразу получили положительную оценку, но тогда никто не мог и предполагать, насколько важной технологией XML станет в будущем. Java-разработчики используют XML для конфигурирования в качестве хранилища данных, а еще чаще - как формат для обмена данными. Он стал основой для Web-сервисов и SOAP, а следовательно, и для конструктивных шаблонов современной сервис-ориентированной архитектуры (Service-Oriented Architecture - SOA). Но этим возможности XML не исчерпываются. В Ajax (Asynchronous JavaScript + XML) он представлен буквой X и играет ключевую роль в создании более функционально насыщенных, чем когда-либо, интерфейсов, присущих современным Web-приложениям.

Конечно, XML не всесилен и имеет свою слабую сторону. Как правило, XML-документы объемны. Для них имеется общая структура дерева каталогов, но расширяемость приводит к тому, что возможны огромные расхождения между схемами для документов. Эти аспекты представляют трудности для эффективного парсинга XML. Имеются два традиционных метода решения проблем с XML-парсингом: DOM и SAX.

Обработка XML: DOM и SAX

DOM и SAX - два классических подхода к XML-парсингу. Во многом они расходятся. DOM предоставляет для XML-документов простую объектную модель. DOM-парсер превращает XML-документ в несложный объект, который представляет все данные из XML-документа. Но за такое точное представление приходится расплачиваться: DOM-парсинг очень требователен к ресурсам памяти.

Для SAX проблема с памятью отсутствует. SAX-парсеры производят серию событий анализа. Обработчик (handler) может регистрировать обратные вызовы (callbacks) для этих событий и затем применять определенную логику к данным, связанным с этими событиями. Это работает быстро и эффективно, но нуждается в сложной программной модели.

Легче всего рассмотреть различия в использовании DOM и SAX, а следовательно, предпосылки и преимущества StAX, на конкретном примере.

Пример парсинга с использованием Flickr

Пример XML-файла для парсинга найти нетрудно. Сейчас большинство Web-сайтов предлагают какие-либо Web-сервисы на основе XML. Flickr - популярный сайт по обмену фотографиями (владелец - компания Yahoo), оснащенный мощным и гибким API. Посмотрим на какой-нибудь простой код для доступа к "интересным" фотографиям на этом сайте. (См. раздел Загрузка - там дается полный исходный код, использованный в данной статье, и обязательно либо поместите Woodstox в свой путь класса, либо используйте JDK 1.6.) Этот код показан в листинге 1.


Листинг 1. Использование API-интерфейса Flickr
                String apiKey = "c4579586f41a90372f762cb65c78be5d";
String urlStr = "http://api.flickr.com/services/rest/?" + 
"method=flickr.interestingness.getList&per_page=20&api_key="+apiKey;
URL request = new URL(urlStr);
InputStream input = request.openStream();

В данном коде используется API Flickr: Representational State Transfer (REST) . (См. раздел Ресурсы, в котором имеется дополнительная информация об API Flickr и о формате REST.) Пример вывода из данного вызова показан в листинге 2.


Листинг 2. XML от Flickr
                
<rsp stat="ok">
<photos page="1" pages="25" per_page="20" total="500">
     <photo id="469774979" owner="35373726@N00" secret="c8a1be2012" server="183" 
farm="1" title="Where will it lead me......?" ispublic="1" isfriend="0" 
isfamily="0" />
     <photo id="470281793" owner="73955226@N00" secret="49612a2794" server="212" 
farm="1" title="Island Beauty" ispublic="1" isfriend="0" isfamily="0" />
     <photo id="469808244" owner="43568064@N00" secret="26b71544a3" server="227" 
farm="1" title="" ispublic="1" isfriend="0" isfamily="0" />
</photos>
</rsp>

Обратите внимание на то, что в листинге 2 показаны только три фото. Вызов API вывел бы все 20 (значение параметра per_page в строке с адресом URL.) Результат вполне объяснимый, поэтому посмотрим, как можно выполнить парсинг этого XML-файла. В данном примере анализируется заглавие каждой фотографии и ее идентификационный номер (ID). Этот ID можно использовать для создания адреса URL для этого фото, поэтому легко придумать Web-приложение (например, mashup), которому будет достаточно только этой информации. Вначале надо применить DOM для извлечения этих данных.

Пример использования DOM

Для использования DOM производится парсинг документа в объект документа. Это находящаяся в оперативной памяти (in-memory) структура дерева, представляющая проанализированный XML-документ. Потом надо найти в папках этого DOM-дерева название и ID для каждой фотографии. Объедините их на одной карте. В листинге 3 приведен код для такой операции.


Листинг 3. Парсинг с помощью DOM

DOM популярен, поскольку его очень легко использовать. Просто введите данные в парсер, и вы получите объект document. Теперь можно пройтись по дочерним узлам и найти узел с фотографией. Каждый узел с фото (photo node) является дочерним узлом узла с фотографиями, поэтому надо смотреть в каждом узле с фото. Затем мы получаем доступ к атрибутам title и id каждого узла с фото и сохраняем его в свою карту.

Однако при работе с DOM есть и некоторые недостатки. Приходится сохранять большое количество ненужной информации, например, о владельцах фотографий. Кроме того, всю информацию приходится считывать дважды: сначала в объект документа, а во второй раз - при просмотре объекта документа. Традиционно этой излишней работы избегали при помощи SAX.


Пример использования SAX

SAX-парсер не возвращает такого же понятного объекта document, какой выдавал DOM-парсер. Вместо этого он выдает серию событий по ходу анализа XML-документа. Для этих событий придется создать обработчик, либо реализуя интерфейс, либо расширяя класс DefaultHandler и игнорируя его методы, где это необходимо. В листинге 4 показан SAX-парсинг для XML-документа Flickr.


Листинг 4. Парсинг с помощью SAX
                SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
DefaultHandler handler = new DefaultHandler(){
     @Override
     public void startElement(String uri, String localName, 
     String qName, Attributes attributes) throws SAXException {
          if (qName.equalsIgnoreCase("photo")){
               String title = attributes.getValue("title");
               String id = attributes.getValue("id");
               // карта статична, поэтому можно получить к ней доступ здесь
               map.put(id, title);
          }
     }
};
parser.parse(input, handler);

Очевидно, что код, показанный в листинге 4, немного труднее для понимания, чем тот DOM-код, который вы видели в листинге 3. Для обработки SAX-событий нам потребовался ContentHandler, поэтому мы и создали DefaultHandler и игнорировали его метод startElement обратного вызова (callback). Вы удостоверились, что это - элемент фото, а затем получили доступ к его атрибутам title и id.

Здесь код довольно краток и эффективен в работе. Он сохраняет только те данные, которые вам нужны, а анализ документа происходит всего один раз. Расширение класса для регистрации подписчика на события требуется, когда код оказывается значительно сложнее. Было бы хорошо, если бы можно было применить эффективный парсинг XML, но с помощью более интуитивной программной модели. Для этого и предназначен StAX.

Альтернатива StAX

Сложность в SAX возникает из-за конструктивного шаблона Observer, который она реализует. Это пассивная модель (push model), то есть парсер передает модели наблюдателям, которые в дальнейшем действуют в зависимости от происшедших событий. Модель StAX похожа на SAX. Она направляет данные и события из XML-документа, что делает её быстрой и эффективной, как SAX. Серьезная разница заключается в том, что здесь используется активная модель (pull model). При этом код приложения выталкивает события из парсера.

Разница не выглядит критической, но при этом становится возможной значительно более простая программная модель. Посмотрите в листинге 5, как действует StAX.


Листинг 5. Парсинг при помощи StAX

Во-первых, не пришлось расширять не один из классов, потому что не потребовалась регистрация событий. При помощи SAX можно контролировать поток событий, потому что они выталкиваются из парсера. Можно использовать знакомый итерационный синтаксис для поиска внутри документа нужных вам данных. И опять-таки сохраняются только нужные вам данные, а разбор XML-документа производится только один раз. Эффективность такая же, как при использовании SAX, но код стал гораздо понятнее.



Woodstox как поставщик StAX Geronimo

Теперь вы убедились в преимуществах StAX-парсинга. Все признают, что он улучшил XML-технологии. Неудивительно, что этот парсинг стал частью спецификации Java EE 5 (его даже включают в платформу Java Platform, Standard Edition [Java SE] 6.) В качестве компонента Java EE 5 он подлежит реализации в Geronimo 2.0.

К счастью для команды разработчиков Geronimo, существовало несколько реализаций StAX с открытым кодом, поэтому у них была возможность выбора. В качестве StAX-парсера они остановились на Woodstox и включили его в Geronimo. Woodstox считается одной из лучших реализаций StAX по производительности (см. Ресурсы - сравнение разных StAX-парсеров.) Кроме того, Woodstox лицензируется как под Lesser General Public License (LGPL), так и под Apache 2.0. Поэтому включать Woodstox и его исходный код в пакеты Geronimo можно безо всяких ограничений.

Настройка производительности вашего приложения: как добиться максимума от Woodstox

Производительность - одно из преимуществ, которые Woodstox принес в Geronimo. Как и с другими высокопроизводительными технологиями, очень важно понять, как добиться максимальной производительности от Woodstox. В коде листинга 5 используется API-интерфейс высокого уровня XMLEventReader, который включен в спецификацию StAX. Можно использовать API-интерфейс более низкого уровня, что увеличит производительность, - XMLStreamReader. В листинге 6 показано, как StAX-парсер использует этот интерфейс.


Листинг 6. StAX-парсинг при помощи XMLStreamReader

Код в листинге 6 аналогичен коду в листинге 5; хотя он явно более низкого уровня, можно добиться значительного повышения производительности.

Заключение

Вы узнали о преимуществах использования StAX-парсера для анализа XML-документов. StAX предлагает компромиссное решение для SAX и DOM. Вы можете прямо сейчас воспользоваться StAX, потому что он входит в пакет Geronimo 2.0. Вы получите не только интуитивно понятные API StAX, но и дополнительные преимущества от высокопроизводительной реализации StAX в Woodstox.

Метки : xml, ibm, parser
Создано: Aleksandro Открыть

Новый проект в украинском интернете.

Работа над новым проектом подходит к концу. Уже сейчас можно оставить свой адрес электронной почты и быть среди тех, кто получит приглашение первым. Проект выйдет в свет на следующей неделе. Проект рассчитан на продвинутую и креативную молодежь Киева и Украины в целом. Знакомства, фото, поиск друзей, группы, анонсы событий и многое другое. Присоединяйтесь!

Присоединиться!

Создано: sergeykorkin Открыть Комментариев: 4

Тренінг, як веб-програмерам подвоїти з.п.



Интересный тренинг о том, как web-программисту удвоить зарплату:
http://community.livejournal.com/phpmoney/4745.html


Создано: Aleksandro Открыть Комментариев: 3



О сообществе

Сообщество web разработчиков


Модераторы сообщества

Содержание страницы

Метки

Календарь
Пн Вт Ср Чт Пт Сб Вск
     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

Последние посетители сообщества
Нет данных