Posts

Showing posts from June, 2011

Деб-пакеты с модулями SQLite

Собрал некоторые расширения как деб-пакеты, см. репозиторий http://mobigroup.ru/debian/pool-squeeze/main/s/ В апстримовском расширении FTS3 поправлен баг, мешающий собирать его отдельным модулем. Версия из текущего trunk, умеет conflict-resolution для виртуальных таблиц (можно писать insert or replace ...). Также добавлена поддержка стеммеров Snowball . Модуль ICU собран "как есть" апстримовский. Добавлен модуль для подсчета хэша sha1 (используется быстрая реализация из BSD-систем). Для перекомпиляции, в т.ч. под другие ОС, см. в архивах файлик debian/rules, где содержатся команды сборки. Для удобства загрузку нужных расширений можно сделать с помощью файла ресурсов: $ cat ~/.sqliterc .load /usr/lib/libsqlitetcl.so .load /usr/lib/libsqliteicu.so .load /usr/lib/libsqlitefts3.so .load /usr/lib/libsqlitesha1.so $ sqlite3 -- Loading resources from /home/veter/.sqliterc

Оптимизация взаимодействия веб-клиента и сервера - Практические задачи

В завершение мы немного поговорим о типовых задачах, с которых многие из нас и начинают впервые заниматься веб-проектами. Предложенные далее решения будут настолько просты, что вы их сможете реализовать сразу же в процессе чтения статьи, а далее и масштабировать, при необходимости. Хотелось бы немного остановиться на вопросе запуска сервисов. Способов запуска сервисов в линукс немало - скрипты http://ru.wikipedia.org/wiki/Init : init (сокращение от англ. initialization — инициализация) — программа в UNIX и Unix-подобных системах, которая запускает все остальные процессы. утилита nohup : nohup — UNIX-утилита, запускающая указанную команду с игнорированием сигналов потери связи (hangup); таким образом, команда будет продолжать выполняться в фоновом режиме и после того, как пользователь выйдет из системы. и даже запуск в сеансе screen . Для использования init нужны рутовые права или специальная настройка системы для запуска с правами пользователя посредством команды sudo

Оптимизация взаимодействия веб-клиента и сервера - Кэширующий прокси

Об этих "невидимках" многие разработчики забывают, ведь кэширующие прокси находятся где-то далеко от серверов проекта и нам не подчиняются. Зато с ними мы совершенно бесплатно получаем так называемую CDN (Content Delivery Network), о которой мечтают чуть ли не все веб-разработчики. Очевидно то, что для сохраненных в кэше прокси-серверов объектов запрос к веб-серверу не требуется и это может очень значительно снижать нагрузку на оборудование нашего веб-ресурса. Но это еще не все, ведь клиент получает HTTP-ответ от ближайшего к нему прокси, у которого нужный ресурс есть в кэше, таким образом, время отклика снижается многократно. Если же нужный объект закэширован непосредственно в браузере, результат окажется еще лучше. Также в любой момент можно установить кэширующий прокси на своем сервере (или серверах) и так масштабировать веб-проект. Кэширующие прокси стандартизированы и следует лишь настроить отдачу нужных HTTP-заголовков для управления кэшированием с помощью веб-сервера и

Оптимизация взаимодействия веб-клиента и сервера - Настройка операционной системы

Для нагруженного сайта необходимость настройки сервера мало у кого вызывает удивление, да и для небольших веб-проектов стоит заранее предусмотреть опции защиты от DDOS-атак. По умолчанию Linux-системы имеют сетевые настройки, более подходящие для десктопов, нежели для серверов. Какие-либо общие рекомендации дать сложно, потому предлагаю читателям набор настроек, которые достаточно хороши для "среднего" сервера. /etc/sysctl.conf net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv6.conf.all.accept_source_route = 0 net.ipv4.conf.default.rp_filter=1 net.ipv4.tcp_syncookies=1 net.ipv4.tcp_keepalive_time = 120 net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_keepalive_probes = 5 net.core.somaxconn = 1024 net.core.netdev_max_backlog = 4000 net.ipv4.tcp_max_syn_backlog = 4096 net.i

Оптимизация взаимодействия веб-клиента и сервера - Реверс-прокси

