Главная Блог Микросервисы vs монолит для SaaS: когда что выбрать

Микросервисы vs монолит для SaaS: когда что выбрать

22.08.2026
Автор статьи
Ксения Положенцева (CEO, X Studio)
С 2019 года участвует в запуске цифровых продуктов и помогла разработать около 100 проектов, включая более 50 MVP для стартапов.

Монолит и микросервисы для SaaS нужно выбирать по стадии продукта, нагрузке, размеру команды и зрелости процессов. На раннем этапе чаще разумнее начинать с монолита или модульного монолита: так команда быстрее проверяет гипотезы и не тратит ресурсы на распределенную инфраструктуру. Микросервисы имеют смысл, когда отдельные части продукта требуют независимого масштабирования, а команда уже готова поддерживать развертывание, мониторинг, отказоустойчивость и обмен данными между сервисами.

Монолит vs микросервисы: ключевые отличия для SaaS

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

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

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

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

Критерий Монолит Микросервисы
Развертывание Единый цикл Независимое по сервисам
Масштабирование Целиком По отдельным модулям
Командная структура Одна команда Автономные подгруппы
Операционная сложность Ниже на старте Выше из-за сети, мониторинга и отказоустойчивости

Когда выбирать монолит для SaaS-проекта

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

Если команда разработчиков состоит из 8-10 инженеров, монолитная архитектура обычно дает больше скорости и меньше накладных расходов. Один SaaS-сервис для управления складскими остатками может быстрее выйти на рынок на монолите, чем конкуренты, которые с первого дня закладывают микросервисы. Быстрый запуск напрямую влияет на окупаемость инвестиций: чем раньше продукт получает первых платящих клиентов, тем раньше команда проверяет спрос и возвращает вложения в разработку.

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

Из практики X Studio: для SaaS-MVP мы чаще рекомендуем не классический «тяжелый» монолит, а модульный монолит. В нем продукт остается единым приложением, но ключевые зоны - пользователи, роли, биллинг, аналитика, интеграции - сразу разделяются логически. Такой подход сохраняет скорость разработки и оставляет возможность аккуратно вынести отдельный модуль в сервис позже.

Ксения Положенцева (CEO, X Studio)

Модульный монолит как промежуточный вариант

Модульный монолит - это компромисс между простым монолитом и микросервисами. Продукт остается единым приложением, но внутри делится на модули с понятными границами: например, биллинг, аккаунты, уведомления и аналитику.

В исследовании Modular Monolith: Is This the Trend in Software Architecture? Руоюй Су и Сяочжоу Ли из Университета Оулу разобрали 64 отраслевых материала и показали, что такой подход уже стал заметной практикой в индустрии. Команды используют модульный монолит, чтобы не переходить к микросервисам слишком рано, но заранее подготовить систему к возможному разделению.

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

Как компании используют модульный монолит на практике

В исследовании разобраны примеры компаний, которые выбрали модульный монолит как альтернативу раннему переходу на микросервисы.

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

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

Gusto - платформа для расчета зарплат, управления льготами и HR-процессами. В исследовании Su и Li описан пример, где команда выбрала модульный монолит, потому что ошибка в границах сервисов на этапе микросервисной архитектуры была бы слишком дорогой.

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

Инструменты для модульного монолита

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

Service Weaver от Google позволяет писать приложение как модульный монолит, а затем при необходимости разворачивать его компоненты как распределенные сервисы. Это полезно для команд, которые хотят начать проще, но сохранить возможность будущего масштабирования.

Spring Modulith помогает строить модульные приложения на Spring Boot: проверять границы модулей, тестировать их отдельно и документировать структуру приложения. Такой инструмент полезен, когда команда хочет удерживать порядок внутри монолита и не допускать хаотичных связей между частями системы.

Light-hybrid-4j - фреймворк на базе Light-4j для модульной монолитной и серверной архитектуры. Он позволяет строить приложение как набор модулей и использовать RPC-подход для взаимодействия между ними, не превращая систему сразу в набор самостоятельных микросервисов.

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

