---
title: Архитектура
seo:
  title: Архитектура — Go Developer
  description: Тема «Архитектура» для собеседования Go Developer. Что такое микросервисная архитектура? Чем отличается микросервис от монолита?
---

[Все темы Go Developer](/go-developer)

## <strong>Что такое микросервисная архитектура?</strong> [#q-14bee738d69b812b9595e899d4f10df5]

Микросервисная архитектура — это стиль архитектуры программного обеспечения, в котором приложение состоит из набора мелких, автономных сервисов, взаимодействующих друг с другом через четко определенные интерфейсы, обычно через HTTP API или сообщения.

#### Основные характеристики&#58;

{/* prettier-ignore */}
1. <strong>Модульность</strong>&#58;

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

1. <strong>Независимость развертывания</strong>&#58;

    - Микросервисы могут разрабатываться, тестироваться, разворачиваться и масштабироваться независимо друг от друга.

1. <strong>Автономность</strong>&#58;

    - Каждый микросервис имеет свою собственную базу данных и не делится ею с другими сервисами напрямую.

1. <strong>Гибкость</strong>&#58;

    - Микросервисы могут быть написаны на разных языках программирования и использовать разные технологии.

1. <strong>Устойчивость</strong>&#58;

    - Проблемы в одном микросервисе не обязательно влияют на работу всего приложения.

#### Преимущества&#58;

- <strong>Масштабируемость</strong>&#58; Легко масштабировать отдельные
  микросервисы в зависимости от нагрузки.

- <strong>Гибкость разработки</strong>&#58; Разные команды могут работать над
  разными микросервисами параллельно.

- <strong>Упрощение деплоя</strong>&#58; Возможность обновлять и разворачивать
  микросервисы независимо друг от друга.

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

#### Пример&#58;

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

:::note[Ссылки для изучения]

1. [Построение микросервисной архитектуры на Go](https://habr.com/ru/articles/425653/)
   :::

---

## <strong>Чем отличается микросервис от монолита?</strong> [#q-14bee738d69b81278d68da8152cacccd]

Отличия микросервисной архитектуры от монолита&#58;

#### Монолитная архитектура&#58;

{/* prettier-ignore */}
1. <strong>Единое приложение</strong>&#58;

    - Все компоненты и модули приложения объединены в один большой кодовый базис и исполняемый файл.

1. <strong>Единая база данных</strong>&#58;

    - Обычно все части приложения используют одну общую базу данных.

1. <strong>Совместное развертывание</strong>&#58;

    - Все модули разворачиваются и обновляются одновременно.

1. <strong>Целостность кода</strong>&#58;

    - Труднее изменить одну часть системы без риска нарушить работу других частей.

1. <strong>Масштабируемость</strong>&#58;

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

#### Микросервисная архитектура&#58;

{/* prettier-ignore */}
1. <strong>Модульное приложение</strong>&#58;

    - Приложение разделено на множество мелких, автономных сервисов, каждый из которых отвечает за свою бизнес-функцию.

1. <strong>Разделенные базы данных</strong>&#58;

    - Каждый микросервис может иметь свою собственную базу данных.

1. <strong>Независимое развертывание</strong>&#58;

    - Микросервисы могут развертываться и обновляться независимо друг от друга.

1. <strong>Изоляция кода</strong>&#58;

    - Изменения в одном микросервисе не влияют напрямую на другие микросервисы, что облегчает разработку и тестирование.

1. <strong>Масштабируемость</strong>&#58;

    - Легко масштабировать отдельные микросервисы по мере необходимости, что делает систему более гибкой и эффективной.

#### Вывод&#58;

- <strong>Монолит</strong>&#58; Легче разрабатывать и развертывать на начальных
  этапах, но сложнее масштабировать и поддерживать по мере роста.

- <strong>Микросервисы</strong>&#58; Более гибкие, масштабируемые и устойчивые к
  изменениям, но требуют более сложного управления и оркестрации.

:::note[Ссылки для изучения]

1. [Построение микросервисной архитектуры на Go](https://habr.com/ru/articles/425653/)
   :::

---

## <strong>Опишите плюсы и минусы двух концепций, монолита и микросервиса</strong> [#q-14bee738d69b816dbdc1db104a7c5c91]

Плюсы и минусы двух концепций&#58;

#### Монолитная архитектура&#58;

<strong>Плюсы</strong>
<strong>&#58;</strong>

- <strong>Простота разработки&#58;</strong> Единая кодовая база упрощает начало
  работы и изменение приложения.

- <strong>Производительность&#58;</strong> Меньше накладных расходов на
  взаимодействие между компонентами.

- <strong>Проще мониторинг и отладка&#58;</strong> Единые логи и инструменты для
  отслеживания.

- <strong>Простота развертывания&#58;</strong> Один образ для развертывания.

<strong>Минусы</strong>
<strong>&#58;</strong>

- Масштабирование&#58; монолит можно масштабировать вертикально и горизонтально, но обычно приходится реплицировать приложение целиком, даже если нагрузка растет лишь на один модуль.

- <strong>Зависимость от технологий&#58;</strong> Одна технология для всего
  приложения.

- <strong>Ограниченная гибкость&#58;</strong> Изменения в одной части могут
  затронуть всё приложение.

- <strong>Единая точка отказа&#58;</strong> Ошибка в одной части может повлиять
  на всё приложение.

#### Микросервисная архитектура&#58;

<strong>Плюсы</strong>
<strong>&#58;</strong>

- <strong>Гибкость технологий&#58;</strong> Каждый сервис может использовать
  свой язык и технологии.

- <strong>Лёгкость масштабирования&#58;</strong> Каждый сервис масштабируется
  независимо.

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

- <strong>Простота разработки&#58;</strong> Каждый сервис можно разрабатывать и
  тестировать независимо.

<strong>Минусы</strong>
<strong>&#58;</strong>

- <strong>Сложность управления&#58;</strong> Необходимость управления большим
  числом сервисов и их координации.

- <strong>Сложность отладки&#58;</strong> Сложнее отслеживать и отлаживать
  взаимодействия между сервисами.

- <strong>Усложнённое развёртывание&#58;</strong> Более сложное управление
  версиями и деплоями.

- <strong>Дополнительные затраты&#58;</strong> Больше затрат на инфраструктуру и
  поддержку.

:::note[Ссылки для изучения]

1. [Построение микросервисной архитектуры на Go](https://habr.com/ru/articles/425653/)
   :::
