Популярные "грабли"
в веб-разработке
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.
Типовые ошибки веб-разработчиков
By Evgeniy K.
Типовые ошибки веб-разработчиков
Небольшие заметки со стороны админа.
- 1,609