Когда переходить на микросервисы SaaS

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

На этом этапе микросервисная архитектура действительно раскрывает преимущества: отдельные сервисы можно развивать, развертывать и масштабировать независимо. Это полезно для зрелых SaaS-продуктов, где разные части системы живут с разной нагрузкой и скоростью изменений.

Но у микросервисов есть «микросервисный налог»: сетевые вызовы, распределенная отладка, трассировка запросов, согласованность данных между сервисами и больше требований к наблюдаемости. Поэтому переход оправдан только тогда, когда монолит становится реальным узким местом для роста продукта. Миграция должна идти постепенно: сначала выделяют границы доменов, затем стабилизируют контракты между модулями и только потом выносят отдельные части в самостоятельные сервисы.

Роль Kubernetes для SaaS при масштабировании микросервисов

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

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

Для обмена сообщениями между сервисами часто добавляют брокер сообщений. Он снижает связанность модулей, но усложняет систему: появляется новая инфраструктурная зависимость, которую нужно мониторить, обновлять и защищать. Поэтому микросервисная архитектура требует зрелой DevOps-культуры, то есть связки разработки, эксплуатации и автоматизации релизов.

Перед внедрением Kubernetes важно задать простой вопрос: какую проблему он решает прямо сейчас. Если ответ сводится к «так принято в крупных проектах», внедрение лучше отложить. Если есть реальные требования к независимому масштабированию сервисов, автоматическому восстановлению и стабильным релизам, Kubernetes может быть оправдан.

Ксения Положенцева (CEO, X Studio)

Как принять решение: чек-лист для SaaS-команды

Решение об архитектуре нужно принимать через состояние продукта, а не через вкусы команды. Если SaaS только проверяет спрос, лучше начать с монолита или модульного монолита. Если продукт уже растет, отдельные модули требуют независимого масштабирования, а команда умеет сопровождать распределенную инфраструктуру, можно планировать переход к микросервисам.

Перед выбором или миграцией архитектуры стоит честно ответить на несколько вопросов:

  • Превышает ли команда разработчиков 10-15 человек и работает ли она подгруппами?
  • Есть ли модули с заметно разной нагрузкой, требующие независимого масштабирования?
  • Оправдывает ли ожидаемая окупаемость инвестиций расходы на распределенную инфраструктуру?
  • Готова ли команда использовать Domain-Driven Design (предметно-ориентированное проектирование) для декомпозиции монолита на границы доменов?
  • Рассматривался ли модульный монолит как промежуточный шаг перед полным дроблением?
  • Есть ли у команды мониторинг, логи, трассировка запросов и процесс быстрого восстановления после сбоев?
Нужна помощь с выбором архитектуры для SaaS-продукта?
Обсудите проект с командой X Studio

FAQ

Когда SaaS-проекту лучше выбрать монолит?

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

Чем модульный монолит отличается от обычного монолита?

Модульный монолит остается единым приложением, но внутри делится на модули с понятными границами: например, биллинг, аккаунты, уведомления и аналитику.

Когда переходить на микросервисы?

Переход оправдан, когда монолит начал ограничивать конкретные зоны роста: нагрузка растет неравномерно, отдельные модули нужно масштабировать независимо, а команды уже работают автономными подгруппами.

Всегда ли SaaS-проекту нужен Kubernetes?

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

Источники

1. AWS, What are Microservices?: aws.amazon.com/microservices

2. Martin Fowler, Monolith First: martinfowler.com/bliki/MonolithFirst.html

3. Etsy Code as Craft, Migrating Our Monolith to the Cloud: etsy.com/codeascraft/events/keyur-govande-migrating-our-monolith-to-the-cloud

4. Ruoyu Su, Xiaozhou Li, Modular Monolith: Is This the Trend in Software Architecture?: arxiv.org/abs/2401.11867

5. Service Weaver, Docs: serviceweaver.dev/docs.html

6. Spring Modulith, Spring Modulith Project: spring.io/projects/spring-modulith

7. Light-hybrid-4j, Hybrid Service Framework: doc.networknt.com/tutorial/hybrid

