Это движок кэширования байт-кода, который значительно ускоряет работу PHP, opcache_reset
Когда и зачем использовать opcache_reset:
- Когда изменения в коде не отражаются в работающем приложении из-за наличия кэшированных опкодов.
- При автоматизированных тестах, обеспечение согласованность состояния окружения тестирования.
- При профилировании и оптимизации приложения, чтобы измерить и оценить реальное время выполнения кода.
Директива upstream позволяют организовывать группы серверов (upstream), распределяя между ними запросы для проксирования. Позволяет реализовать балансировку нагрузки, отказоустойчивость и масштабируемость системы, позволяя распределить нагрузку между несколькими серверами и обеспечить непрерывную работу приложений.
Редирект можно настроить, отредактировав файлы конфигурации виртуальных доменов задав директиву rewrite
Архитектура
Apache
Процессорно-ориентированная модель, где для каждого клиентского подключения создается отдельный процесс или поток. Это может привести к высокому потреблению ресурсов при большой нагрузке.
Nginx
Событийно-ориентированная модель, используя неблокирующий асинхронный подход. Он обрабатывает множество подключений в одном потоке, что позволяет обрабатывать большое количество запросов с меньшими ресурсами.
Производительность
Apache
Хорошо работает с динамическим содержимым и поддерживает широкий спектр модулей, что делает его более гибким для обработки различных типов запросов.
Nginx
Высокая производительность и эффективность при обработке статических файлов и больших объемов запросов. Он хорошо масштабируется и может эффективно обслуживать тысячи одновременных подключений.
Конфигурация
Apache
Через файлы .htaccess и httpd.conf, что позволяет гибко настраивать поведение сервера для каждого каталога.
Nginx
Ооснована на файле nginx.conf, который определяет глобальные и локальные настройки сервера.
Rebase - перемещает коммиты и изменяет историю коммитов. Squash - объединяет коммиты и сохраняет историю коммитов.
6. Как на ваш взгляд должен проходить процесс деплоя - когда вам нужно обновить версию вашего приложения на продакш сервере
- С помощью git разработанная ветка вливается в релизную.
- Собираются контейнеры
- Проверка правильности оформление коммитов, валидация конфигов, проверка статическими анализаторами
- Запуск тестов
- Версионирование образа
- Оркестрация и доставка
Это методология разработки программного обеспечения, которая включает в себя автоматизацию процессов сборки, тестирования и развертывания приложений.
Она нацелена на ускорение и упрощение процесса разработки, обеспечивая постоянную интеграцию изменений в код и автоматическое развертывание приложения в продакшн окружении.
Continuous Integration (CI) - это практика интеграции кода разработчиков в общую основную ветку репозитория с целью обеспечения регулярной и автоматической проверки качества кода. При каждом коммите в репозиторий запускаются автоматические сборка и тестирование, что помогает выявлять и решать проблемы своевременно.
Continuous Deployment (CD) - это практика автоматического развертывания приложения после успешного завершения процесса CI. После прохождения всех тестов и проверок, приложение автоматически разворачивается на целевом сервере или платформе.
Цель CI/CD - обеспечить постоянное итеративное обновление и развертывание приложения, упрощая процесс разработки и минимизируя время между написанием кода и его попаданием в продакшен
- VCS: Git позволяют отслеживать изменения в коде
- CI: GitLab они обеспечивают автоматическую сборку, тестирование и проверку качества кода при каждом изменении в репозитории.
- CD: Ansible процесс развертывания приложения на серверах или платформах, настраивать окружение и управлять конфигурацией.
- Оркестраторы контейнеров: Docker, Kubernetes. Они позволяют упаковывать приложение и его зависимости в контейнеры, обеспечивают их изоляцию и масштабируемость, а также упрощают развертывание и управление приложениями.
- Инструменты для автоматического тестирования: PHPUnit для тестирования PHP-кода
- Инструменты для мониторинга и логирования: ELK Stack (Elasticsearch, Logstash, Kibana)
Docker - это открытая платформа, которая позволяет автоматизировать развертывание и управление приложениями в контейнерах.
Контейнеры - это легковесные и изолированные окружения, в которых приложение может работать независимо от операционной системы и других приложений на хостовой машине. Docker позволяет упаковывать приложение и его зависимости в контейнеры, которые могут быть запущены на любом компьютере, поддерживающем Docker.
Docker Swarm - это инструмент для оркестрации контейнеров в среде Docker.
Он позволяет управлять группой контейнеров как единым целым, обеспечивая масштабируемость и отказоустойчивость. Swarm позволяет создавать кластеры Docker-хостов и управлять развертыванием, масштабированием и обновлением контейнеров на этих хостах.
Docker Compose - это инструмент, который позволяет определить и управлять множеством контейнеров Docker с помощью файла конфигурации.
Файл docker-compose.yml содержит описание сервисов, их зависимостей и настроек. С помощью Docker Compose можно однократно запустить и остановить все контейнеры в составе приложения, настроить сети и тома для обмена данными между контейнерами, а также определить переменные среды и другие параметры.
Линтеры для автоматической проверки стандартов кодирования
PHPCs
Статические анализаторы для выявления потенциальных проблем таких как такие как использование неинициализированных переменных, неправильное использование операторов, потенциально опасные конструкции. Статические анализаторы могут обнаруживать узкие места в коде, неэффективные конструкции, а также выявлять уязвимости в безопасности
PHPStan, Psalm
Xdebug
Это расширение для PHP, которое предоставляет возможности профилирования кода, трассировки исполнения, отладки и оптимизации. Оно позволяет собирать подробную информацию о времени выполнения и использовании ресурсов в коде.Xhprof
Это инструмент профилирования. Он предоставляет анализ времени выполнения, трассировку стека вызовов и другую полезную информацию о производительности кода.PHPStan
Могут помочь идентифицировать потенциальные проблемы и улучшить качество кода. Они обнаруживают неиспользуемые переменные, потенциальные ошибки, несоответствия стандартам кодирования и другие проблемы.Это две популярные системы сообщений, которые используются для обмена сообщениями между различными компонентами приложений.
| RabbitMQ | Apache Kafka | |
|---|---|---|
| Тип сообщений | Протокол AMQP | Событийно-ориентированный лог. Потоковая обработка данных |
| Основная архитектура | Очередь сообщений | Поток сообщений |
| Упорядоченность | Гарантия порядка сообщений в пределах очереди | Гарантия порядка сообщений внутри партиций |
| Топология | Exchange (Direct, Topic, Fanout, Headers), Push модель | Нет (маршрутизация в приложении) Publish/Subscriber, Pull модель |
| Пропускная способность | Средняя 4к/10к message/sec | Очень высокая 1million message/sec |
| Хранение сообщений | В памяти и/или на диске | На диске |
| Поддержка транзакций | Ограниченная | Полная поддержка транзакций |
| Уровень гарантий | Различные уровни гарантий доставки сообщений | Потери сообщений в случае сбоев (зависит от настройки least at once,most at once) |
| Точность доставки | Акцент на гарантированной доставке | Акцент на высокой производительности |
| Перераспределение нагрузки | Не поддерживает | Поддерживает healtbit |
| Архитектура | Умный брокер, отслеживает доставку | Умный потребитель |
| Преимущества | Гибкая маршрутизация сообщений, надежность | Высокая пропускная способность, масштабируемость, устойчивость к сбоям |
| Недостатки | Низкая пропускная способность, ограниченная поддержка сообщений большого объема | Сложность настройки и администрирования, отсутствие гарантии доставки |
Где используются:
RabbitMq
Уведомления о событиях (обработка заказов, системы обработки задач). Небольшие объемы данных и низкая задержка (системы реального времени, чат-приложения) Обработка задач в фоновом режиме. Обмен сообщениями между микросервисами. Обработка транзакций (финансовые системы, электронная коммерция)
Apache Kafka
Обработка большого объема данных (Аналитика данных, обработка событий, логирование) Высокая пропускная способность и масштабируемость(Системы обработки данных в реальном времени, обработка кликов, трекинг событий) Хранение и репликация данных(Event Sourcing) Потоковая обработка данных(Системы рекомендаций, фрод-мониторинг, преобразование данных)
Producer -> Exchange -> Queue -> Consumer -> Удаление сообщения из очереди
Producer (Отправитель)
- Подключение к брокеру
- Создание и упаковка в определенный формат
Exchange (Обменник)
- Маршрутизация сообщения
Queue (Очередь)
- Привязка к очереди: Сообщение маршрутизируется в одну или несколько очередей, связанных с обменником. Привязка определяется ключами маршрутизации и параметрами обменника.
- Сохранение сообщения.
Consumer (Получатель)
- Подключение к очереди
- Обработка сообщения
- Подтверждение (ACK)
Удаление сообщения из очереди
- После получения подтверждения от получателя, брокер удаляет сообщение из очереди.
- Если сообщение не подтверждено в течение определенного времени (время жизни сообщения), брокер может пометить его как "неподтвержденное" и отправить обратно в очередь или перенаправить в другую очередь.
- Железо
- Нагрузку на БД
- Количество нагрузки
- Очереди буферы
- Ошибки количество повторных
- Response time
- Виртуализация
Она позволяет запускать несколько изолированных виртуальных машин (ВМ) на одном физическом сервере. Каждая ВМ имеет свою собственную операционную систему и обладает ресурсами, такими как процессорное время, память и дисковое пространство. Виртуализация обычно осуществляется с использованием гипервизора, который управляет ресурсами физического сервера и обеспечивает изоляцию между виртуальными машинами.
Изоляция: каждая ВМ работает на своей собственной операционной системе
Загрузка ресурсов: Требует выделения отдельных ресурсов, что может приводить к большей избыточности
Портабельность: Требуют дополнительной настройки и установки операционной системы
- Контейнеризация
Контейнеризация позволяет запускать изолированные контейнеры, которые являются легковесными и портативными окружениями для запуска приложений. Контейнеры используют общую операционную систему хоста, но имеют отдельные файловые системы, процессы и пространства имен.
Изоляция: Используется общая операционная система хоста, что обеспечивает более легковесную и эффективную изоляцию.
Загрузка ресурсов: В контейнеризации ресурсы могут быть более эффективно использованы, так как контейнеры разделяют общую операционную систему хоста.
Портабельность: Контейнеры обеспечивают высокую портабельность
-
Образ представляет собой статичное и неизменное состояние приложения или сервиса. Он содержит все необходимые файлы, зависимости и настройки для запуска приложения. Образ создается на основе Docker-файла, который содержит инструкции для сборки образа. Образ можно рассматривать как "шаблон" для создания контейнеров.
-
Контейнер это экземпляр запущенного образа. Он представляет собой изолированную среду, в которой приложение или сервис работает независимо от других контейнеров и хостовой системы. Контейнер содержит все необходимые ресурсы и зависимости для работы приложения, включая файловую систему, сетевые интерфейсы, переменные окружения и прочие ресурсы.
Мониторинг – это процесс сбора и анализа данных о состоянии системы в реальном времени для отслеживания ее производительности и выявления потенциальных проблем.
Логирование – это процесс записи информации о событиях и действиях, происходящих в приложении, для последующего анализа и отладки.
- Распределение нагрузки - перераспределение трафика между несколькими экземплярами приложения или серверами
- Резервное копирование и восстановление
- Мониторинг и автоматическое восстановление
- Горизонтальное масштабирование
- Обработка ошибок и исключений - надежная обработка ошибок и исключений в приложении позволяет предотвращать сбои
- Кэширование - применение кэширования позволяет снизить нагрузку на базу данных и ускорить обработку запросов.
- Отказоустойчивая архитектура - использование механизмов резервирования, балансировки нагрузки, репликации и других технологий
- Отправка HTTP запроса
- Разрешение с помощью DNS адреса в IP
- Серверная обработка
- Маршрутизация
- Запуск интерпретатора
- Обработка PHP скриптом
- Формирование HTTP ответа
- Отправка ответа
- Отображение результата
- RESTFul API
- RPC (Remote Procedure Call)
- Message Queues
- Event-Driven Architecture (EDA)
- Базы данных
- Кластеризация RabbitMQ создание кластеров, включающих несколько брокеров.
- Федерация, поддерживает концепцию федерации, которая позволяет соединять несколько брокеров вместе. Отправка сообщения с одного брокера на другой с минимальной конфигурацией.
- Маршрутизации в коде, на какие брокеры отправлять запросы.