📶 Паттерны коммуникации в распределенных системах
Распределенные системы состоят из многих отдельных частей/узлов, работающих вместе, но физически расположенных в разных местах. Эти части системы должны общаться друг с другом через сеть, чтобы система могла функционировать как единое целое.
Хотя коммуникация критически важна, правильно ее организовать бывает непросто: разработчики иногда пытаются использовать один и тот же подход ко всем задачам коммуникации, что может быть неэффективно. Важно понимать, что существуют разные способы организации коммуникации, и выбор правильного метода зависит от конкретной задачи. Рассмотрим основные паттерны коммуникации, которые можно использовать для решения разных задач.
☑️ Запрос-ответ с HTTP
Этот синхронный паттерн коммуникации предполагает, что один сервис отправляет запрос другому сервису и ожидает ответа или ошибки, блокируя свою работу до получения результата. REST, наиболее популярный архитектурный стиль для этой модели коммуникации, использует методы протокола HTTP — GET, POST, PUT и DELETE.
Однако использование этого паттерна может привести к проблемам, если сервисы образуют цепочку взаимодействий: в таком случае сбой одного из сервисов может привести к отказу всей операции, а также к расточительному использованию ресурсов и каскадным сбоям.
☑️ Общие данные
Этот паттерн часто остается незамеченным, поскольку разработчики не всегда воспринимают его как модель коммуникации. В рамках этого подхода один компонент записывает данные в определенное место, а другой компонент считывает и обрабатывает эти данные. Например, один сервис может загрузить файл в облачное объектное хранилище (например, в корзину Amazon S3), а другой сервис затем извлекает этот файл для дальнейших действий.
Главное преимущество этого паттерна — простота реализации и возможность обеспечения взаимодействия между устаревшими и современными системами без проблем совместимости. Однако он не подходит для сценариев, требующих низкой задержки.
☑️ Асинхронный запрос-ответ
В отличие от синхронного подхода, запрос-ответ может быть реализован асинхронно и без блокировки. В этом случае получающий сервис должен явно знать место назначения для отправки ответа. Для реализации этого паттерна идеально подходят очереди сообщений, которые позволяют буферизовать несколько запросов.
Основная сложность здесь — корреляция между запросом и ответом: экземпляр сервиса, отправивший запрос, может отличаться от экземпляра, получающего ответ, поэтому требуется способ отслеживания запросов.
☑️ Коммуникация на основе событий
В этом подходе сервисы не общаются напрямую друг с другом, а генерируют события, которые могут быть использованы другими сервисами. Это требует наличия места для отправки данных о событиях и механизма, позволяющего получающим сервисам обнаруживать эти события. Брокеры сообщений, такие как RabbitMQ, могут обрабатывать оба этих аспекта. Издатели используют API для отправки событий в брокер, который управляет подписками и уведомляет подписчиков при поступлении события.
Этот паттерн идеально подходит для создания слабосвязанных взаимодействий между сервисами. Однако брокер сообщений должен обеспечивать надежную доставку событий, их упорядочивание и согласованность. Кроме того, добавляется дополнительный компонент в систему.
👨💻 Подробнее читайте в статье.
📨 Материал взят из нашей еженедельной email-рассылки, посвященной бэкенду. Подпишитесь, чтобы быть в числе первых, кто получит дайджест.
Распределенные системы состоят из многих отдельных частей/узлов, работающих вместе, но физически расположенных в разных местах. Эти части системы должны общаться друг с другом через сеть, чтобы система могла функционировать как единое целое.
Хотя коммуникация критически важна, правильно ее организовать бывает непросто: разработчики иногда пытаются использовать один и тот же подход ко всем задачам коммуникации, что может быть неэффективно. Важно понимать, что существуют разные способы организации коммуникации, и выбор правильного метода зависит от конкретной задачи. Рассмотрим основные паттерны коммуникации, которые можно использовать для решения разных задач.
☑️ Запрос-ответ с HTTP
Этот синхронный паттерн коммуникации предполагает, что один сервис отправляет запрос другому сервису и ожидает ответа или ошибки, блокируя свою работу до получения результата. REST, наиболее популярный архитектурный стиль для этой модели коммуникации, использует методы протокола HTTP — GET, POST, PUT и DELETE.
Однако использование этого паттерна может привести к проблемам, если сервисы образуют цепочку взаимодействий: в таком случае сбой одного из сервисов может привести к отказу всей операции, а также к расточительному использованию ресурсов и каскадным сбоям.
☑️ Общие данные
Этот паттерн часто остается незамеченным, поскольку разработчики не всегда воспринимают его как модель коммуникации. В рамках этого подхода один компонент записывает данные в определенное место, а другой компонент считывает и обрабатывает эти данные. Например, один сервис может загрузить файл в облачное объектное хранилище (например, в корзину Amazon S3), а другой сервис затем извлекает этот файл для дальнейших действий.
Главное преимущество этого паттерна — простота реализации и возможность обеспечения взаимодействия между устаревшими и современными системами без проблем совместимости. Однако он не подходит для сценариев, требующих низкой задержки.
☑️ Асинхронный запрос-ответ
В отличие от синхронного подхода, запрос-ответ может быть реализован асинхронно и без блокировки. В этом случае получающий сервис должен явно знать место назначения для отправки ответа. Для реализации этого паттерна идеально подходят очереди сообщений, которые позволяют буферизовать несколько запросов.
Основная сложность здесь — корреляция между запросом и ответом: экземпляр сервиса, отправивший запрос, может отличаться от экземпляра, получающего ответ, поэтому требуется способ отслеживания запросов.
☑️ Коммуникация на основе событий
В этом подходе сервисы не общаются напрямую друг с другом, а генерируют события, которые могут быть использованы другими сервисами. Это требует наличия места для отправки данных о событиях и механизма, позволяющего получающим сервисам обнаруживать эти события. Брокеры сообщений, такие как RabbitMQ, могут обрабатывать оба этих аспекта. Издатели используют API для отправки событий в брокер, который управляет подписками и уведомляет подписчиков при поступлении события.
Этот паттерн идеально подходит для создания слабосвязанных взаимодействий между сервисами. Однако брокер сообщений должен обеспечивать надежную доставку событий, их упорядочивание и согласованность. Кроме того, добавляется дополнительный компонент в систему.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
В чем разница между var x int = 2 и x := 2 в Go?
Результат тот же — переменная со значением 2. С помощью var x int = 2 мы устанавливаем тип переменной как целое число, а с помощью x := 2 мы позволяем Go самому определить тип.
Результат тот же — переменная со значением 2. С помощью var x int = 2 мы устанавливаем тип переменной как целое число, а с помощью x := 2 мы позволяем Go самому определить тип.
❗Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉авторов в наше медиа proglib.io
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉авторов в наше медиа proglib.io
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
ad.proglib.io
Вакансии в медиа «Библиотека программиста»
Количество проектов в редакции постоянно растет, так что нам всегда нужны специалисты
🔝 React не нужен: 5 альтернативных фреймворков/библиотек
React — самый популярный инструмент для разработки фронтенда. Но не каждому проекту он нужен: есть несколько отличных библиотек и фреймворков, которые гораздо проще и во многом эффективнее.
🔗 Читать статью
🔗 Зеркало
React — самый популярный инструмент для разработки фронтенда. Но не каждому проекту он нужен: есть несколько отличных библиотек и фреймворков, которые гораздо проще и во многом эффективнее.
🔗 Читать статью
🔗 Зеркало
Что такое Workspaces в Terraform?
Workspaces в Terraform — это возможность управления state файлами. Workspace содержит все что необходимо для управления набором инфраструктуры, а отдельные рабочие области функционируют как полностью отдельные рабочие каталоги. С помощью Workspaces возможно управлять несколькими средами инфраструктуры.
Workspaces в Terraform — это возможность управления state файлами. Workspace содержит все что необходимо для управления набором инфраструктуры, а отдельные рабочие области функционируют как полностью отдельные рабочие каталоги. С помощью Workspaces возможно управлять несколькими средами инфраструктуры.
Вопрос, который вы, как кандидат, можете задать на собеседовании: Каков текущий уровень технического долга, с которым вы имеете дело?
Будьте осторожны, задавая этот вопрос — все компании, независимо от размера, имеют определенный уровень технической задолженности. Сформулируйте вопрос в свете того, что все компании сталкиваются с этим, но вы хотите увидеть текущие болевые точки, с которыми сталкиваются именно они. Это отличный способ понять, как менеджеры справляются с незапланированной работой и насколько хорошо они устанавливают ожидания в отношении проектов.
Будьте осторожны, задавая этот вопрос — все компании, независимо от размера, имеют определенный уровень технической задолженности. Сформулируйте вопрос в свете того, что все компании сталкиваются с этим, но вы хотите увидеть текущие болевые точки, с которыми сталкиваются именно они. Это отличный способ понять, как менеджеры справляются с незапланированной работой и насколько хорошо они устанавливают ожидания в отношении проектов.
Какие коды ответа HTTP существуют?
1xx — информационный
2xx — успех
3xx — перенаправление
4xx — ошибка, сбой клиента
5xx — ошибка, сбой сервера
1xx — информационный
2xx — успех
3xx — перенаправление
4xx — ошибка, сбой клиента
5xx — ошибка, сбой сервера
Forwarded from Библиотека питониста | Python, Django, Flask
🐍🔍 7 малоизвестных возможностей стандартной библиотеки Python
Стандартная библиотека Python — это кладезь возможностей. Мы представляем семь недооценённых модулей, которые помогут вам улучшить организацию данных, оптимизировать производительность и упростить распространение ваших программ.
🔗 Читать обо всём в статье
Стандартная библиотека Python — это кладезь возможностей. Мы представляем семь недооценённых модулей, которые помогут вам улучшить организацию данных, оптимизировать производительность и упростить распространение ваших программ.
🔗 Читать обо всём в статье
Что такое Bulk API? Для чего бы вы его использовали?
Bulk API используется, когда вам нужно проиндексировать несколько документов. Для большого количества документов было бы значительно быстрее использовать отдельные запросы, поскольку в сети меньше обращений туда и обратно.
Bulk API используется, когда вам нужно проиндексировать несколько документов. Для большого количества документов было бы значительно быстрее использовать отдельные запросы, поскольку в сети меньше обращений туда и обратно.
🐼 Что такое GitOps?
DevOps — это набор практик, которые решали проблемы между командой разработчиков и командой эксплуатации. Таким образом релизы выпускались в разы чаще.
Но появилось ещё одно направление — GitOps. А про то, что это такое, и как оно связано с DevOps, вы уже узнаете из этого видео.
Смотреть видео
DevOps — это набор практик, которые решали проблемы между командой разработчиков и командой эксплуатации. Таким образом релизы выпускались в разы чаще.
Но появилось ещё одно направление — GitOps. А про то, что это такое, и как оно связано с DevOps, вы уже узнаете из этого видео.
Смотреть видео
Сколько адресов в следующих подсетях?
192.168.5.0/24
192.168.5.0/23
192.168.5.0/19
2^(32-N)-2, где
N маска: /24, /23, /19;
32 бит в маске;
-2 зарезервированных адреса: 1 адрес сети и 1 broadcast.
192.168.5.0/24 , 2^(32-24)-2 = 254 хостов
192.168.5.0/23 , 2^(32-23)-2 = 510 хостов
192.168.5.0/19 , 2^(32-19)-2 = 8190 хостов
192.168.5.0/24
192.168.5.0/23
192.168.5.0/19
Как определить состояние контейнера Docker?
Чтобы определить состояние, надо запустить команду:
docker ps -a
Эта команда выведет список всех доступных контейнеров с их состоянием на сервере. Из этого списка нужно выбрать требуемый контейнер и узнать его состояние.
Чтобы определить состояние, надо запустить команду:
docker ps -a
Эта команда выведет список всех доступных контейнеров с их состоянием на сервере. Из этого списка нужно выбрать требуемый контейнер и узнать его состояние.
Forwarded from Proglib.academy | IT-курсы
💀 Как гарантированно провалить собеседование: 10 верных способов
В интернете можно найти много статей с советами, как идеально пройти собеседование: что говорить, как говорить, как себя вести, с чем приходить, как готовиться, где готовиться, какую информацию предварительно изучить. В общем, инструкций — вагон. Но, если честно, не очень хочется повторяться. Поэтому мы подготовили шуточную статью, как точно провалить собеседование.
Чтобы не завалить собеседование — забирайте наш курс:
🔵 Базовые модели ML и приложения
🔗 Ссылка на статью
В интернете можно найти много статей с советами, как идеально пройти собеседование: что говорить, как говорить, как себя вести, с чем приходить, как готовиться, где готовиться, какую информацию предварительно изучить. В общем, инструкций — вагон. Но, если честно, не очень хочется повторяться. Поэтому мы подготовили шуточную статью, как точно провалить собеседование.
Чтобы не завалить собеседование — забирайте наш курс:
🔗 Ссылка на статью
Please open Telegram to view this post
VIEW IN TELEGRAM