Настройка сервера

Краткий гайд про то, как можно настраивать nginx, php-fpm и mysql для оптимального потребления ресурсов сервера.

В прошлом году я рассказал про антипаттерн, который приводит к плохому быстродействию сайтов и является одной из самых частых проблем быстродействия проектов. Второй такой причиной является отсутствие настройки целиком или плохие настройки программного обеспечения. Многие программы по-умолчанию настроены так, чтобы работать на очень слабых по современным меркам серверах, и не могут использовать все доступные мощности. Если максимально использовать ядра процессора и свободную оперативную память, сервер может выдерживать очень серьёзные нагрузки. Этот пост о том, как можно настроить nginx, php-fpm и mysql-совместимую базу данных, чтобы выжать максимум из железа.

Настройка Nginx

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

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

Если вы хостите php сайты, то вам необходимо добавить примерно такой кусочек, который можно назвать php.conf:

Имейте в виду, что следует продумать, какие именно php файлы вы хотите исполнять, и, возможно, ограничить их одним файлом или директорией.

Для современных CMS и фреймворков, которые используют паттерн FrontController, вам нужно направлять все запросы на файл index.php. Ниже вариант конфига для WordPress и пара вариантов для фреймворков:

Вот два сайта, которые служат хорошим источником информации про nginx:
http://nginx.org/en/docs/
https://www.nginx.com/resources/wiki/

Настройка PHP-FPM

Настройка php-fpm — самая простая вещь. Задача заключается в том, чтобы посчитать, какое максимальное количество процессов запустить на вашем сервере. Математика следующая:

pm.max_children = (Общее количество свободной RAM — Резерв для системы) / Размер памяти для одного процесса.

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

Узнать средний размер потребления памяти для php процесса можно так:

500 мегабайт мы оставляем в резерв системе, тоже довольно гибкая цифра, её можно увеличить, если кажется, что 500 мегабайт недостаточно для нормальной работы.

Чаще всего я встречал использование динамического процесс менеджера, как наиболее гибкий вариант. Ниже я привожу пример конфигурации для сервера с 16 ГБ памяти. С учетом базы данных и прочего софта, у нас остаётся 6 ГБ свободной памяти, а команда показала, что в среднем наш процесс потребляет 90 мегабайт.

Новые настройки войду в силу после перезагрузки сервиса.

Настройка MySql

Настройки mysql-совместимой базы содержатся в файле my.cnf. Ниже опции, которые имеет смысл отредактировать:

Как узнать, сколько наш диск может операций в секунду:

В таблице результатов нас интересует среднее между read iops и write iops, значение в конфигурации для базы не должно превышать цифры в результатах.

После любых изменений, следует промониторить потребление процессоров и память, быстродействие. Иногда, приходится корректировать цифры, потому что расчётные значения могут не соответствовать реальным цифрам. Также не забывайте, что проверять следует на реальной нагрузке, цифры при спящем трафике могут разительно отличаться от полноценной дневной нагрузки. Самый просто способ — команда top, более продвинутые и удобные способы мониторинга — сервисы вроде NewRelic или Nginx Amplify

Надеюсь, это информация поможет вам при настройке вашего сервера.

Как легко читать больше пяти книг каждый месяц?

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

А вы читаете книги?

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

books-1655783_1280

Выход есть!

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

18223027523_19f3a51cb2_b

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

  1. Отфильтровать все новостные ресурсы, оставив только новости, связанные с вашей работой или основным интересом;
  2. Убедиться, что вы получаете информацию из соц. сетей только от людей, которые важны для вас;
  3. Выделить себе время раз или два в день, когда вы готовы просмотреть эту подготовленную для вас информацию, стараясь не тратить более получаса на это;
  4. Отключить все отвлекающие вас на новости и социальные сети уведомления. Теперь, когда у вас есть расписание, вам не нужно сразу же всё проверять — у вас будет на это время.

На самом деле это очень сложно сделать, но если у вас получится, вы приобретёте гораздо больше времени на чтение книг и освободите внимание от лишней информации

Где достать аудио книги?

screen

