Основные концепции · часть 1
Что такое WSDL?
WSDL (Web Services Description Language) — это язык описания
веб-сервисов, который используется для описания доступных функций, структуры
данных, протоколов и методов коммуникации для веб-сервиса. Основные аспекты
WSDL:
-
Описание сервиса: WSDL описывает доступные операции (методы) сервиса, параметры этих операций и типы данных, которые они используют.
-
Протоколы и форматы: Описывает протоколы и форматы сообщений, используемые для обмена данными между клиентами и сервисом. Это может включать SOAP (Simple Object Access Protocol) или другие протоколы.
-
Местоположение и доступ: WSDL может содержать информацию о местоположении (адресе) сервиса и методах доступа к нему (например, HTTP GET, POST, SOAP).
-
Используемые типы данных: Определяет структуры данных, используемые в запросах и ответах сервиса, обеспечивая единообразие в коммуникации.
WSDL часто используется в средах, где требуется автоматическое
создание клиентских приложений на основе описания веб-сервиса, так как оно
позволяет генерировать код для взаимодействия с сервисом, учитывая его
возможности и структуру данных.
Что такое идемпотентность? Почему это важно?
Идемпотентность в контексте информационных систем означает свойство операции, которое гарантирует, что её повторное применение не изменит состояние системы. Другими словами, если операция была выполнена один раз, повторное её выполнение не приведет к изменениям в системе.
Почему это важно:-
Безопасность: Идемпотентные операции минимизируют риски случайных или нежелательных изменений данных.
-
Надежность: Повторное выполнение операции не вызывает неожиданных эффектов или ошибок.
-
Устойчивость к сетевым сбоям: В случае сбоев или дублирования запросов, идемпотентность помогает избежать нежелательных последствий.
Примеры идемпотентных операций включают запросы HTTP методом GET, удаление ресурсов (DELETE), и использование уникальных идентификаторов для предотвращения дублирования операций.
DELETE – идемпотентный метод?
Да. Несколько одинаковых DELETE имеют тот же ожидаемый эффект над ресурсом, что и один: ресурс удалён. Ответы могут различаться, например 204 при первом удалении и 404 при повторном. Идемпотентность не требует одинаковых кодов ответа и не запрещает журналирование.
Есть некий UI, нужно написать к нему веб-сервис. Опишите вашу постановку – что в ней будет.
Постановка задачи на создание веб-сервиса для UI включает следующие основные шаги и компоненты:
-
Определение функциональных требований:
-
Определение API эндпоинтов и методов (GET, POST, PUT, DELETE) веб-сервиса.
-
Разработка структуры данных для запросов и ответов (JSON или XML формат).
-
-
Разработка веб-сервиса:
-
Создание маршрутов (routes) для обработки различных HTTP запросов от UI.
-
Реализация бизнес-логики для обработки запросов и взаимодействия с базой данных или другими сервисами.
-
-
Аутентификация и авторизация:
- Внедрение механизмов аутентификации и авторизации для защиты API от несанкционированного доступа.
-
Тестирование:
- Проведение тестирования API для проверки функциональности и соответствия требованиям.
-
Документация:
- Написание документации к API (например, с использованием OpenAPI/Swagger) для удобства использования разработчиками UI.
-
Развёртывание и мониторинг:
-
Развертывание веб-сервиса на сервере.
-
Настройка мониторинга для отслеживания работы веб-сервиса и выявления возможных проблем.
-
-
Поддержка и обновление:
- Поддержка и обновление веб-сервиса в соответствии с изменяющимися требованиями и обратной связью от пользователей.
Что такое синхронные и асинхронные вызовы?
Синхронные и асинхронные вызовы относятся к способу организации выполнения операций или функций в программном коде:
-
Синхронные вызовы:
-
В синхронных вызовах выполнение программы блокируется до завершения операции.
-
Когда код выполняет синхронный вызов, он ждёт завершения этого вызова, прежде чем продолжить дальнейшее выполнение.
-
Синхронные вызовы просты для понимания и использования, но могут приводить к задержкам, если операции требуют времени.
-
-
Асинхронные вызовы:
-
В асинхронных вызовах выполнение программы не блокируется и продолжает работу сразу после инициации операции.
-
При использовании асинхронных вызовов код продолжает работу независимо от того, завершена ли операция.
-
Асинхронные вызовы особенно полезны в задачах, требующих обработки большого количества данных или взаимодействия с внешними сервисами, где блокировка выполнения может быть неэффективной или невозможной.
-
Выбор между синхронными и асинхронными вызовами зависит от конкретных требований задачи, производительности системы и специфики взаимодействия с внешними ресурсами.
Чем Kafka отличается от RabbitMQ?
Kafka и RabbitMQ - это два различных брокера
сообщений, оба известные своими способностями обработки сообщений, но они имеют
несколько ключевых различий:
-
Архитектура:
-
Kafka: Построен как распределённая система, которая распределяет данные по разным брокерам в кластере. Он разработан для высокой пропускной способности и устойчивости к отказам.
-
RabbitMQ: Ориентирован на классическую AMQP (Advanced Message Queuing Protocol) архитектуру. Он более традиционный и прост в использовании для разнообразных сценариев.
-
-
Производительность и масштабирование:
-
Kafka: Очень высокая пропускная способность и поддержка масштабирования до тысяч и миллионов сообщений в секунду.
-
RabbitMQ: Хорошо масштабируется вертикально, но его производительность может быть ограничена при работе с большими объемами сообщений.
-
-
Хранение сообщений:
-
Kafka: Хранит сообщения в виде лога, что делает его хорошим выбором для построения потоковой обработки данных (stream processing).
-
RabbitMQ: Хранит сообщения в памяти или на диске, в зависимости от настроек, и обеспечивает гибкость в выборе способа хранения.
-
-
Гарантии доставки сообщений:
-
Kafka сохраняет порядок записей внутри одной партиции. Гарантии доставки и обработки зависят от подтверждений, фиксации offset, идемпотентного producer и транзакций; глобального порядка между партициями нет.
-
RabbitMQ использует publisher confirms и подтверждения потребителей для надёжной доставки. При сбоях возможны повторы, поэтому обработчики должны уметь их распознавать или быть идемпотентными. Сквозная обработка exactly once не гарантируется автоматически.
-
-
Применение:
-
Kafka: Часто используется для стриминга данных, аналитики, мониторинга и других сценариев, требующих высокой пропускной способности и упорядоченности данных.
-
RabbitMQ: Широко применяется в микросервисной архитектуре, интеграционных задачах и там, где требуется более традиционная система очередей сообщений.
-
Клиент читает в Kafka два последних сообщения. Как тому же клиенту заново прочитать эти два последние сообщения?
Для повторного чтения используйте consumer.seek(partition, offset). Сохраните партицию и offset нужных записей; offset задаёт позицию внутри партиции, а не всего топика. Записи должны ещё храниться в журнале.
Для каждой нужной партиции установите позицию на offset первой из перечитываемых записей и снова вызовите poll. Группа хранит подтверждённые позиции чтения, а не сами сообщения. Если записи были в разных партициях, единого offset для последних двух нет.
В примере с двумя последними сообщениями в Kafka:
-
Определить оффсеты последних двух сообщений, которые клиент уже прочитал.
-
Установить оффсеты на начальные значения, соответствующие этим сообщениям.
-
Прочитать сообщения с установленными оффсетами из темы
Kafka.
Приходилось ли вам писать JSON? С помощью чего вы писали JSON?
Расскажите о реальном опыте. JSON можно писать в текстовом редакторе или получать сериализацией данных: например, JSON.stringify в JavaScript или json.dumps в Python. Проверяйте синтаксис и согласованную схему; JSON является форматом данных, а не языком программирования.