CAT | Web2
Для начала расскажу, как обычно работают сервера:
- Создаётся сокет, который слушает порт
- Вызывается системный вызов accept, который берёт первого клиента из очереди соединений, а если его нет – то блокирует приложение до тех пор, пока он не появится
- Приложение что-то делает с этим клиентом и в конце концов с ним прощается
- goto пункт два
nginx и lighttpd использует вместо accept функции select/kevent/epoll, которые позволяют работать со многими клиентами одновременно, но это уже отдельная история (к асинхронным веб-серверам accept-фильтры применимяются точно так же)
Accept-фильтры – это модули ядра FreeBSD, которые не говорят, что сокет готов до тех пор, пока не выполнится какое-то условие. Я нашёл только два фильтра:
- dataready – accept блокирует сокет до тех пор, пока в него прийдут данные. Когда мы получаем сокет, мы уже точно можем из него что-то считать
- httpready – сокет блокируется до тех пор, пока не прийдёт полный GET/HEAD запрос. Соответственно, нам не надо тратить время на переключение контекста, если запрос ещё не собрался.
Остановимся на фильтре httpready
Буферизирует он только GET и HEAD запросы, так как в POST/PUT может прийти 600мегабайтный порнофильм.
Итак, подключаем модуль accf_http:
kldload accf_http
echo 'accf_http_load=”YES”' >> /boot/loader.confДалее нужно изменить работу с сокетом — установить опцию httpready:
struct accept_filter_arg afa; bzero(&afa, sizeof(afa)); strcpy(afa.af_name, "httpready"); setsockopt(sok, SOL_SOCKET, SO_ACCEPTFILTER, &afa, sizeof(afa));
Результаты тестов
Так как существует мнение, что accept-фильтры бесполезны, мы решили провести тестирование. Веб-сервер был выбран AnyEvent::HTTPD, клиент – ab. Итак, результаты:
- локальная машина, 10000 запросов, concurrency = 4: httpready даёт прирост в 10%
- локальная сеть, 10000 запросов, concurrency=1000: httpready даёт прирост в 10%
- локальная сеть, 10000 запросов, concurrency = 4: прирост в 25%
- локальная сеть, 1000 запросов, concurrency = 1: в два раза!
В боевых условиях, при наличии GPRS, 256k и прочего позора цивилизации, скорость ещё увеличится.
Настройка веб-серверов
В apache 1.3+ и nginx accept-фильтры поддерживаются.
Apache под FreeBSD изначально содержит такую конфигурацию:
AcceptFilter http httpready AcceptFilter https dataready
и менять её не стоит.
А вот в настройках сервера nginx стоит добавить опцию
accept_filter "httpready";
Ссылки
- статья Игоря Сысоева
- man accf_http
- man accf_data
Из новшеств замечено только одно – админка перестала работать под IE6. В остальном всё так же. Настоятельно советую обновиться лишь тем, кому совсем нехер делать
PD: обновился)
Из изменений:
- Собственный парсер результата. Сейчас правильно показывается степень, подсвечиваются неизвестные.
- Правильно понимаются валюты. У них отображается название, научился понимать знак $
- При наборе подсказка не только парсит и расставляет функции, а ещё и показывает помощь по аргументам
- Поправил мелкие баги, связанные с показом несуществующих ошибок
это первый пост, который я пишу из WP-2.7beta1.
Изменился весь дизайн админки. Она стала лучше с точки зрения юзабилити (всё перед глазами, а добавить пост можно вообще в один клик), но дизайн стал каким-то серым и угрюмым. Есть много замечательных людей, которые и без дизайна мне настроение портят. Не хватало ещё, чтобы WordPress этим занимался.
Так же ворпресс научился самообновлять ядро. Система такая же, как и с плагинами.
Пока это всё что я заметил.
Для тех, кто не знает, что такое Wordpress, объяснение здесь
Как правило для сайтов нужен какой-то однообразный набор иконок для базовых событий – добавление, удаление чего-то итд итп
Так вот. Я знаю уже два набора иконок, которые пригодятся при веб-разработке
- Silk icons (http://famfamfam.com)
- Fugue icons (http://www.pinvoke.com/)
Для тех, кому я ещё не проел мозги рассказами про этот замечательный браузер.
Это – социальный браузер на основе Firefox. Умеет из которобки работать с:
- соцсетями (список друзей, оповещения итд итп)
- блогами (WordPress, Blogger, Twitter, LJ)
- фотовидеогаллереями (Picasa, Flickr, Youtube)
- вебпочтой (Gmail, AOL, Yahoo)
- закладочными сервисами (Delicious)
Все сервисы флока – это простые JS-файлы. И можно без проблем дописать поддержку понравившегося.
Расширения к нему подходят те же, что и к Firefox 3.
Полгода назад я пользовался только Flock-ом. С выходом Firefox 3 перешёл на неё. И мечтал о Flock-е на движке 3-го Firefox. Мечта идиота свершилась – навую версию можно скачать с
Посмотрим, что из этого получится.
Только этот API должны начать поддерживать. Хотя довольно прикольно – ты сидишь, пыришься в ленту, а тебе в реалтайме подкружаются новые посты и комменты к ним.
Тонкий намёк на http://friends.rambler.ru

