<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Serverless | The .NET Blog</title><link>https://thedotnetblog.com/ru/tags/serverless/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>ru</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Thu, 21 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/ru/tags/serverless/index.xml" rel="self" type="application/rss+xml"/><item><title>Перестаньте Атаковать Проблемную Зависимость: Паттерны Повторных Попыток для Azure Functions + Service Bus</title><link>https://thedotnetblog.com/ru/news/emiliano-montesdeoca/azure-functions-service-bus-exponential-backoff-circuit-breaker/</link><pubDate>Thu, 21 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ru/news/emiliano-montesdeoca/azure-functions-service-bus-exponential-backoff-circuit-breaker/</guid><description>Экспоненциальная задержка и паттерны автоматического выключателя теперь поддерживаются нативно для Azure Functions, запускаемых Service Bus — вот как они работают и почему вам нужны оба.</description><content:encoded>&lt;p&gt;Вот как восстанавливаемая ошибка превращается в отказ в приложении Functions: зависимость начинает давать таймаут, каждый экземпляр Functions немедленно и бесконечно повторяет попытки, зависимость получает сотни одновременных неудавшихся запросов, и то, что началось как временный сбой, превращается в событие противодавления во всей системе.&lt;/p&gt;
&lt;p&gt;Вы, вероятно, знаете эту историю. Azure Functions масштабируется быстро — в этом весь смысл. Но &amp;ldquo;быстро масштабировать&amp;rdquo; и &amp;ldquo;немедленно повторять&amp;rdquo; вместе могут драматически ухудшить сбои.&lt;/p&gt;
&lt;p&gt;Два паттерна помогают. Экспоненциальная задержка и автоматический выключатель. Оба теперь нативно поддерживаются для Azure Functions, запускаемых Service Bus.&lt;/p&gt;
&lt;h2 id="два-паттерна-разные-роли"&gt;Два Паттерна, Разные Роли&lt;/h2&gt;
&lt;p&gt;Эти паттерны дополняют друг друга, а не являются альтернативами:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Экспоненциальная задержка&lt;/strong&gt; отвечает на вопрос: &lt;em&gt;когда мне следует повторить попытку?&lt;/em&gt;
Она увеличивает задержку между попытками, чтобы зависимость имела время восстановиться. На уровне сообщений, регулируя тайминг повторных попыток.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Автоматический выключатель&lt;/strong&gt; отвечает на вопрос: &lt;em&gt;следует ли мне вообще обращаться к этой зависимости прямо сейчас?&lt;/em&gt;
Он останавливает повторные вызовы к нездоровой зависимости после достижения порогового значения ошибок, а затем осторожно проверяет после периода охлаждения. На системном уровне, предотвращая шторм повторных попыток.&lt;/p&gt;
&lt;p&gt;Вам нужны оба. Задержка управляет темпом повторных попыток на уровне сообщений. Автоматический выключатель управляет агрегированными решениями о работоспособности.&lt;/p&gt;
&lt;h2 id="почему-это-особенно-важно-для-service-bus"&gt;Почему Это Особенно Важно для Service Bus&lt;/h2&gt;
&lt;p&gt;Очередь поглощает пиковый трафик, что хорошо. Но без контролей очередь может расти, пока воркеры продолжают тратить вычислительные ресурсы на вызовы, которые завершатся неудачей. Ядовитые сообщения остаются активными дольше, чем должны. Горячие партиции или ограниченная пропускная способность нижестоящей системы создают каскадные проблемы.&lt;/p&gt;
&lt;p&gt;Более безопасный дизайн:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Обнаружить временный сбой&lt;/li&gt;
&lt;li&gt;Задержать следующую попытку с экспоненциальной задержкой&lt;/li&gt;
&lt;li&gt;Остановить вызовы к зависимости при достижении порогового значения ошибок (цепь разомкнута)&lt;/li&gt;
&lt;li&gt;Осторожно возобновить после периода охлаждения (зондирование цепи)&lt;/li&gt;
&lt;li&gt;Переместить невосстанавливаемую работу в dead-letter или путь карантина&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="как-выглядит-нативная-поддержка"&gt;Как Выглядит Нативная Поддержка&lt;/h2&gt;
&lt;p&gt;Новая поддержка интегрируется с существующей моделью хоста Azure Functions — без дополнительных библиотек, без пользовательских реализаций. Конфигурация помещается в ваш &lt;code&gt;host.json&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;extensions&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;serviceBus&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;messageHandlerOptions&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;maxRetryCount&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;retryPolicy&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mode&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;exponentialBackoff&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;minBackoff&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;00:00:02&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;maxBackoff&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;00:05:00&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;maxRetryCount&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Конфигурация автоматического выключателя устанавливает порог ошибок и интервал сброса, чтобы нездоровые зависимости не атаковались во время восстановления.&lt;/p&gt;
&lt;h2 id="поддерживаемые-языки"&gt;Поддерживаемые Языки&lt;/h2&gt;
&lt;p&gt;Это не только для .NET. Функция охватывает dotnet, JavaScript, TypeScript и Python — полный набор языков, поддерживаемых триггером Service Bus в Azure Functions.&lt;/p&gt;
&lt;h2 id="заключение"&gt;Заключение&lt;/h2&gt;
&lt;p&gt;Паттерны повторных попыток не интересно настраивать до первого раза, когда сбой в нижестоящей системе заставляет ваши Functions усугублять проблему вместо плавного ухудшения. Настраивать их проактивно недорого. Реализовывать их во время инцидента — нет.&lt;/p&gt;
&lt;p&gt;Оригинальная статья: &lt;a href="https://devblogs.microsoft.com/azure-sdk/exponential-backoff-circuit-breaker-azure-functions/"&gt;Exponential backoff and circuit breaker for Service Bus-triggered Azure Functions&lt;/a&gt;&lt;/p&gt;</content:encoded></item></channel></rss>