Содержание
- 2. «На старт…»
- 3. Разные классы сайтов и веб-сервисов: Домашние странички, личные блоги и т.п. «Продающие» сайты (интернет-магазины) Имиджевые сайты
- 4. На старте проекта заказчик и разработчик могут не знать, каким он станет, но должны заранее определить
- 5. Новый проект – какой он? Определяют требования заказчика Если сам заказчик не сумеет определиться с требованиями,
- 6. Почему сайт должен быть всегда доступен? Клиенты и их лояльность (сайт недоступен – потеряны заказы). Индексация
- 7. Не бывает «почти круглосуточно» Технические работы должны проходить незаметно для клиентов: Сервисные работы Замена оборудования Обновления
- 9. Почему сайт должен быть быстрым? Замедление загрузки страницы на 1 секунду снижает конверсию на 7%, а
- 10. «Внимание…»
- 11. Виды хостинга Виртуальный (shared) VPS Dedicated/Colocation «Облако»
- 12. Эксплуатация: выбор инфраструктуры Риски: Взять слишком много и переплатить (не можем заранее спрогнозировать потребление ресурсов) Взять
- 13. Виртуальный (shared) хостинг Самый простой вариант Хороший хостинг снимает практически всю головную боль (бэкапы, резервирование и
- 14. «Железо» VS. «Облако»
- 15. Экономия? Самый частый посыл к переходу на «облака» вообще (и IaaS – в частности) – уменьшение
- 16. Не дешевле? В прямом сравнении железа и аналогичного по конфигурации облака – облако почти всегда проигрывает
- 17. Где реальная экономия? Нет инсталляционных платежей (для больших проектов – если речь идет о покупке собственного
- 18. Масштабирование в облаке? Без готовности приложения к масштабированию – не имеет практического смысла
- 19. Масштабирование
- 20. Надежность? Виртуальные машины ребутятся чаще физического «железа». Amazon AWS – как минимум: апрель 2011, август 2011,
- 21. Можно побольше ресурсов? Есть выделенные ресурсы – RAM, CPU, HDD: попросил-выделил-заплатил; Есть разделяемые ресурсы – кэш
- 22. Инфраструктура: «Железо» vs. «Облако» Затраты (время) на обучение сотрудников специфике конкретного сервиса Ограничения инфраструктуры (аппаратная часть,
- 23. Инфраструктура: «Железо» vs. «Облако» Медленные диски Нельзя гарантированно получить некоторые ресурсы Ложное ощущение гарантий безопасности и
- 24. Безопасность и надежность Дополнительные сервисы (например, Amazon S3) Доступность – 99.99% Надежность – 99.999999999% ACL Версионность
- 25. Зачем нам нужен cloud storage? Снижаем стоимость эксплуатации Можем использовать совместно с CDN Снижаем нагрузку на
- 26. …и другие сервисы: Автомасштабирование Мониторинг Балансировщики Облачные базы данных Облачные NoSQL Облачный кэш …
- 27. Немного нюансов настройки веб-сервера
- 28. Типовые ошибки/проблемы/недостатки конфигурации: PHP как CGI (не путать с FastCGI) open_basedir Не установлен прекомпилятор PHP Недостаточно
- 29. Веб-приложение Кэширование на диск База данных Традиционное устройство веб-приложения
- 30. Одноуровневая схема Каждый запрос – обычно отдельный процесс Любой процесс может обработать любой запрос (статика, скрипт)
- 31. Узкие места Отдача контента – медленные каналы Производительность PHP (в том числе – запросы к внешним
- 32. Если оставить все «по умолчанию»? По умолчанию MaxClients в Apache 2.x – 256 Если PHP может
- 33. Двухуровневая схема Frontend – чаще всего nginx Backend – Apache, PHP-FPM
- 34. Некоторые ключевые моменты настройки Backend 192.168.1.1:8888 + Можно обращаться снаружи мимо фронтенда - Могут возникнуть лишние
- 35. Backend StartServers 10 MinSpareServers 10 MaxSpareServers 20 MaxClients 20 MaxRequestsPerChild 500 Обрабатывать только «свое» (проверить лог
- 36. Frontend # cat /proc/cpuinfo | grep "processor" | wc -l worker_processes 8; # max_clients = worker_processes
- 37. Frontend # больше - больше памяти, меньше - чаще пишем на диск client_body_buffer_size 4m; # максимально
- 38. А без Apache? PHP-FPM upstream backend { server unix:/opt/php/var/run/php1.sock; server unix:/opt/php/var/run/php2.sock; server unix:/opt/php/var/run/php3.sock; } http://nginx.org/ru/docs/http/ngx_http_fastcgi_module.html Найти
- 39. А без Apache? PHP-FPM location ~ \.php$ { root /var/www/chroot/var/www/html; fastcgi_intercept_errors on; fastcgi_pass backend; fastcgi_index index.php;
- 40. php-fpm.conf ; рестартовать при ошибках emergency_restart_threshold = 1 emergency_restart_interval = 10 [www1] listen=/opt/php/var/run/php1.sock # echo 10240
- 41. php-fpm.conf request_slowlog_timeout = 5 slowlog = /opt/php/var/log/www.slow_access.log ; не open_basedir в php.ini !!! chroot = /var/www/chroot
- 42. Прекомпиляторы Zend Optimizer+ (Zend Server) – самый быстрый… и самый «непрозрачный» eAccelerator APC extension=apc.so apc.enabled=1 apc.max_file_size=5M
- 43. apc.php
- 44. Итог Система стабилизирована по памяти Нет деградации системы при возрастающей нагрузке – обслуживаем максимум запросов, остальные
- 45. Немного нюансов настройки базы данных
- 46. Приоритет Производительность? Надежность? Вместе – не получается…
- 47. Что может оказаться «узким местом»? CPU? RAM? Диск? Всё!
- 48. Любое решение выбирается, исходя из конкретной поставленной задачи. Для работы MySQL используем InnoDB. Следовательно, необходимо эффективно
- 49. Диагностика top free iostat –x 2 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await
- 50. Диски и tmpfs # cat /etc/fstab # tmpfs /dev/shm tmpfs defaults 0 0 /dev/md0 /mnt/ext4_raid10_8 ext4
- 51. MySQL? MySQL MariaDB Percona Server
- 52. Percona Server Оптимизирован для работы с медленными дисками Быстрый рестарт базы (Fast Shut-Down, Buffer Pool Pre-Load)
- 53. Сбалансированность по памяти Размер глобальных буферов: key_buffer_size + tmp_table_size + innodb_buffer_pool_size + innodb_additional_mem_pool_size + innodb_log_buffer_size +
- 54. Надежность default-storage-engine = innodb # самый надежный sync_binlog = 1 # hint: писать на отдельный раздел
- 55. Надежность innodb-file-per-table # Percona innodb_lazy_drop_table = 1 Но… Очень ресурсоемкие операции schema changes (ALTER TABLE…, DROP
- 56. Скорость # временные таблицы – в памяти tmpdir = /dev/shm # меньше DNS запросов skip-name-resolve #
- 57. Query cache # много – тоже плохо query-cache-size = 128M query-cache-limit = 2M mysql> SHOW STATUS
- 58. InnoDB & buffer pool # желательно – по объему таблиц innodb-buffer-pool-size = 4000M # если buffer
- 59. InnoDB, buffer pool – на что ориентироваться mysql> SHOW ENGINE INNODB STATUS\G ---------------------- BUFFER POOL AND
- 60. Борьба за долгие запросы log-output = FILE slow-query-log = 1 slow-query-log-file = mysql_slow.log long-query-time = 1
- 61. Одиночные медленные запросы Одиночный медленный запрос всегда работает медленно Его просто найти (slow.log) Его просто изучать
- 62. Подробная статистика без Перконы mysql> SHOW PROFILES; Empty set (0.02 sec) mysql> SHOW PROFILE; Empty set
- 63. Подробная статистика без Перконы mysql> SHOW PROFILES; +----------+------------+---------------------------------+ | Query_ID | Duration | Query | +----------+------------+---------------------------------+
- 64. Подробная статистика без Перконы mysql> SHOW PROFILE; +--------------------------------+----------+ | Status | Duration | +--------------------------------+----------+ | starting
- 65. «Живая» система – много небольших запросов mysql> SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; +----------------+-------+----------------+ | time | count
- 66. Как жить с большим количеством баз и таблиц? Если позволяет логика приложения – разделить один инстанс
- 67. Что влияет? Все внутренние ресурсы системы Локировки (таблицы, строки) Прочие локировки («waiting for query cache lock»)
- 68. Резюме - общие рекомендации InnoDB, а не MyISAM Для дисков – лучше RAID Больше памяти (в
- 69. Быстрый старт… Возможно?
- 70. «1С-Битрикс: Виртуальная машина» – это «1С-Битрикс: Веб-окружение Linux» с использованием разных способов виртуализации. сконфигурированная операционная система
- 71. Все еще «Внимание» ☺
- 72. Нагрузочное тестирование Нагрузочное тестирование - обязательный этап сдачи проекта. Нагрузочное тестирование является важнейшей процедурой подготовки крупного
- 73. Нагрузочное тестирование Проводите нагрузочное тестирование на реальных данных с «боевых серверов» Используйте монитор производительности Эмулируйте действия
- 74. Марш!
- 75. А нужно ли всегда знать о «состоянии здоровья» сайта? Вроде работает… Тормозит – «пнем» админа, чтобы
- 76. Real Time мониторинг – как узнавать о проблемах? Можно – так…
- 77. Real Time мониторинг – как узнавать о проблемах? Или – так…
- 78. Организация системы мониторинга Лучше – стандартные решения (Nagios, Zabbix и т.п.), а не самописные. Дежурная смена
- 79. Мониторинг «железа» Рейды S.M.A.R.T. – диск возможно скоро «умрет» Утилиты вендора – внутренние аппаратные тесты Имеем
- 80. Мониторинг операционной системы Место на дисках Очередь выполнения Размер и использование swap И т.д.
- 81. Подробная диагностика Полезные утилиты: atop, ps, pstree, apachetop, innotop, netstat, iostat, vmstat…
- 82. Если нет админа… Аутсорс Внешние системы: http://host-tracker.com/ Яндекс.Метрика И т.д.
- 83. Аналитика
- 84. Аналитика – со стороны пользователя Гистограммы распределения времени хитов, памяти, кодам ответа и т.п. – из
- 85. Поиск «узких» мест Apache /server-status Включенные логи медленных запросов php-fpm, nginx, apache, mysql
- 86. Поиск узких мест Pinba, XDebug, XHProf
- 87. Поиск «узких» мест Xdebug в продакшене – практически невозможно использовать Pinba – для аналитики Xhprof –
- 88. xhprof
- 89. xhprof
- 90. Хардкор! Отладка «на бою»: strace gdb
- 91. «Здоровый» сайт Сайт всегда доступен для посетителей Вы оперативно узнаете о любых проблемах и имеете план
- 92. Резервирование и рост
- 93. Интернет-каналы DNS Веб-серверы Кэш Базы данных Диски Датацентр Отказы инфраструктуры
- 94. Отказоустойчивая архитектура приложения Готовимся, начиная с ТЗ: Составляем перечень возможных отказов с приоритетами Прогнозируем объем и
- 95. Архитектура веб-кластера в одном ДЦ Apache PHP «1C-Битрикс: Управление сайтом» - кластерная редакция Балансировщик nginx (upstream
- 96. Резервируем сервер web-приложений Apache PHP «1C-Битрикс: Управление сайтом» - кластерная редакция Балансировщик nginx (upstream module) Сервер
- 97. Резервируем базу данных
- 98. Отказал/отстал MySQL Slave Apache PHP «1C-Битрикс: Управление сайтом» - кластерная редакция Балансировщик nginx (upstream module) Сервер
- 99. Резервируем кэш
- 100. Резервируем файлы и каналы
- 101. Отказоустойчивая архитектура приложения Через настройки платформы мы сделали эти сервисы - надежными: База данных Кэш Файлы
- 102. «Узкие» места
- 103. Веб-сервер База данных MySQL MASTER «1С-Битрикс: Веб-кластер» База данных MySQL SLAVE 1 База данных MySQL SLAVE
- 104. Балансировщик (клиентские запросы по HTTP) Веб-сервер 1 memcached 1 Веб-сервер 2 memcached 1 MySQL master MySQL
- 106. Балансировщик (клиентские запросы по HTTP) Веб-сервер 1 memcached 1 Веб-сервер 2 memcached 1 MySQL master MySQL
- 107. Отказоустойчивая архитектура приложения Учимся выдерживать отказ MASTER-БД: Локальный мастер-мастер с переключением IP-адреса (скрипт или Pacemaker) Локальный
- 108. Отказал MySQL Master Apache PHP «1C-Битрикс: Управление сайтом» - кластерная редакция Балансировщик nginx (upstream module) Сервер
- 109. Особенности настройки MySQL: auto_increment_increment auto_increment_offset Базы в разных датацентрах синхронны, при этом независимы друг от друга:
- 110. S3 Elastic Load Balancing Web 1 Elastic Load Balancing Dynamic Web N … CloudWatch + AutoScaling
- 111. Если все-таки упали…
- 112. Исследование Strategic Research Institute 30% предпринимателей после утраты данных прекращают предпринимательскую деятельность в течение года. 60%
- 113. Бэкапы… Для разных сценариев восстановления данных необходимо использовать разные бэкапы! Снэпшоты дисков, LVM, образы виртуальных машин
- 114. Бэкапы Делайте бэкапы! Разумно подходите к периодичности создания бэкапов и времени хранения резервных копий. Обязательно имейте
- 116. Скачать презентацию