Популярные "грабли"

в веб-разработке

Web-development meetup

Таганрог, 2016

Привет, меня зовут Евгений.

 

И я хочу рассказать

про типовые ошибки

веб-разработчиков.

Откуда все это?

  • 15 лет с знакомства Open Source
  • примерно столько же сисадмин
  • C/C++, PHP, Ruby, Shell
  • 8 лет "техдиром" в веб-студии

А еще очень много часов debug'а и доработки напильником.

Оптимизация

  • Nginx для статики
  • блокировка таблиц и InnoDB/XtraDB
  • индексы и рост данных в базе
  • explain и profiling в MySQL
  • миллионы файлов в папке, файлы сессий
  • профилирование XHProf, "полезная" Pinba

Это обязательно пригодится.

                                                Ваш К.О.

Оптимизация / Nginx

  • Nginx очень быстрый. Честно)
  • Расходы на отдачу статики низкие
  • Apache = "забивать гвозди микроскопом"
  • Меньше запросов к "бэкенду"
  • Может помочь в борьбе с http-флудом
  • Много модулей (pagespeed, naxsi)

Тут респект Игорю Сысоеву!

Оптимизация / MySQL

  • MyISAM блокирует все, может InnoDB?
  • InnoDB и buffer pool, меньше IOPS
  • Познакомтесь с Query Cache
  • А если рост данных в 10-20 раз?
  • EXPLAIN и индексы "под капотом"
  • SHOW PROFILE FOR QUERY

Вы не любите кошек? Да вы просто не умеете их готовить!

                                                 (с) Альф

Оптимизация / Диски

  • Диски = "неожиданно медленно"
  • Долго "читать" огромный каталог?
  • Иерархия папок при хранении
  • Фрагменты хэша как имена каталогов
  • PHP сессии - тоже много файлов

Однажды мы удаляли более

      40 миллионов  файлов ... ~9 дней.

Оптимизация / PHP

  • XHProf и "бутылочное горлышко"
    • ​легко подключается в код
    • не включайте для всех в production
  • Метрики работы кода
    • ​Pinba как self-hosted
    • NewRelic и другое коммерческое

Ну и не забываем, что TIMTOWTDI.

Отказоустойчивость

  • inline запросы
  • опять рост данных
  • где и что кэшировать
  • большие цифры в настройках
  • мониторинг ресурсов и метрик

Если какая-то неприятность может произойти, она непременно случится.

                                   Закон Мерфи

Отказоустойчивость / Сеть

  • сеть может и будет лагать
  • inline запросы по HTTP (внешнее API)
  • отправка почты вместо "очереди"
  • не бывает "лишних" timeout'ов

Надёжность оборудования обратно пропорциональна числу и положению лиц, за ним наблюдающих.

                             Закон Уатсона​

Отказоустойчивость / Данные

  • ваш компьютер != production сервер
  • рост данных в 10-20 раз (ага, опять)
  • кэширование (файлы/memcached/nginx)
  • мне нужно логгировать все всегда
  • привычка дебажить на production

Чтобы учиться на своих ошибках, нужно сначала понимать, что вы совершаете их.

                              Закон Филона

Отказоустойчивость / Ресурсы

  • поставлю в конфиге цифры побольше
    • MaxClients 100500 (Apache)
    • max_connections = 10000 (MySQL)
  • лимиты только мешают (PHP)
    • memory_limit = -1
    • max_execution_time = 0

Если ничто другое не помогает, прочтите, наконец, инструкцию!

                                  Аксиома Кана

Отказоустойчивость / Советы

  • root для админства, а не для деплоя
  • мониторинг метрик полезен всем
  • мониторинг без алертов = 0
  • бэкапы - нет/есть/тестирование
  • заведите себе devel площадку
  • параметры production = параметры devel 

И проверяйте автозапуск

сервисов   (>,<)

Безопасность

  • полномочия и доступ
  • публичные и приватные ресурсы
  • утечка внутренней информации
  • обновления и уязвимости

А теперь все достаем шапочки из фольги ¯\_(ツ)_/¯

Безопасность / Доступ

  • chown -R 777 - плохо, потому что опасно
  • владелец файлов != юзер веб-сервера
  • writeable выше DocumentRoot
  • http-авторизация для всего "служебного"
  • минимум открытых портов + fail2ban

Враги везде – это вам каждый параноик скажет.

                             Михаил Мамчич

Безопасность / Утечка

  • "Security through obscurity" - это наивно
  • никаких backtrace/warning'ов для всех
  • отключайте autoindex для каталогов
  • неожиданности в поисковом индексе

Кстати, ваши браузеры "стучат" на родину (¬º-°)¬

Безопасность / Советы

  • регулярные обновления ПО
  • Suhosin для PHP, логи вызова mail()
  • cron под юзером, а не под root
  • Content Security Policy (+report-uri)

От осторожности до паранойи всего один шаг ಠ‿ಠ

Рекомендации

  • HTTPS из-за требований Google
  • SPDY или HTTP/2 ради "скорости" сайта
  • Pagespeed или оптимизация вручную
  • AntiDDoS с первых дней в паблике
  • DKIM/DMARC/SPF для почты

- Nobody is perfect.

- I'm nobody.