Skip to content

Latest commit

 

History

History
306 lines (212 loc) · 26.6 KB

File metadata and controls

306 lines (212 loc) · 26.6 KB

1. Что такое opcache, как его скинуть?

Это движок кэширования байт-кода, который значительно ускоряет работу PHP, opcache_reset

Когда и зачем использовать opcache_reset:

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

2. Что значит директива upstream в nginx для чего предназначается

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

3. Как можно настроить редиректы в nginx

Редирект можно настроить, отредактировав файлы конфигурации виртуальных доменов задав директиву rewrite

4. Чем nginx отличается от апача.

Архитектура

Apache

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

Nginx

Событийно-ориентированная модель, используя неблокирующий асинхронный подход. Он обрабатывает множество подключений в одном потоке, что позволяет обрабатывать большое количество запросов с меньшими ресурсами.

Производительность

Apache

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

Nginx

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

Конфигурация

Apache

Через файлы .htaccess и httpd.conf, что позволяет гибко настраивать поведение сервера для каждого каталога.

Nginx

Ооснована на файле nginx.conf, который определяет глобальные и локальные настройки сервера.

5. Что такое rebase можешь ли объяснить на пальцах, чем отличается от squash

Rebase - перемещает коммиты и изменяет историю коммитов. Squash - объединяет коммиты и сохраняет историю коммитов.

6. Как на ваш взгляд должен проходить процесс деплоя - когда вам нужно обновить версию вашего приложения на продакш сервере

  • С помощью git разработанная ветка вливается в релизную.
  • Собираются контейнеры
  • Проверка правильности оформление коммитов, валидация конфигов, проверка статическими анализаторами
  • Запуск тестов
  • Версионирование образа
  • Оркестрация и доставка

7. Знаете ли вы, что такое CI / CD

Это методология разработки программного обеспечения, которая включает в себя автоматизацию процессов сборки, тестирования и развертывания приложений.

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

Continuous Integration (CI) - это практика интеграции кода разработчиков в общую основную ветку репозитория с целью обеспечения регулярной и автоматической проверки качества кода. При каждом коммите в репозиторий запускаются автоматические сборка и тестирование, что помогает выявлять и решать проблемы своевременно.

Continuous Deployment (CD) - это практика автоматического развертывания приложения после успешного завершения процесса CI. После прохождения всех тестов и проверок, приложение автоматически разворачивается на целевом сервере или платформе.

Цель CI/CD - обеспечить постоянное итеративное обновление и развертывание приложения, упрощая процесс разработки и минимизируя время между написанием кода и его попаданием в продакшен

8. Использовали ли в работе системы для CI / CD, какие инструменты и подходы вы использовали?

  • VCS: Git позволяют отслеживать изменения в коде
  • CI: GitLab они обеспечивают автоматическую сборку, тестирование и проверку качества кода при каждом изменении в репозитории.
  • CD: Ansible процесс развертывания приложения на серверах или платформах, настраивать окружение и управлять конфигурацией.
  • Оркестраторы контейнеров: Docker, Kubernetes. Они позволяют упаковывать приложение и его зависимости в контейнеры, обеспечивают их изоляцию и масштабируемость, а также упрощают развертывание и управление приложениями.
  • Инструменты для автоматического тестирования: PHPUnit для тестирования PHP-кода
  • Инструменты для мониторинга и логирования: ELK Stack (Elasticsearch, Logstash, Kibana)

9. Что такое Docker,Swarm, docker-compose как это работает, для чего используется?

Docker - это открытая платформа, которая позволяет автоматизировать развертывание и управление приложениями в контейнерах.

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

Docker Swarm - это инструмент для оркестрации контейнеров в среде Docker.

Он позволяет управлять группой контейнеров как единым целым, обеспечивая масштабируемость и отказоустойчивость. Swarm позволяет создавать кластеры Docker-хостов и управлять развертыванием, масштабированием и обновлением контейнеров на этих хостах.

Docker Compose - это инструмент, который позволяет определить и управлять множеством контейнеров Docker с помощью файла конфигурации.

