😎👨💻 Вам следует написать новый язык программирования: он будет ужасным, но это нормально
У нас, программистов, есть почти полный контроль над машиной и, теоретически, мы способны создать всё с нуля. Так как мы работаем с программными инструментами и сами пишем софт, то можем создавать инструменты для себя, начиная с операционной системы и выше. Это привилегия, недоступная для большинства областей деятельности.
Так почему бы в качестве пет-проекта не выбрать новый ЯП и какой в этом вообще смысл? Вы узнаете о грамматике и архитектуре языка, парсинге, среде исполнения и многом другом.
👉 Подробнее читайте в статье.
У нас, программистов, есть почти полный контроль над машиной и, теоретически, мы способны создать всё с нуля. Так как мы работаем с программными инструментами и сами пишем софт, то можем создавать инструменты для себя, начиная с операционной системы и выше. Это привилегия, недоступная для большинства областей деятельности.
Так почему бы в качестве пет-проекта не выбрать новый ЯП и какой в этом вообще смысл? Вы узнаете о грамматике и архитектуре языка, парсинге, среде исполнения и многом другом.
👉 Подробнее читайте в статье.
🚀 Ускорьте свою базу данных: 7 проверенных методов масштабирования и оптимизации
Масштабирование улучшает производительность и повышает надежность систем хранения данных путем оптимизации использования ресурсов и распределения нагрузки. В этой статье мы рассмотрим 7 эффективных методов масштабирования и оптимизации базы данных.
🔗 Читать статью
🔗 Зеркало
Масштабирование улучшает производительность и повышает надежность систем хранения данных путем оптимизации использования ресурсов и распределения нагрузки. В этой статье мы рассмотрим 7 эффективных методов масштабирования и оптимизации базы данных.
🔗 Читать статью
🔗 Зеркало
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования
🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования
🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
▶ Подборка топовых докладов с конференции Saint HighLoad++ 2023: на заметку разрабу
• Распределенные графовые СУБД — будущее для аналитики на Больших Данных? / Павел Велихов (TigerGraph)
• Как мы переживаем сплит-брейн и продолжаем писать данные по S3-протоколу / С. Богатырев (YADRO)
• Use actors, Luke / Андрей Парамонов (Dodo Engineering)
• Управляем доступом в распределённой Linux-инфраструктуре / Антон Жаболенко, Павел Пархомец
• Warden — зачем нам свой service mesh? / Ильяс Нежибицкий (Ozon)
• Делаем Сбербанк Онлайн надежнее и надежнее: как мы готовимся к пиковым нагрузкам / Артем Арюткин
• 7 петабайт логов в Elastic. Как мы это сделали? / Роман Николаев (Тинькофф)
• 5 GB трейсов в секунду, или Как устроена система трассировки в Ozon / Владимир Балун (Ozon)
• Микросервисы как худший архитектурный выбор для стартапа / Даниил Подольский (YADRO)
• Современные базы данных. Как выбрать СУБД в 2023? / Олег Бондарь (Яндекс)
• Распределенные графовые СУБД — будущее для аналитики на Больших Данных? / Павел Велихов (TigerGraph)
• Как мы переживаем сплит-брейн и продолжаем писать данные по S3-протоколу / С. Богатырев (YADRO)
• Use actors, Luke / Андрей Парамонов (Dodo Engineering)
• Управляем доступом в распределённой Linux-инфраструктуре / Антон Жаболенко, Павел Пархомец
• Warden — зачем нам свой service mesh? / Ильяс Нежибицкий (Ozon)
• Делаем Сбербанк Онлайн надежнее и надежнее: как мы готовимся к пиковым нагрузкам / Артем Арюткин
• 7 петабайт логов в Elastic. Как мы это сделали? / Роман Николаев (Тинькофф)
• 5 GB трейсов в секунду, или Как устроена система трассировки в Ozon / Владимир Балун (Ozon)
• Микросервисы как худший архитектурный выбор для стартапа / Даниил Подольский (YADRO)
• Современные базы данных. Как выбрать СУБД в 2023? / Олег Бондарь (Яндекс)
🎯 Коллекция ресурсов для успешного прохождения следующего технического собеса
Добавить можно множество мок-собеседований на русском языке на YouTube.
👉 Источник
Добавить можно множество мок-собеседований на русском языке на YouTube.
👉 Источник
Приглашенный спикер: Павел Запольский – Senior Quantitative Researcher at Exness и Co-founder GrowLytics. Запустивший более 10 проектов по машинному обучению и анализу данных для ведущих компаний.
Please open Telegram to view this post
VIEW IN TELEGRAM
Библиотека программиста | программирование, кодинг, разработка
🎮🚀 Saturated Outer Space: как инди-разработчики перезапускают игру и бросают вызов жанровым стереотипам Разработчики S.O.S. рассказывают, как создавать и продвигать инди-игру с нулевым бюджетом и что делать, если не хватает ресурсов продолжать дальше. 👉…
🎮 Внимание, инди-разработчики и создатели небольших игровых проектов! 🔊
У вас есть уникальный опыт, которым вы хотите поделиться? Мы предлагаем вам отличную возможность!
Напишите статью о вашем проекте и процессе разработки:
• Архитектурные решения и паттерны проектирования
• Оптимизация производительности и решение технических проблем
• Использование новых технологий или фреймворков
• Опыт работы с игровыми движками (Unity, Unreal Engine, Godot и др.)
• Реализация сложных игровых механик
• Алгоритмы ИИ и поведение неигровых персонажей
• Сетевой код и решение проблем многопользовательского режима
• Кроссплатформенная разработка и особенности портирования
• Инструменты и методологии для повышения эффективности разработки
• Опыт внедрения процедурной генерации контента
• Решение проблем с управлением памятью и оптимизацией ресурсов
• Интеграция с внешними сервисами и API
• и т. д.
Мы опубликуем её совершенно бесплатно на нашем сайте и в социальных сетях!
Это ваш шанс:
• Поделиться своим опытом с сообществом
• Получить дополнительное освещение вашего проекта
• Внести вклад в развитие индустрии инди-игр
Не упустите эту возможность рассказать свою историю!
📩 Отправьте вашу идею на hello@proglib.io с темой «Статья от инди-разработчика».
У вас есть уникальный опыт, которым вы хотите поделиться? Мы предлагаем вам отличную возможность!
Напишите статью о вашем проекте и процессе разработки:
• Архитектурные решения и паттерны проектирования
• Оптимизация производительности и решение технических проблем
• Использование новых технологий или фреймворков
• Опыт работы с игровыми движками (Unity, Unreal Engine, Godot и др.)
• Реализация сложных игровых механик
• Алгоритмы ИИ и поведение неигровых персонажей
• Сетевой код и решение проблем многопользовательского режима
• Кроссплатформенная разработка и особенности портирования
• Инструменты и методологии для повышения эффективности разработки
• Опыт внедрения процедурной генерации контента
• Решение проблем с управлением памятью и оптимизацией ресурсов
• Интеграция с внешними сервисами и API
• и т. д.
Мы опубликуем её совершенно бесплатно на нашем сайте и в социальных сетях!
Это ваш шанс:
• Поделиться своим опытом с сообществом
• Получить дополнительное освещение вашего проекта
• Внести вклад в развитие индустрии инди-игр
Не упустите эту возможность рассказать свою историю!
📩 Отправьте вашу идею на hello@proglib.io с темой «Статья от инди-разработчика».
🤯⚡ Кто угодно может получать доступ к данным из удалённых форков, удалённых репозиториев и даже приватных репозиториев GitHub. Эти данные доступны всегда. И это не баг, а фича.
Это настолько огромный вектор атак для всех организаций, использующих GitHub, что родился новый термин: Cross Fork Object Reference (CFOR). CFOR возникает, когда форк одного репозитория может получить доступ к требующим защиты данным из другого форка (в том числе и к данным из приватных и удалённых форков).
Аналогично Insecure Direct Object Reference, при CFOR пользователи передают хэши коммитов, чтобы напрямую получать доступ к данным коммитов, которые иначе были бы для них невидимыми.
👉 Подробнее
Это настолько огромный вектор атак для всех организаций, использующих GitHub, что родился новый термин: Cross Fork Object Reference (CFOR). CFOR возникает, когда форк одного репозитория может получить доступ к требующим защиты данным из другого форка (в том числе и к данным из приватных и удалённых форков).
Аналогично Insecure Direct Object Reference, при CFOR пользователи передают хэши коммитов, чтобы напрямую получать доступ к данным коммитов, которые иначе были бы для них невидимыми.
👉 Подробнее
This media is not supported in your browser
VIEW IN TELEGRAM
🛠 PGlite — WASM-сборка Postgres от ElectricSQL. Она упакована в клиентскую библиотеку TypeScript, которая позволяет запускать Postgres в браузере, Node.js и Bun, без необходимости установки каких-либо других зависимостей.
И да, она занимает всего 3 МБ в gzip-архиве и поддерживает множество расширений Postgres, включая pgvector.
Любите автоматизацию и искусственный интеллект? Создайте и опубликуйте базу данных Postgres с помощью ИИ, созданного на основе PGlite компанией Supabase.
👉 Сайт & GitHub
И да, она занимает всего 3 МБ в gzip-архиве и поддерживает множество расширений Postgres, включая pgvector.
Любите автоматизацию и искусственный интеллект? Создайте и опубликуйте базу данных Postgres с помощью ИИ, созданного на основе PGlite компанией Supabase.
👉 Сайт & GitHub
🤖 Напоминаем, что у нас есть еженедельная email-рассылка, посвященная последним новостям и тенденциям в мире искусственного интеллекта.
В ней:
● Новости о прорывных исследованиях в области машинного обучения и нейросетей
● Материалы о применении ИИ в разных сферах
● Статьи об этических аспектах развития технологий
● Подборки лучших онлайн-курсов и лекций по машинному обучению
● Обзоры инструментов и библиотек для разработки нейронных сетей
● Ссылки на репозитории с открытым исходным кодом ИИ-проектов
● Фильмы, сериалы и книги
👉Подписаться👈
В ней:
● Новости о прорывных исследованиях в области машинного обучения и нейросетей
● Материалы о применении ИИ в разных сферах
● Статьи об этических аспектах развития технологий
● Подборки лучших онлайн-курсов и лекций по машинному обучению
● Обзоры инструментов и библиотек для разработки нейронных сетей
● Ссылки на репозитории с открытым исходным кодом ИИ-проектов
● Фильмы, сериалы и книги
👉Подписаться👈
Системы для потоковой обработки данных обеспечивают непрерывный прием, обработку и анализ информации по мере ее поступления. Их главная цель — предоставление аналитических выводов и принятие решений практически в режиме реального времени.
Такие системы используются, к примеру, для мгновенной персонализации рекламы, анализа поведения пользователей и обнаружения мошеннических действий. Требования к системам очень высоки:
• Низкая задержка — максимально быстрая обработка данных с минимальным временем ожидания.
• Высокая пропускная способность — для обработки больших объемов данных.
• Отказоустойчивость — система должна продолжать работу даже при возникновении сбоев.
Для реализации эффективной системы нужно решить множество серьезных проблем, которые возникают на каждом этапе обработки данных:
Прием данных
• Необходимо работать с разными источниками данных, форматами и структурами.
• Надо поддерживать высокую пропускную способность даже при резких всплесках объема данных.
Обработка
• Каждую запись нужно обработать только один раз.
• Надо реализовать работу со сложными сценариями (вычисления с сохранением состояния; обработку событий, поступивших не по порядку; обработку данных, прибывших с задержкой).
• Все это должно выполняться масштабируемо и отказоустойчиво!
Аналитика в реальном времени
Надо обеспечить:
• Быстрые ответы на запросы к свежим данным.
• Непрерывный прием и обработку данных из потоковых источников.
• Сохранение полноты и согласованности данных.
Пока что не существует одного инструмента, способного выполнять все эти действия. Поэтому архитектуры потоковой обработки в реальном времени обычно состоят из нескольких специализированных инструментов от Apache, работающих вместе:
• Kafka отвечает за надежный прием и передачу данных.
• Flink обеспечивает мощную обработку потоков данных.
• Pinot предоставляет возможности для быстрой аналитики.
На основе этих инструментов можно создать комплексное, гибкое и масштабируемое решение, способное справиться со всеми проблемами, связанными с обработкой данных в реальном времени. Подробнее — в этой публикации.
Please open Telegram to view this post
VIEW IN TELEGRAM
🐘🧠 Оптимизация использования памяти в PostgreSQL: секреты профессионалов
Сложные (и многочисленные) операции в базе данных требуют солидного объема оперативной памяти — например, для создания набора результатов PostgreSQL обычно приходится:
🔹 Выполнить поиск по индексу.
🔹 Извлечь связанные строки из одной или нескольких таблиц.
🔹 Объединить, отфильтровать, агрегировать и отсортировать кортежи в пригодный для использования результат.
Каждый из этих шагов требует памяти, и PostgreSQL может обрабатывать тысячи таких запросов одновременно. Так что рано или поздно перед разработчиками любого серьезного проекта встает необходимость решения нескольких сложных вопросов:
🔹 Как грамотно оптимизировать использование доступной памяти?
🔹 В каком соотношении распределить ОЗУ между несколькими типами памяти, которые необходимы PostgreSQL для эффективной работы?
🔹 Как предотвратить защитное завершение операционной системой процесса PostgreSQL, который использует слишком много памяти?
Для ответов на все эти вопросы нужно определить, сколько именно памяти использует PostgreSQL для основных процессов — а это сама по себе нетривиальная задача. Советы по настройке памяти так многочисленны и разнообразны, что в них сложно сориентироваться.
Поэтому в этой статье мы сведем всю мудрость экспертов к конкретным шагам, которые помогут максимально эффективно распорядиться доступной памятью.
🔗 Читать статью
🔗 Зеркало
Сложные (и многочисленные) операции в базе данных требуют солидного объема оперативной памяти — например, для создания набора результатов PostgreSQL обычно приходится:
🔹 Выполнить поиск по индексу.
🔹 Извлечь связанные строки из одной или нескольких таблиц.
🔹 Объединить, отфильтровать, агрегировать и отсортировать кортежи в пригодный для использования результат.
Каждый из этих шагов требует памяти, и PostgreSQL может обрабатывать тысячи таких запросов одновременно. Так что рано или поздно перед разработчиками любого серьезного проекта встает необходимость решения нескольких сложных вопросов:
🔹 Как грамотно оптимизировать использование доступной памяти?
🔹 В каком соотношении распределить ОЗУ между несколькими типами памяти, которые необходимы PostgreSQL для эффективной работы?
🔹 Как предотвратить защитное завершение операционной системой процесса PostgreSQL, который использует слишком много памяти?
Для ответов на все эти вопросы нужно определить, сколько именно памяти использует PostgreSQL для основных процессов — а это сама по себе нетривиальная задача. Советы по настройке памяти так многочисленны и разнообразны, что в них сложно сориентироваться.
Поэтому в этой статье мы сведем всю мудрость экспертов к конкретным шагам, которые помогут максимально эффективно распорядиться доступной памятью.
🔗 Читать статью
🔗 Зеркало
📶 Паттерны коммуникации в распределенных системах
Распределенные системы состоят из многих отдельных частей/узлов, работающих вместе, но физически расположенных в разных местах. Эти части системы должны общаться друг с другом через сеть, чтобы система могла функционировать как единое целое.
Хотя коммуникация критически важна, правильно ее организовать бывает непросто: разработчики иногда пытаются использовать один и тот же подход ко всем задачам коммуникации, что может быть неэффективно. Важно понимать, что существуют разные способы организации коммуникации, и выбор правильного метода зависит от конкретной задачи. Рассмотрим основные паттерны коммуникации, которые можно использовать для решения разных задач.
☑️ Запрос-ответ с 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