---
title: MS Azure
seo:
  title: "MS Azure — С# Developer"
  description: "Тема «MS Azure» для собеседования С# Developer. Какие виды сервисов бывают в Service Fabric? Какие особенности и ограничения Azure Table Storage?"
---

[Все темы С# Developer](/s-developer)

## <strong>Какие виды сервисов бывают в</strong> <code>Service Fabric</code><strong>?</strong> [#q-14bee738d69b81dda49cc20afc7ab798]

Виды сервисов в <code>Service Fabric</code>&#58;

{/* prettier-ignore */}
1. <code>Stateless Services</code> <strong>(Бестатусные сервисы)&#58;</strong>

    - <strong>Описание&#58;</strong> Сервисы, которые не сохраняют внутреннее состояние между вызовами.

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

    - <strong>Преимущества&#58;</strong> Легкость масштабирования, отсутствие необходимости синхронизации состояния.

1. <code>Stateful Services</code> <strong>(Сервис с состоянием)&#58;</strong>

    - <strong>Описание&#58;</strong> Сервисы, которые сохраняют состояние внутри Service Fabric.

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

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

1. <code>Reliable Actors</code> <strong>(Надежные акторы)&#58;</strong>

    - <strong>Описание&#58;</strong> Модель программирования на основе акторов, где каждый актор является экземпляром класса с состоянием и поведением.

    - <strong>Примеры использования&#58;</strong> Игровые объекты, IoT устройства, личные профили пользователей.

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

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

1. [Общие сведения о терминологии Service Fabric](https://learn.microsoft.com/ru-ru/azure/service-fabric/service-fabric-technical-overview)
   :::

---

## <strong>Какие особенности и ограничения</strong> <code>Azure Table Storage</code><strong>?</strong> [#q-14bee738d69b8195804cc35f160d2d65]

<code>Azure Table Storage</code>&#58;

<strong>Особенности&#58;</strong>

{/* prettier-ignore */}
1. <strong>NoSQL хранилище&#58;</strong>

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

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

    - Поддержка больших объемов данных с горизонтальным масштабированием.

1. <strong>Доступ по ключам&#58;</strong>

    - Быстрый доступ к данным с использованием PartitionKey и RowKey.

1. <strong>Доступ через REST API&#58;</strong>

    - Доступ к данным через HTTP REST API.

1. <strong>Низкая стоимость&#58;</strong>

    - Экономически эффективное хранилище для больших объемов данных.

1. <strong>Интеграция с другими Azure сервисами&#58;</strong>

    - Легкая интеграция с другими сервисами Azure.

#### Ограничения&#58;

{/* prettier-ignore */}
1. <strong>Ограниченная функциональность запросов&#58;</strong>

    - Поддерживаются только простые запросы, отсутствие сложных операций фильтрации и агрегирования.

1. <strong>Ограниченный размер сущностей&#58;</strong>

    - Максимальный размер одной сущности – 1 МБ.

1. <strong>Ограничения на транзакции&#58;</strong>

    - Транзакции возможны только в пределах одной партиции (PartitionKey).

1. <strong>Ограниченная производительность при высоких нагрузках&#58;</strong>

    - Производительность может уменьшаться при интенсивном использовании.

<code>Azure Table Storage</code> – это высокомасштабируемое, экономичное NoSQL
хранилище данных, подходящее для хранения больших объемов структурированных
данных с быстрым доступом по ключам. Однако, оно имеет ограничения в
функциональности запросов, размере сущностей и транзакциях, что делает его не
всегда подходящим для сложных сценариев обработки данных.

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

1. [Общие сведения о хранении таблиц](https://learn.microsoft.com/ru-ru/azure/storage/tables/table-storage-overview)
   :::

---

## <strong>Как бороться с проблемой холодного старта в</strong> <code>Azure Functions</code><strong>?</strong> [#q-14bee738d69b817b89c8c6fd7395e753]

Холодный старт происходит, когда функция активируется после периода бездействия, вызывая задержки из-за инициализации среды выполнения.

#### Способы борьбы с холодным стартом&#58;

{/* prettier-ignore */}
1. <strong>Использование</strong> <code>Premium Plan</code> <strong>или</strong> <code>Dedicated</code> <strong>(App Service) Plan&#58;</strong>

    - Описание&#58; Premium позволяет держать готовые экземпляры, а Dedicated требует настройки Always On. Это снижает задержки холодного старта; запуск новых экземпляров и инициализацию приложения все равно нужно учитывать.

    - <strong>Преимущества&#58;</strong> Быстрый запуск, выделенные ресурсы.

    - <strong>Недостатки&#58;</strong> Более высокая стоимость.

1. <code>Pre&#45;Warmed Instances</code> <strong>(Тёплые инстансы)&#58;</strong>

    - <strong>Описание&#58;</strong> Premium Plan позволяет настраивать преднагрев инстансов, чтобы всегда иметь готовые к работе функции.

    - <strong>Преимущества&#58;</strong> Снижение задержек при запуске.

    - <strong>Недостатки&#58;</strong> Зависит от плана Premium.

1. <code>Always On</code> <strong>в</strong> <code>App Service Plan</code><strong>&#58;</strong>

    - <strong>Описание&#58;</strong> Для функций, размещенных в App Service Plan, включение опции Always On предотвращает усыпление приложения.

    - <strong>Преимущества&#58;</strong> Постоянная готовность.

    - <strong>Недостатки&#58;</strong> Увеличение затрат.

1. <strong>Регулярные вызовы (</strong><code>Keep&#45;Alive</code><strong>)&#58;</strong>

    - <strong>Описание&#58;</strong> Настройка периодических вызовов функции для поддержания активности.

    - <strong>Преимущества&#58;</strong> Уменьшение частоты холодных стартов.

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

1. <strong>Разделение функций&#58;</strong>

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

    - <strong>Преимущества&#58;</strong> Оптимизация производительности для ключевых функций.

    - <strong>Недостатки&#58;</strong> Усложнение архитектуры.

Для борьбы с проблемой холодного старта в Azure Functions можно использовать более дорогие планы (Premium или Dedicated), настроить преднагрев инстансов, включить Always On в App Service Plan, использовать keep-alive запросы или разделить функции на тяжеловесные и легковесные. Выбор подходящего метода зависит от требований к производительности и бюджета.

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

1. [Проблема холодного старта в Azure Functions](https://stackoverflow.com/questions/78227199/cannot-prevent-azure-function-python-cold-starts)
   :::

---

## <strong>В чем отличие очередей и топиков в</strong> <code>Azure Service Bus</code><strong>?</strong> [#q-14bee738d69b81eaaf88e95b60932714]

<strong>Очереди и топики в</strong> <code>Azure Service Bus</code>
<strong>&#58;</strong>

#### Очереди (<code>Queues</code>)&#58;

<strong>Описание&#58;</strong>

- <strong>Модель "точка-точка"</strong>&#58; Сообщения передаются от отправителя
  к одному получателю.

- Порядок&#58; для упорядоченной обработки связанных сообщений используйте sessions с общим SessionId. Обычная очередь с конкурирующими получателями не гарантирует порядок завершения обработки.

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

<strong>Применение&#58;</strong>

- Сценарии, где требуется гарантированная обработка сообщений одним потребителем.

- Примеры&#58; обработка заказов, задачи очереди.

#### Топики (<code>Topics</code>)&#58;

<strong>Описание&#58;</strong>

- <strong>Модель "публикация-подписка"</strong>&#58; Сообщения передаются от
  отправителя к нескольким подписчикам.

- <strong>Фильтрация и подписки</strong>&#58; Подписчики могут получать только
  интересующие их сообщения с помощью правил фильтрации.

- <strong>Много получателей</strong>&#58; Каждое сообщение может быть получено и
  обработано несколькими подписчиками.

<strong>Применение&#58;</strong>

- Сценарии, где одно сообщение должно быть доставлено нескольким потребителям.

- Примеры&#58; уведомления, рассылка событий.

#### Итог&#58;

- Очереди распределяют сообщения между конкурирующими получателями. Возможны повторные доставки; для FIFO по группе сообщений используются sessions.

- <strong>Топики</strong>&#58; Используются для передачи сообщений от одного
  отправителя к нескольким получателям, поддерживая модель "публикация-подписка"
  с возможностью фильтрации сообщений для подписчиков.

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

1. [Azure Service Bus messaging](https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-queues-topics-subscriptions)
   :::
