Ограничение тока, плавление, понижение версии, предварительный нагрев и противодавление при высоком уровне параллелизма!

Java Микросервисы Архитектура

Оригинал: Miss Sister Taste (идентификатор публичной учетной записи WeChat: xjjdog), добро пожаловать, пожалуйста, сохраните источник для перепечатки.

Прежде всего, нам нужно прояснить сценарии, в которых появляются эти термины:高并发окружающая обстановка. Если ваш продукт плохо продается и его никто не ищет, то ему не нужны эти атрибуты. Системы с низким параллелизмом хорошо работают без каких-либо бонусов.

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

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

1. Ограничение тока

«Мои посты заблокированы!» Даже если вы не интернет-практик, можете сказать это с уверенностью. Когда он говорит это, он не имеет в виду текущее регулирование при высокой степени параллелизма, а только в логическом смысле.

В веб-разработке tomcat по умолчанию использует пулы потоков 200. Когда поступает больше запросов и ни один новый поток не может обработать запрос, запрос всегда будет ожидать на стороне браузера. Проявление заключается в том, что браузер продолжает ходить по кругу (не превысил acceptCount), даже если вы запрашиваете простой Hello world.

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

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

Например, некий сервис предоставляет услуги для A, B и C, но в соответствии с заранее примененной оценкой трафика количество запросов для сервиса A ограничено 1000 в секунду, для сервиса B — 2000 в секунду, а для сервиса C — 1w. /второй. В то же время некоторые клиенты могут отклонять запросы, а некоторые клиенты могут работать нормально Текущее ограничение рассматривается как способность самозащиты сервера.

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

«Текущий предел высокого параллелизма, какой, черт возьми, предел?»

«Текущий лимит семафора, секрет, который должны рассказать сценарии с высокой степенью параллелизма»

2. Фьюзинг

Вообще говоря, император хочет жить комфортной ночной жизнью в микросервисах, и он может сразу перейти к делу, не теряя своей страны из-за личных дел, поэтому ему приходится полагаться на熔断大总管. Роль предохранителя в основном заключается в том, чтобы избежать обслуживания雪崩.

Как показано на рисунке, A→B→C вызывают друг друга по очереди, но в проекте C, скорее всего, возникнут проблемы (слишком большой трафик или ошибка и т. д.), из-за чего поток будет все время ждать, вызывая весь слой ссылок будет перетаскиваться вниз, а ресурсы потока будут исчерпаны.

image.png

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

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

«Медленно закрывайте и медленно поворачивайте, микросервисы плавят большого менеджера»

3. Понизить рейтинг

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

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

Где лучше сделать даунгрейд? это вход. Такие как Nginx, такие как DNS и т.д.

В некоторых интернет-приложениях будет существовать концепция MVP (Minimum Viable Product), что означает минимально жизнеспособный продукт, и требования к SLA для него очень высоки. Вокруг минимально жизнеспособного продукта будет серия операций разделения сервиса и, конечно, в некоторых случаях даже переписывание.

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

4. Разминка

Пожалуйста, обратите внимание на следующую ситуацию.

БД в среде с высокой степенью параллелизма перезапускается после остановки процесса. Из-за пикового периода бизнеса перераспределяется стратегия балансировки нагрузки восходящего потока. Только что запущенная БД получала 1/3 трафика в одно мгновение, а потом нагрузка взлетела до полного отсутствия ответа.

Причина: недавно запущенная БД, различные кэши не готовы, а состояние системы совсем не похоже на нормальную работу. Может быть, 1/10 от обычного количества может привести к смерти.

Точно так же для только что запущенного процесса JVM, поскольку байт-код не оптимизирован JIT-компилятором, время отклика всех интерфейсов относительно медленное, когда он только что запущен. Если компонент балансировки нагрузки вызывается без учета только что запущенной ситуации, а трафик 1/n обычно направляется на этот узел, могут возникнуть проблемы.

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

«Предварительного нагрева нет, это не называется высоким параллелизмом, это называется высоким параллелизмом»

5. Противодавление

Рассмотрим следующие два сценария:

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

Как динамически изменять значение текущего лимита? Для этого нужен механизм. Вызывающий должен знать возможности обработки вызываемого, то есть вызываемый должен иметь возможность обеспечить обратную связь. Противодавление, англ. Back Pressure, на самом деле является интеллектуальным ограничением тока, которое относится к стратегии.

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

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

Обратное давление делает систему более стабильной, повышает коэффициент использования, сам по себе обладает более высокой эластичностью и интеллектом.

Суммировать

Кратко резюмируя:

  • 限流Укажите верхний предел, когда трафик превышает пропускную способность системы, он будет напрямую запрещать обслуживание
  • 熔断Нет системной лавины, вызванной сбоем базового приложения обхода. Если вы хотите попрактиковаться в этом навыке, вы должны сначала пойти во дворец
  • 降级Из записи запроса исключить перегруженные запросы в широком диапазоне
  • 预热Дайте системе время на прогрев при запуске, загрузите кеш и избегайте взаимоблокировок ресурсов.
  • 背压Вызываемый объект возвращает свои возможности вызывающему объекту. Нежный звонок, требующий прочного общения

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

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

Об авторе: Miss Sister Taste (xjjdog), общедоступный аккаунт, который не позволяет программистам идти в обход. Сосредоточьтесь на инфраструктуре и Linux. Десять лет архитектуры, десятки миллиардов ежедневного трафика, обсуждение с вами мира высокой параллелизма, дающие вам другой вкус. Мой личный WeChat xjjdog0, добро пожаловать в друзья для дальнейшего общения.