Бэкенд2 Flashcards
Заголовок Postman-Token
Postman-Token - это заголовок, который иногда используется в HTTP-запросах для управления сеансами в Postman. Он используется для идентификации уникального сеанса. Этот механизм может использоваться для предотвращения повторных запросов в некоторых случаях.
Заголовок Content-Type
Content-Type - это заголовок HTTP-запроса и ответа, который указывает тип меди-контента, передаваемого в теле запроса или ответа.
Application\json - формат JSON
Application\xml - формат XML
Text\html - формат HTML
multipart\from-data -используется при отправки файлов или форм-данных
Заголовок Content-Length
Content-Length - это заголовок HTTP, который указывает размер тела запроса или ответа в байтах. Этот заголовок помогает серверу и клиенту определить длину содержимого и, таким образом, корректно прочитать данные.
Заголовок User-Agent
User-Agent - это заголовок в HTTP-запросе предоставляет информацию о клиенте, отправляющем запрос. Используется сервером для определения, с какого клиента пришел запрос, что может быть полезно для подготовки и отправки контента.
Использование для:
1 - Определение совместимости - сервер может использовать информацию для определения, какой браузер или клиент отправил запрос, и предоставить соответствующий контент
2 - Статистика и аналитика - может использоваться для сбора статистики о том, какие браузеры или клиенты чаще всего посещают сайт.
3 - Обнаружение ботов - для обнаружения посещений от поисковых роботов или других автоматизированных агентов.
Заголовок Accept
Accept - заголовок в HTTP-запросе указывает на типы контента, которые клиент может принять от сервера в ответе. Сообщают серверу о предпочтениях клиента в отношение форматов данных.
Заголовок Connection
Connection - заголовок в HTTP используется для управления параметрами соединения между сервером и клиентом. Он может содержать различные значения, которые определяют, как следует обрабатывать соединение после завершения текущего запроса-ответа.
close- закрыть соединение
keep-alive - сохранить соединение открытым
upgrade- используется, например, при использование HTTP\2.0, чтобы указать на возможность обновления протокола
TE- указывает, какие кодировки поддерживает клиент, что может использоваться для оптимизации передачи данных.
Заголовок Authorization
Authorization - заголовок используется для передачи учетных данных в HTTP-запросах.
1 - Basic Auth (Базовая аутентификация)
2 - Bearer Token (Токен аутентификации)
3 - API Key (Ключ API)
Для чего нужны логи?
Для локализации ошибок
Уровни логирования:
Debug
Warning
Error
Fatal
Доп:
Trace
Info
Debug - запись масштабных переходов состояний. Debug - мы можем дебажить. Логи написаны достаточно подробно. И мы можем поставить уровень дебаг, а параллельно разработчик будет останавливать процесс работы программы, вкидывая какие-то данные, для того чтобы можно было отследить поведение программы. Никогда не бывает на проде.
Warning - обычно выводит нам предупреждения.
Error - направлен на вывод ошибок.
Fatal - выводит ошибки, которые максимально нарушают работу системы, которые “кладут” систему, после которых система не работает.
Trace - очень подробно описывает каждое событие и поэтому очень полезен для тестироващиков, когда нужно локализовать какую-то проблему. Выводит очень много информации и поэтому много весит. Никогда не используется на проме.
Info - зачастую стоит на проде, т.к. этот уровень в основном показывает нам обычные ивенты, кратко описанные.
Что такое Kafka Apache и для чего она нужна?
Kafka Apache - распределенная система обмена сообщениями между серверными приложениями в режиме реального времени. Написана на языке Java и Scala.
- Для связи микросервисов. Kafka -связующее звено между отдельными функциональными модулями большой системы.
- Потоковая передача данных. Высокая пропускная способность системы позволяет поддерживать непрерывные потоки информации.
- Ведение журнала событий. Kafka сохраняет данные в строго организованную структуру, в которой всегда можно отследить, когда произошло то или иное событие.
Как используется Kafka на реальном проекте?
Зачастую kafka используется на больших проектах, таких как банки, для того, чтобы:
-Масштабировать проект
-Отслеживать интеграцию и локализовывать баги быстрее
-Скорость обработки процессов увеличивается
Какие ключевые концепции являются в архитектуре Kafka Apache?
Продюсер - приложение или процесс, генерирующий и посылающий данные.
Потребитель - приложение или процесс, который принимает сгенерированное продюсером сообщение.
Сообщение - пакет данных, необходимый для совершения какой-либо операции.
Брокер - узел(диспетчер) передачи сообщений от процесса-продюсеру приложению-потребителю.
Топик - виртуальное хранилище сообщений одинакового или похожего содержания, из которого приложение - потребитель извлекает необходимую ему информацию.
Какие свойства у Kafka?
-распределенность
-отказоустойчивость
-высокая доступность
-надежность и согласованность данных
-высокая производительность
-горизонтальное масштабирование
-интегрируемость
Из чего состоит Kafka?
- Broker и Zookeeper (Брокер и Зукипер)
- Message(Сообщение)
- Topic и Partition (Топик и Партишн)
- Producer(Продюсер)
- Consumer(Консюмер)
Broker и Zookeeper (Брокер и Зукипер)
Функции Брокера: прием сообщений, хранение сообщений, выдача сообщений
Зукипер - служба, которая следит за состоянием всего кластера Кафка. Она отслеживает, какие брокеры активны и какую информацию они хранят.
-Хранение информации, Выбор Лидера, Мониторинг состояния, Управление конфигурацией.
Среди брокеров выбирается один брокер и он называется кафка контроллером. Он обеспечивает консистентность данных.
Кафка сама по себе мастер-слэй система. Зукипер в данном случае используется чтобы тоже выбрать контроллер. Так как представляет собой хранилище настроек-конфигов.
Message(Сообщение)
Key - ключ используется для распределения сообщений по кластеру.
Value - содержимое сообщения - массив байт
Timestamp - время сообщения.
Headers - набор key-value пар с пользовательскими атрибутами сообщения.
Topic и Partition (Топик и Партишн)
Топик представляет из себя стрим данных, получение однотипных событий, которые объединены логически. Оно может получаться из разных источников, а может и из одного. Зависит от логики проекта.
В топике выстраивается очередь, в которую вкладываются все наши входящие сообщения и потом от туда извлекаются сообщения. Когда получатель считал сообщение они не удаляются, новый потребитель пришел и считал нужные сообщения.. Это обеспечивается широковещательный режим, когда у нас может быть несколько разных консьюмеров и им необходимо потреблять одни и те же данные.
Функция эта называется FIFO - First in first out.
Иногда нагрузку нужно распределять. При огромном потоке данных для одного микросервиса используется Partition.
Где хранятся данные топика?
В обычных log файлах.
.log - сообщения, которые хранятся с какой-то дополнительно информацией
.index - маппинг офсета на позицию
.timeindex - маппинг тайминдекса на офсет
Репликация данных
Data replication - надежность данных и отказоустойчивость
Почему реплики одной партии не существуют в рамках одного брокера?
-упадет один брокер - упадут вмести с репликами, поэтому реплики существуют на разных брокерах.
Что произойдет если лидер-реплика упадет?
-в этом случае всегда есть несколько фолловеров, которые подписаны как ISR. Для фолловеров isr идет синхронное сохранение данных, которые попадали в лидер-реплику и при падении лидер реплики они и становятся кандидатами на лидерство.
Producer(Продюсер)
Продюсеры пишут только в лидер-реплику, а консьюмеры читают тоже только лидер-реплику.
3 режима отправки сообщений:
- acks = 0. Продюсер вообще не ждет подтверждения отправки сообщения.
- acks = 1. Продюсер жде подтверждения только от лидер-реплики.
- acks = all. Продюсер ждет подтверждения отправки сообщения от всех isr и лидер-реплик.
Consumer(Консюмер)
Консьюмер обрабатывает сообщение, следуя бизнес-логике. Затем отправляет аск или паск-запрос обратно на сервер. используя уникальный идентификатор, полученный ранее - тем самым либо подтверждая успешную обработку сообщения, либо сигнализируя об ошибке. В случае успеха сообщение удаляется с сервера навсегда.
Для чего нужен брокер тестировщику?
-Заглушки - это код, который имитирует работу прикладного сервиса или работу функционала, который еще не готов, с целью того чтобы не задерживать процесс разработки и тестирования. Бывают разной сложности. Например, отправляете запрос, а он всегда возвращает 200 и одно и то же тело.
-Вложенные статус коды
ПОЧЕМУ же так работает?
Потому что статус коды/методы запросов и любое другое действие прописывает разработчик и он может написать все что угодно (например что теперь у нас DELETE это метод получения данных и он должен возвращать 895 статус код).
Дженкинс это?
Инструмент для деплоя версий
Поставка определенной версии на стенде(Деплой)
Версия - это определенная точка в разработке, когда приостанавливаются все изменения в мастер ветку, на определенном этапе ставят точку и отдают уже эту точку как финальный продукт.
Аутентификация\Авторизация - это?
Регистрация - это процесс, при котором пользователь создает учетную запись на веб-сайте и приложение.
Идентификация - это процесс, когда информационная система, например социальная сеть или интернет-магазин , определяет, существует конкретный пользователь или нет.
Аутентификация - это процесс, когда пользователь вводит ключ, подтверждая свое право на доступ к той или иной учетной записи и хранящейся в ней информации.
Авторизация - это процесс, предоставления пользователю или группе пользователей определенных разрешений, прав доступа и привилегий системы.
Основные различия Аутентификации и Авторизации:
-Аутентификация устанавливает личность пользователя, а авторизация определяет, что этот пользователь может делать.
-Аутентификация происходит первой, чтобы подтвердить личность, а затем следует авторизация, чтобы определить, какие действия разрешены.
- Аутентификация использует учетные данные, такие как логин и пароль, биометрические данные или другие методы, в то время как авторизация использует политики и правила доступа.
-Аутентификация отвечает на вопрос “Кто вы”, а авторизация на “Что вы можете делать”
Синхронность и Асинхронность - это?
Синхронность -можно открывать соединение, получать результат и переходить к следующему, двигаясь по очереди. Увеличивает задержку в работе программы.
Асинхронность - способ открытие тысячи соединений одновременно и переключение между ними. Так продолжается до тех пор, пока все не вернут результат.
Синхронный код блокирует выполнение пока текущая задача не завершится, а асинхронный - дает возможность продолжить выполнение программы.