Реверс-прокси это все равно что дворецкий, встречающий гостей в аристократическом замке, и при плохом выборе наш проект поворачивается к посетителям отнюдь не лицом. Современные реверс-прокси также являются и балансировщиками нагрузки, позволяя распределять поступающие запросы по множеству серверов-обработчиков. Среди "чистых" реверс-прокси, не обремененных сторонней функциональностью, стоит назвать Pound и HAProxy . Рассмотрим особенности их использования в реальных проектах. Начнем с Pound, как более простого: Pound позволяет распределять нагрузку между множеством Web-серверов, а также имеет встроенную поддержку SSL. Для небольших проектов Pound будет прекрасным выбором, но при росте проекта может потребоваться его замена. На процессоре уровня Pentium D примерно при 200-300 HTTPS или 600-800 HTTP-запросах в секунду Pound перестает справляться с нагрузкой. Разработчики Pound в ответ на подобные вопросы рекомендуют воспользоваться другими реверс-прокси, пригодными дл

Оптимизация взаимодействия веб-клиента и сервера - Сервера приложений (платформы)

Многие динамические сайты для проектов с высокой нагрузкой используют специализированные веб-сервера со встроенным интерпретатором какого-либо скриптового языка и встроенными средствами оптимизации и масштабирования. Такие системы принято называть серверами приложений : Сервер приложений (англ. application server) — сервер, исполняющий некоторые прикладные программы. Термин также относится и к программному обеспечению, установленному на таком сервере и обеспечивающему выполнение прикладного ПО. Ниже мы предпримем небольшой экскурс в историю и познакомимся с первым или одним из первых серверов приложений, который успешно развивался все эти годы и сегодня является мощной и эффективной системой уровня предприятия. Ссылки в основном ведут на англоязычные ресурсы, потому что в рунете практически нет информации о веб-технологиях 1990-х, активно развивавшихся в США. На самом же деле ко времени появления форка довольно примитивного веб-сервера NCSA HTTPd 1.3 под именем Apache в 1995 год

Оптимизация взаимодействия веб-клиента и сервера - Динамический контент

Что касается раздачи динамического контента ("динамики"), хорошо известным методом является использование CGI-технологии : CGI (от англ. Common Gateway Interface — «общий интерфейс шлюза») — стандарт интерфейса, используемого для связи внешней программы с веб-сервером. Программу, которая работает по такому интерфейсу совместно с веб-сервером, принято называть шлюзом, хотя многие предпочитают названия «скрипт» (сценарий) или «CGI-программа». Сам интерфейс разработан таким образом, чтобы можно было использовать любой язык программирования, который может работать со стандартными устройствами ввода/вывода. Такими возможностями обладают даже скрипты для встроенных командных интерпретаторов операционных систем, поэтому в тех случаях, когда нет нужды в сложной функциональности, могут использоваться простые командные скрипты. Промежуточным решением между CGI и серверами приложений можно назвать технологию FastCGI , позволяющую убрать часть ограничений CGI, но имеющую и свои

Оптимизация взаимодействия веб-клиента и сервера - Статический контент

Image
Введение Зачастую достаточно лишь позаботиться об интенсивном кэшировании статики на стороне клиента (включая сюда кэширующие прокси-серверы интернет-провайдеров), и количество запросов на статику оказывается относительно мало, так что оптимизация этих и так "легких" запросов становится бесполезной. Но что делать, если запросов все равно очень много? Это может быть вызвано как характером контента (например, фотогалерея), так и просто высокой посещаемостью, особенно когда много уникальных посетителей. Легковесность Минималистичные веб-сервера для раздачи статики совсем или почти совсем не требуют настройки, обеспечивая при этом высокую производительность. Одним из действительно простых и эффективных веб-серверов для отдачи статического контента является  fnord : Программа fnord представляет собой миниатюрный HTTP сервер(15k размером), запускаемый посредством TCP суперсервера tcpsvd, tcpserver или другого. fnord хорошо оптимизированный и быстрый, поддерживает передачу методом

Оптимизация взаимодействия веб-клиента и сервера - Введение

Всемирная паутина (www) начиналась с полностью статичных веб-ресурсов, так что пользователи могли лишь просматривать предложенные веб-странички и скачивать файлы. Со временем появлялись все более развитые средства взаимодействия с пользователями, начали использовать кукисы (cookie) для идентификации пользователей, предложили формы обратной связи и форумы. Сегодня многие веб-сайты обзавелись базами данных и активно применяют ajax-технологию для удобства посетителей, и для нас стал привычен термин "веб-приложения". Происходящее сравнимо с революционными изменениями, порожденными открытием книгопечатания, и даже более того - ведь теперь не только информация стала как никогда раньше доступной и глобальной, но и каждый ее потребитель легко и быстро может связаться с автором, включаясь таким образом в процесс создания новой информации. Все это здорово, но техническая часть взаимодействия между веб-приложениями и их пользователями производит впечатление чрезвычайно сложного процесса