Главная Блог Микросервисы vs монолит для SaaS: когда что выбрать
Микросервисы vs монолит для SaaS: когда что выбрать
22.08.2026
Автор статьи
Ксения Положенцева (CEO, X Studio)
С 2019 года участвует в запуске цифровых продуктов и помогла разработать около 100 проектов, включая более 50 MVP для стартапов.

Монолит и микросервисы для SaaS нужно выбирать по стадии продукта, нагрузке, размеру команды и зрелости процессов. На раннем этапе чаще разумнее начинать с монолита или модульного монолита: так команда быстрее проверяет гипотезы и не тратит ресурсы на распределенную инфраструктуру. Микросервисы имеют смысл, когда отдельные части продукта требуют независимого масштабирования, а команда уже готова поддерживать развертывание, мониторинг, отказоустойчивость и обмен данными между сервисами.

Монолит vs микросервисы: ключевые отличия для SaaS

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

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

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

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

Критерий Монолит Микросервисы
Развертывание Единый цикл Независимое по сервисам
Масштабирование Целиком По отдельным модулям
Командная структура Одна команда Автономные подгруппы
Операционная сложность Ниже на старте Выше из-за сети, мониторинга и отказоустойчивости

Когда выбирать монолит для SaaS-проекта

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

Если команда разработчиков состоит из 8-10 инженеров, монолитная архитектура обычно дает больше скорости и меньше накладных расходов. Один SaaS-сервис для управления складскими остатками может быстрее выйти на рынок на монолите, чем конкуренты, которые с первого дня закладывают микросервисы. Быстрый запуск напрямую влияет на окупаемость инвестиций: чем раньше продукт получает первых платящих клиентов, тем раньше команда проверяет спрос и возвращает вложения в разработку.

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

Из практики X Studio: для SaaS-MVP мы чаще рекомендуем не классический «тяжелый» монолит, а модульный монолит. В нем продукт остается единым приложением, но ключевые зоны - пользователи, роли, биллинг, аналитика, интеграции - сразу разделяются логически. Такой подход сохраняет скорость разработки и оставляет возможность аккуратно вынести отдельный модуль в сервис позже.

Ксения Положенцева (CEO, X Studio)

Модульный монолит как промежуточный вариант

Модульный монолит - это компромисс между простым монолитом и микросервисами. Продукт остается единым приложением, но внутри делится на модули с понятными границами: например, биллинг, аккаунты, уведомления и аналитику.

В исследовании Modular Monolith: Is This the Trend in Software Architecture? Руоюй Су и Сяочжоу Ли из Университета Оулу разобрали 64 отраслевых материала и показали, что такой подход уже стал заметной практикой в индустрии. Команды используют модульный монолит, чтобы не переходить к микросервисам слишком рано, но заранее подготовить систему к возможному разделению.

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

Как компании используют модульный монолит на практике

В исследовании разобраны примеры компаний, которые выбрали модульный монолит как альтернативу раннему переходу на микросервисы.

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

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

Gusto - платформа для расчета зарплат, управления льготами и HR-процессами. В исследовании Su и Li описан пример, где команда выбрала модульный монолит, потому что ошибка в границах сервисов на этапе микросервисной архитектуры была бы слишком дорогой.

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

Инструменты для модульного монолита

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

Service Weaver от Google позволяет писать приложение как модульный монолит, а затем при необходимости разворачивать его компоненты как распределенные сервисы. Это полезно для команд, которые хотят начать проще, но сохранить возможность будущего масштабирования.

Spring Modulith помогает строить модульные приложения на Spring Boot: проверять границы модулей, тестировать их отдельно и документировать структуру приложения. Такой инструмент полезен, когда команда хочет удерживать порядок внутри монолита и не допускать хаотичных связей между частями системы.

Light-hybrid-4j - фреймворк на базе Light-4j для модульной монолитной и серверной архитектуры. Он позволяет строить приложение как набор модулей и использовать RPC-подход для взаимодействия между ними, не превращая систему сразу в набор самостоятельных микросервисов.

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

