HTTP/2 на этом сайте

Submitted by Ромка on Вс, 25/10/2015 - 16:45

Ромка аватар
2131
Vote up!

Обновил на этом сайте nginx до версии 1.9.5 и включил поддержку HTTP/2. Для теста погонял сайт до и после на WebPagetest. Честно говоря, результат измерений не сильно впечатлил, вот результат до:

а вот после:

Но визуально, возможно подсознательно, кажется что сайт стал грузиться шустрее.

Ниже информация о том, что нужно сделать для апгрейда nginx в Ubuntu.

Nginx и HTTP/2

Submitted by Ромка on Втр, 13/10/2015 - 22:41

Ромка аватар

22 сентября 2015 года вышел nginx версии 1.9.5 — это первая стабильная версия nginx с поддержкой HTTP/2.

Какие преимущества дает HTTP/2:

  1. мультиплексированные соединения — теперь весь контент с одного домена скачивается в рамках одного TCP-соединения, а не с помощью нескольких keep-alive соединений. Более того, даже контент с нескольких доменов может быть скачан в рамках одного TCP-соединения при условии, что эти домены имеют общий ip-адрес и SSL-сертификат,
  2. сжатие HTTP-заголовков,
  3. приоритезация — клиент может указать какие из запрашиваемых ресурсов наиболее приоритетны, а ткаже задать зависимости между ресурсами (ресурс Б не будет загружен до тех пор пока не загружен ресурс А),
  4. server push — сервер может сам определять какие ресурсы могут быть затребованы клиентом в ближайшее время (например, на основании собранной статистики) и передавать их клиенту заранее. Клиент в свою очередь может отказаться от приема такого контента,
  5. flow control — клиент может попросить сервер временно снизить скорость загрузки того или иного ресурса, или остановить загрузку полностью. Это полезно в случае, например, если юзер нажал паузу во время загрузки и просмотра видео.

С новым HTTP/2 устаревают такие best practice из HTTP/1.1 как шардирование доменов (загрузка статического контента с нескольких поддоменов одного домена), использование спрайтов изображений, объединение нескольких маленьких js/css файлов в один. Более того, эти практики теперь превращаются в антипаттерны: шардить домены нет смысла, так как данные будут загружены быстрее в рамках одного соединения с мультиплексированием и приоритезацией, спрайты и объединение файлов мешают кешированию — при обновлении одного из файлов браузеру заново придется загузить весь большой объединенный файл вместо одного изменившегося.

Стандарт HTTP/2 не требует обязательного использования TLS, однако современные браузеры включают HTTP/2 только для шифрованных соединений. Связано это, во-первых, с тем, что на шифрованных соединениях больше выигрыш от использования новой версии протокола, так как TLS handshake это достаточно тяжеловесная операция, а в случае использования HTTP/2 будет установлено всего 1 соединение с одним источником. Во-вторых, браузер и веб-сервер должны как-то сообщить друг другу о поддержке HTTP/2, а это легко сделать в рамках TLS handshake без добавления лишних запросов к серверу.

P.S. Прикрутил сегодня к этому блогу SSL-сертификат и планирую в ближайшее время обновить используемый веб-сервер, чтобы добавить поддержку HTTP/2.

P.P.S С помощью вот этого плагина для Хромиума и всех его форков можно отслеживать какие сайты уже используют HTTP/2 или его предшественника SPDY.

P.P.P.S. Вот ссылка на пост в официальном блоге nginx с описанием возможностей HTTP/2 и ссылками на дополнительные полезные документы.

GNU parallel и xargs. Параллельный запуск нескольких копий команды с разными аргументами

Submitted by Ромка on Сб, 19/09/2015 - 16:07

Ромка аватар

Задача

GNU Parallel
Есть консольная команда вида:

./do-something.sh -x 1

Значение аргумента x может меняться в диапазоне от 1 до 30 000. Выполнение команды для одного аргумента занимает от 30 секунд до 15 минут. Нужно максимально быстро выполнить эту команду для заданного диапазона аргументов на N-ядерном сервере максимально используя ресурсы сервера.

Возможные варианты решения

  1. Простой цикл от 1 до 30 тысяч с запуском команды на каждой итерации будет использовать только 1 ядро. Это решение неприемлемо: оно будет работать слишком долго и не задействует все доступные ресурсы сервера.
  2. Можно вручную разбить диапазон на N частей и запустить N циклов вида:
  for i in `seq 1 1000`
  do
      ./do-something.sh -x $i
  done

 