Файл docker-compose.yml содержит описание сервисов, их зависимостей и настроек. С помощью Docker Compose можно однократно запустить и остановить все контейнеры в составе приложения, настроить сети и тома для обмена данными между контейнерами, а также определить переменные среды и другие параметры.

8. Для чего нужны линтеры и статическые анализаторы?

Линтеры для автоматической проверки стандартов кодирования

PHPCs

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

PHPStan, Psalm

9. Какие средства профилирования и оптимизации кода ты знаешь?

Xdebug Это расширение для PHP, которое предоставляет возможности профилирования кода, трассировки исполнения, отладки и оптимизации. Оно позволяет собирать подробную информацию о времени выполнения и использовании ресурсов в коде.
Xhprof Это инструмент профилирования. Он предоставляет анализ времени выполнения, трассировку стека вызовов и другую полезную информацию о производительности кода.
PHPStan Могут помочь идентифицировать потенциальные проблемы и улучшить качество кода. Они обнаруживают неиспользуемые переменные, потенциальные ошибки, несоответствия стандартам кодирования и другие проблемы.

10. В чём отличия RabbitMq от Kafka?

Это две популярные системы сообщений, которые используются для обмена сообщениями между различными компонентами приложений.

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) Потоковая обработка данных(Системы рекомендаций, фрод-мониторинг, преобразование данных)

11. Как работает rabitmq расскажи жизненный цикл работы.

Producer -> Exchange -> Queue -> Consumer -> Удаление сообщения из очереди

Producer (Отправитель)

  • Подключение к брокеру
  • Создание и упаковка в определенный формат

Exchange (Обменник)

  • Маршрутизация сообщения

Queue (Очередь)

  • Привязка к очереди: Сообщение маршрутизируется в одну или несколько очередей, связанных с обменником. Привязка определяется ключами маршрутизации и параметрами обменника.
  • Сохранение сообщения.

Consumer (Получатель)

  • Подключение к очереди
  • Обработка сообщения
  • Подтверждение (ACK)

Удаление сообщения из очереди

  • После получения подтверждения от получателя, брокер удаляет сообщение из очереди.
  • Если сообщение не подтверждено в течение определенного времени (время жизни сообщения), брокер может пометить его как "неподтвержденное" и отправить обратно в очередь или перенаправить в другую очередь.

12. Какие метрики для сбора статистики наиболее важны?

  • Железо
  • Нагрузку на БД
  • Количество нагрузки
  • Очереди буферы
  • Ошибки количество повторных
  • Response time

13. Чем отличается виртуализация от контейнерации

  • Виртуализация

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

Изоляция: каждая ВМ работает на своей собственной операционной системе
Загрузка ресурсов: Требует выделения отдельных ресурсов, что может приводить к большей избыточности
Портабельность: Требуют дополнительной настройки и установки операционной системы

  • Контейнеризация

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

Изоляция: Используется общая операционная система хоста, что обеспечивает более легковесную и эффективную изоляцию.
Загрузка ресурсов: В контейнеризации ресурсы могут быть более эффективно использованы, так как контейнеры разделяют общую операционную систему хоста.
Портабельность: Контейнеры обеспечивают высокую портабельность

14. В чем отличие image от контейнера в контексте докера

  • Образ представляет собой статичное и неизменное состояние приложения или сервиса. Он содержит все необходимые файлы, зависимости и настройки для запуска приложения. Образ создается на основе Docker-файла, который содержит инструкции для сборки образа. Образ можно рассматривать как "шаблон" для создания контейнеров.

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

15. Разница в мониторинге и логирование

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

16. Как повысить отказоустойчивость приложения

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

17. Расказать как происходит flow всего запроса к сайту?

  • Отправка HTTP запроса
  • Разрешение с помощью DNS адреса в IP
  • Серверная обработка
  • Маршрутизация
  • Запуск интерпретатора
  • Обработка PHP скриптом
  • Формирование HTTP ответа
  • Отправка ответа
  • Отображение результата

18. Какие способы общения есть между сервисами?

  • RESTFul API
  • RPC (Remote Procedure Call)
  • Message Queues
  • Event-Driven Architecture (EDA)
  • Базы данных

19. Как можно разбить запрос на несколько Rabitmq серверов?

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

Назад