Когда переходить на микросервисы SaaS

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

На этом этапе микросервисная архитектура действительно раскрывает преимущества: отдельные сервисы можно развивать, развертывать и масштабировать независимо. Это полезно для зрелых SaaS-продуктов, где разные части системы живут с разной нагрузкой и скоростью изменений.

Но у микросервисов есть «микросервисный налог»: сетевые вызовы, распределенная отладка, трассировка запросов, согласованность данных между сервисами и больше требований к наблюдаемости. Поэтому переход оправдан только тогда, когда монолит становится реальным узким местом для роста продукта. Миграция должна идти постепенно: сначала выделяют границы доменов, затем стабилизируют контракты между модулями и только потом выносят отдельные части в самостоятельные сервисы.

Роль Kubernetes для SaaS при масштабировании микросервисов

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

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

Для обмена сообщениями между сервисами часто добавляют брокер сообщений. Он снижает связанность модулей, но усложняет систему: появляется новая инфраструктурная зависимость, которую нужно мониторить, обновлять и защищать. Поэтому микросервисная архитектура требует зрелой DevOps-культуры, то есть связки разработки, эксплуатации и автоматизации релизов.

Перед внедрением Kubernetes важно задать простой вопрос: какую проблему он решает прямо сейчас. Если ответ сводится к «так принято в крупных проектах», внедрение лучше отложить. Если есть реальные требования к независимому масштабированию сервисов, автоматическому восстановлению и стабильным релизам, Kubernetes может быть оправдан.

Ксения Положенцева (CEO, X Studio)

Как принять решение: чек-лист для SaaS-команды

Решение об архитектуре нужно принимать через состояние продукта, а не через вкусы команды. Если SaaS только проверяет спрос, лучше начать с монолита или модульного монолита. Если продукт уже растет, отдельные модули требуют независимого масштабирования, а команда умеет сопровождать распределенную инфраструктуру, можно планировать переход к микросервисам.

Перед выбором или миграцией архитектуры стоит честно ответить на несколько вопросов:

  • Превышает ли команда разработчиков 10-15 человек и работает ли она подгруппами?
  • Есть ли модули с заметно разной нагрузкой, требующие независимого масштабирования?
  • Оправдывает ли ожидаемая окупаемость инвестиций расходы на распределенную инфраструктуру?
  • Готова ли команда использовать Domain-Driven Design (предметно-ориентированное проектирование) для декомпозиции монолита на границы доменов?
  • Рассматривался ли модульный монолит как промежуточный шаг перед полным дроблением?
  • Есть ли у команды мониторинг, логи, трассировка запросов и процесс быстрого восстановления после сбоев?
Нужна помощь с выбором архитектуры для SaaS-продукта?
Обсудите проект с командой X Studio

FAQ

Когда SaaS-проекту лучше выбрать монолит?

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

Чем модульный монолит отличается от обычного монолита?

Модульный монолит остается единым приложением, но внутри делится на модули с понятными границами: например, биллинг, аккаунты, уведомления и аналитику.

Когда переходить на микросервисы?

Переход оправдан, когда монолит начал ограничивать конкретные зоны роста: нагрузка растет неравномерно, отдельные модули нужно масштабировать независимо, а команды уже работают автономными подгруппами.

Всегда ли SaaS-проекту нужен Kubernetes?

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

Источники

1. AWS, What are Microservices?: aws.amazon.com/microservices

2. Martin Fowler, Monolith First: martinfowler.com/bliki/MonolithFirst.html

3. Etsy Code as Craft, Migrating Our Monolith to the Cloud: etsy.com/codeascraft/events/keyur-govande-migrating-our-monolith-to-the-cloud

4. Ruoyu Su, Xiaozhou Li, Modular Monolith: Is This the Trend in Software Architecture?: arxiv.org/abs/2401.11867

5. Service Weaver, Docs: serviceweaver.dev/docs.html

6. Spring Modulith, Spring Modulith Project: spring.io/projects/spring-modulith

7. Light-hybrid-4j, Hybrid Service Framework: doc.networknt.com/tutorial/hybrid