Второе решение лучше первого — оно задействует все доступные ядра процессора, но оно все равно неприемлемо. Команды выполняются с непостоянной скоростью. В каком-то из диапазонов могут попасться только легкие команды, которые выполнятся, предположим, за несколько минут, а в каком-то — тяжелые и их выполнение затянется на несколько часов. Таким образом, часть ядер быстро освободится, будет простаивать и ресурсы сервера опять будут использованы неоптимально.

Поездка в Ирландию: гэльский футбол, виски и день святого Патрика

Submitted by Ромка on Вс, 22/03/2015 - 17:01

Ромка аватар

Ирландия — это небольшое государство, занимающее большую часть одноименного острова на севере Европы. Оставшуюся часть острова занимает Северная Ирландия, входящая в состав Великобритании. В столице Ирландии — Дублине — живет около 1 миллиона человек, а мне довелось посетить второй по величине город — Корк — с населением около 250 тысяч (так и хочется добавить "уников в сутки") человек.

Первое что бросается в глаза еще на подлете это то насколько Ирландия зеленая страна. Весь остров покрыт зеленью и это несмотря на март и температуру около 5 °С. Города в Ирландии малоэтажные, на окраине Корка дома не превышают 2 этажей, ближе к центру редко могут достигать 4-5 этажей. Здесь же, в Корке, находится самое высокое здание в Ирландии — 17 этажей и 71 метр высотой. И это, я напомню, второй по величине город Ирландии. За время моей поездки я успел посетить еще 2 города — Килларни и Мидлтон (до Дублина пока не добрался), здесь таких "небоскребов" и вовсе нет.

Вторая особенность, на которую я обратил внимание — обогрев помещений. Центрального отопления, как я понял, тут нет, каждый выкручивается как может. Поэтому по утрам в ресторане отеля приходилось сидеть в верхней одежде, так как недавно включенный сотрудниками обогреватель еще не успевал прогреть помещение. В офисе (забыл уточнить, ездил я сюда по работе) у нас был свой обогреватель, поэтому работать можно было вполне комфортно, а вот в коридоре и на кухне стоял дубак.

Вообще, местные производят впечатление закаленных людей. Тогда как я ёжился от холода, надевал шапку и потуже затягивал капюшон ирландцы запросто могли гулять вообще без шапок и курток.

Новые впечатления о Чехии

Submitted by Ромка on Сб, 04/10/2014 - 16:12

Ромка аватар
6799
Vote up!

Пишу продолжение поста Первые впечатления о Праге.

Обмен валюты

С честными обменными пнуктами в центре Праги туго. Все обменники можно разделить на 3 типа. Первый тип обменников берет комиссию с операций от 5 до 20 (!!!) процентов. Второй тип предлагает сильно заниженный курс обмена: при реальной цене примерно в 27,60 крон за евро такие обменники предлагают по 19-20 крон за евро. При этом такие обменники часто завлекают большой надписью типа "комиссия 0%". И только третий, честный, тип предлагает более или менее адекватный курс (около 27,20 крон за евро) и нулевую комиссию.

Такими драконовскими тарифами на обмен валюты могут похвастаться и обменные пункты под вывеской с громким брендом типа Western Union. Поэтому всегда важно уточнять у кассира сколько крон он даст в обмен на вашу валюту.

Разумеется, весь центр города утыкан обменниками первого и второго типа, а честные обменные пункты нужно поискать (они есть, только обычно не на самом видном месте). И, несмотря на совершенно невыгодный курс, я не раз замечал людей пользующихся их услугами.

Введение в Content Security Policy (CSP)

Submitted by Ромка on Сб, 06/09/2014 - 18:58

Ромка аватар

Content Security Policy
Перевод статьи Майка Веста An Introduction to Content Security Policy от 15 июня 2012 года. Несмотря на то, что статье уже больше 2 лет, информация все еще актуальна и полезна. Об интересном опыте внедрения CSP в Яндексе можно почитать в этой статье.


Модель безопасности в вебе базируется на политике одинакового источника (same origin policy). Только код сайта https://mybank.com должен иметь доступ к данным https://mybank.com, а https://evil.example.com ни при каких условиях не должен получить такого доступа. Каждый источник остается изолированным от остального веба, что дает разработчикам безопасную песочницу, в которой можно разрабатывать и экспериментровать. Теоретически, это бриллиант без изъяна, но на практике, злоумышленники могут найти способы обойти эту систему.

Например, такие атаки как межсайтовый скриптинг (Cross-site scripting, XSS) позволяют обойти политику одного источника, обманным путем заставив сайт доставить вредоносный код вместе легитимным контентом. Это большая проблема, так как браузеры доверяют всему коду, который показывается на странице, так как он является частью страницы доставленной из доверенного источника. XSS Cheat Sheet — это старый, но весьма актуальный список методов, которые могут быть использованы злоумышленниками для внедрения зловредного кода. Если злоумышленнику успешно удается внедрить любой код в страницу, то игру можно считать оконченной: данные сессии пользователя становятся скомпроментированными и информация, которая должна оставаться в секрете, попадает в руки к Плохим Парням™. Мы, конечно же, хотим предотвратить такую возможность.

