Рубрики
Uncategorized

Обработка сбоев в потоковых работах

Следующая статья — это за исключением моей предстоящей книги Grokking Streaming Systems от Manning … Помечено Eventvinivin, Pubsub, DistribedSystems, Devops.

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

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

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

Новая концепция: блэкпресс

Когда использование мощностей достигает 100%, все становится интереснее. Давайте погрузимся в него, используя работу детектирования мошенничества в качестве примера.

Когда экземпляр становится занятым и не может догнать входящий трафик, его входящая очередь собирается расти и ускорена памяти в конце концов. Этот вопрос будет пропорционален другим компонентам, и вся система будет прекратить работу. Backpruce — это механизм защиты системы от аварии. Блэкспреры, по определению, является давлением, которое противоположно направленному направлению текущих данных: от экземпляров ниже по потоку в возрасте. Это происходит, когда экземпляр не может обрабатывать события со скоростью входящего трафика или другими словами, когда использование мощностей достигает 100%. Цель обратного давления состоит в том, чтобы замедлить входящий трафик, когда трафик больше, чем система может обрабатывать.

Измерьте использование мощностей

Блэкспрерудование должно вызывать, когда использование мощностей достигает 100%, но утилизация емкости и мощности не так просто измерять или оценивать. Существует множество факторов, которые решают ограничение того, сколько событий может обрабатывать экземпляр, такой как ресурс, аппаратное обеспечение и данные. Использование процессора и памяти полезно, но не надежно отражать емкость. Нам нужен лучший способ, и к счастью, есть один. Мы узнали, что бегущая система потоковой передачи состоит из процессов и очередей событий, соединяющих их. Очески событий несут ответственность за передачу событий между экземплярами, такими как конвейерные ремни между работниками в сборке. Когда использование потенциала экземпляра достигает 100%, скорость обработки не может догнать входящий трафик. В результате количество событий в входящей очереди экземпляра начинает накапливаться. Следовательно, длина входящей очереди для экземпляра может использоваться для обнаружения того, достиг ли экземпляров его емкости или нет. Обычно длина количества очереди должна идти вверх и вниз в пределах относительного стабильного диапазона. Если он продолжает расти, очень вероятно, что экземпляр был слишком занят, чтобы справиться с трафиком.

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

Блэкпресс в потоке двигатель

Давайте сначала начнем с нашего собственного потока двигателя, так как он будет более простым. Как локальная система, двигатель потока не имеет сложной логики для бэкпресса. Тем не менее, информация может быть полезной для нас, чтобы учиться обратно в реальных рамках дальше. В потоке двигателя блокируют очереди (очереди, которые могут приостановить резьбы, которые пытаются добавить больше событий, когда очередь заполнена или предпринимать элементы, когда очередь пуста) Используются для подключения процессов. Длина очередей не ограничена. Существует максимальная емкость для каждой очереди, а емкость является ключом к заднику. Когда экземпляр не может перерабатывать события достаточно быстро, потребляющая скорость очереди перед ним была бы ниже, чем скорость вставки. Очередь начнет расти и стать «полным» в конце концов. После этого вставка будет заблокирована до тех пор, пока событие не потребляется экземпляром Downstream. В результате скорость вставки будет замедлена к тому же, что и скорость обработки событий экземпляра Downstream.

Блэкпресс в потоке двигатель: распространение

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

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

Наша потоковая работа во время бэкпресса

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

Блэкпресс в распределенных системах

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

  • Обнаружение занятых экземпляров
  • Обратное давление

Обнаружение занятых экземпляров

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

  • Количество событий в очереди
  • Размер памяти событий в очереди

Когда количество событий или размер памяти достигает порогового значения, вероятно, имеет некоторую проблему с подключенным экземпляром. Двигатель объявляет состояние бэкпресса.

Состояние бэкпресса

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

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

Блэкспреры: останавливая источники

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

Блэкпресс: Остановка восходящих компонентов

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

Облегчение бэкпрессы

После того, как задание находится в состоянии бэкпреспруска на некоторое время, и настойчивый экземпляр (надеюсь), следующий важный вопрос: каков конец состояния бэкпресса, так что трафик может быть возобновлен? Решение не должно быть неожиданностью, так как он очень похож на шаг обнаружения: мониторинг размера очередей. Напротив обнаружения, в котором мы проверяем, является ли очередь «слишком полной», на этот раз мы проверяем, достаточно ли в очередь «достаточно пуста», что означает, что количество событий в нем уменьшилось под низким порогом, что означает его Достаточно места для новых событий сейчас. Обратите внимание, что облегчение не означает, что медленный экземпляр восстановлен. Вместо этого это просто означает, что в очереди есть комната для большего количества событий.

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

Вы можете прочитать остальную часть этого материала в книге Гроккинг потоковых систем Отказ Вы можете найти это здесь: https://www.manning.com/books/grokking-streaming-systems. .

Оригинал: «https://dev.to/joshfischer1108/streamlining-streaming-jobs-45h5»