Лично я пользуюсь сервисом Audible.com, который позволяет довольно легко и удобно покупать и прослушивать книги на твоих устройствах. Я советую вам активировать 30-дневный пробный период, который позволит вам приобрести две бесплатные аудиокниги. Учтите, что если вы передумаете, вам нужно будет отказаться до того, как пройдёт 30 дней, иначе произойдёт автопродление подписки. Однако не все книги есть в этом сервисе, поэтому не стоит себя ограничивать только одним источником. Например, эта подборка содержит множество сайтов, где можно бесплатно скачать материалы. На худой конец Гугл всегда поможет найти аудиоверсию, а проявив изобретательность, иногда можно найти совершенно удивительные версии, например, «Комедию» Данте на итальянском языке.

Зачем решать задачи для программистов?

Рассказываю, какую пользу приносит решение задач для программистов.

Мне очень нравится сайт codewars.com. На нём представлены задачи для программистов самой разной сложности. Большое количество языков и возможность посмотреть чужие варианты решения для меня — очень крутые возможности сайта. В этой заметке, я объясню, почему каждый программист должен решать хотя бы одну задачу в день.

Задачи будут держать ваш мозг в тонусе

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

Вы будете лучше знать язык

Многие задачи заставили меня читать документацию, потому что оказалось, что с ходу я не могу вспомнить многие названия функций/методов. Например, в начале попалась задача для JavaScript — написать функцию, которая переводит число из десятичной системы счисления, в двоичную. Я стал вспоминать школьные уроки информатики, как мы записывали руками в тетрадку единички и нолики и написал такой алгоритм. Когда я отправил решение и стал смотреть чужие — я ахнул! Оказалось, что самое простое решение просто использует второй параметр функции parseInt(string, radix). Я вообще не знал, что у этой функции есть второй параметр. Более того, если его не использовать, могут быть проблемы с тем, как будет интерпретироваться строчка.

Другой пример любопытного кода на Javascript. Простая задача по написанию функции, которая считает объём конуса. Результат нужно было округлить вниз. Я вполне разумно использовал Math.floor(num), но, как оказалось, округлить можно и другим способом — использовав два раза битовую операцию NOT, которая в языке совершается через двойную тильду ~~. При этом, согласно некоторым бенчмаркам, такая операция совершается быстрее, чем вызов Math.floor():

В качестве третьего примера приведу задачу, где нужно было создать код, который позволял был делать что-то вроде:

Понятно, что решением такой задачи является каррирование, но как его реализовать с нуля в JavaScript? Ответа я не знал, зато в гугле нашёл отличную статью на эту тему — https://medium.com/@kevincennis/currying-in-javascript-c66080543528#.o5a0hf9z0

Вы будете внимательнее читать условия задачи

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

Ask a small girl — «How old are you?». She always says strange things… Lets help her! For correct answer program should return int from 0 to 9 😉 Assume test input string always valid and may look like «1 year old» or «5 years old», etc.. The first char is number only =)

Моё решение брало первый символ строчки, преобразовывало его в целое и возвращало. А самый топовый вариант решения выглядит вот так:

И это годится именно по текущим условиям задачи.

Это интересно, полезно для кругозора и для будущего

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

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

Наконец, это действительно интересно, очень приятно, когда твоё решение наконец-то проходит все проверки и вы можете сказать, что да, я решил эту задачу!

Dark Patterns — как обмануть своего пользователя с помощью UI

Как дизайнеры интерфейсов обманывают своих пользователей.

hqdefault

Обзорная статья о явлении в целом:
http://arstechnica.com/security/2016/07/dark-patterns-are-designed-to-trick-you-and-theyre-all-over-the-web/

Интересный сайт с коллекцией трюков, которые дизайнерами интерфейсов, чтобы ввести своих пользователей в заблуждение и заставить их сделать определенное действие. К сожалению, коллекция не очень активно пополняется, но всё равно, очень интересно.
http://darkpatterns.org/

Ещё один обзор таких паттернов:
http://www.90percentofeverything.com/2013/07/23/the-slippery-slope/

Полезные ссылки о доступности (accessibility)

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

stencil.blog-post-feature (3)

Хороший обзор того, как можно повысить доступность сайтов, включая чеклисты: https://teachaccess.github.io/tutorial/

Ещё один сайт с полезными постами про доступность:
http://a11yproject.com/

Черновик стандарта HTML:
https://www.w3.org/TR/aria-in-html/

Проверка React компонентов на доступность:
https://github.com/reactjs/react-a11y

ГОСТ Р 52872-2012 Интернет-ресурсы. Требования доступности для инвалидов по зрению:
http://docs.cntd.ru/document/1200103663

Приказ Минкомсвязи от 11.03.2016 на тему доступности:
http://www.minsvyaz.ru/ru/documents/4930/