Этот туториал освящает один многообещающий механизм защиты, который может значительно снизить риск и вред от XSS-атак в современных браузерах — Content Security Policy (CSP).

Мифический человеко-месяц

Submitted by Ромка on Ср, 03/09/2014 - 22:46

Ромка аватар

Прочитал книгу Фредерика Брукса "Мифический человеко-месяц" и хочу поделиться выдержками из книги, которые показались мне наиболее значимыми.

Заголовки к цитатам, в основном, оставлены мною, часть из них скопировано из книги. Полужирным я выделил по моему мнению особенно интересные мысли.


Во многих отношениях управление большим проектом разработки программного обеспечения аналогично любому другому крупному начинанию - в большей мере, чем обычно считают программисты. Однако во многих отношениях имеет отличия - в большей мере, чем обычно предполагают профессиональные менеджеры.

Первые впечатления о Праге

Submitted by Ромка on Вс, 31/08/2014 - 14:22

Ромка аватар
6873
Vote up!

Ближайшие пару месяцев я проведу в Праге. Я приехал сюда несколько дней назад по делам и хочу зафиксировать свои первые впечатления. Так как поездка деловая, то в рабочее время я нахожусь в офисе и только оставшуюся часть рабочих дней и выходные могу посвятить туристическим делам.

Дороги, транспорт и пробки

Дорога от съемной квартиры до офиса занимает 15 минут, из них 9 минут на автобусе, а оставшееся время — это путь от дома от остановки и остановки до офиса. Тут надо уточнить, что офис и квартира находятся в одном районе, но, я уверен, что даже из разных частей города дорога между офисом и домом не занимала бы более получаса. По московским меркам это просто сказочные условия.

Автобусы ходят точно по расписанию и всегда полупустые (подчеркну, что это мое первое впечатление о единственном маршруте, не исключаю, что не везде все так радужно), и это несмотря на то, что дороги здесь не шире чем двухполосные, а местами из-за ремонта и того уже. Пока единственный раз когда я был вынужден потолкаться в пробке — это в субботу по пути в центр. Вообще, забегая вперед, скажу, что не припоминаю где-либо еще таких толп туристов как в Праге. Карлов мост в 11 утра в субботу еще более-менее можно посмотреть, а вот в 3 часа дня он напоминал переход на Серпуховской в утренний час пик — люди-пингвины медленно двигаются вперед равномерной толпой.

Дальше еще немного подробностей и фотографий

Перевод книги "PHP Internals Book"

Submitted by Ромка on Чт, 19/06/2014 - 17:40

Ромка аватар
5261
Vote up!

Взялся за перевод на русский язык книги "PHP Internals Book". Книга посвящена внутренней логике работы интерпретатора PHP и в первую очередь будет интересна разработчикам на языке C, которые хотят научиться писать расширения для PHP, но и PHP-разработчики, думаю, найдут для себя немало полезной информации.

Перевод является неофициальным (хотя и сделан с разрешения авторов), так что все камни о качестве перевода кидать в меня.

Почитать книгу онлайн можно тут: http://romka.gitbooks.io/php-internals-book-ru/, скачать в формате для читалок тут: https://www.gitbook.io/book/romka/php-internals-book-ru, помочь с переводом тут: https://github.com/romka/phpinternalsbook-ru.

На данный момент переведена только одна глава, но я продолжаю работу.

Важно учитывать, что структуры данных, описанные в книге, актуальны для современных версий PHP (на данный момент это PHP 5.5). Если один из следующих релизов будет слит с веткой phpng, то часть структур и алгоритмов, описанных в текущей версии книги, устареют.

Об области видимости переменных

Submitted by Ромка on Пнд, 12/05/2014 - 12:21

Ромка аватар

Цитата из книги Стива Макконелла "Совершенный код":

Разница между философией «удобства» и философией «интеллектуальной управляемости» сводится к различию между ориентацией на написание программы и ориентацией на ее чтение. Максимизация области видимости может облегчить написание программы, но программу, в которой каждый метод может вызвать любую переменную в любой момент времени, сложнее понять, чем код, основанный на грамотно организованных методах. Сделав данные глобальными, вы не сможете ограничиться пониманием работы одного метода: вы должны будете понимать работу всех других методов, которые вместе с ним используют те же глобальные данные. Подобные программы сложно читать, сложно отлаживать и сложно изменять.

Страницы

Subscribe to Ромка!eu RSS