1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dromara-dynamic-tp

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 21 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 02:04 b91c0bf

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

logo

**Лёгкий динамический пул потоков на основе конфигурации центра**

备注加群

Официальный сайт: https://dynamictp.cn 🔥

---

Проблемы

При использовании пула потоков ThreadPoolExecutor возникают ли у вас следующие проблемы?

  1. В коде создан пул потоков ThreadPoolExecutor, но неизвестно, какие значения параметров ядра являются подходящими.
  2. На основе опыта установлены значения параметров, после запуска обнаружены проблемы, требуется настройка, изменение кода и повторное развёртывание сервиса, что вызывает неудобства.
  3. Пул потоков является «чёрным ящиком» для разработчиков, невозможно своевременно получить информацию о его работе, пока не возникнут проблемы.

Если у вас есть эти проблемы, то динамический пул потоков с мониторингом (DynamicTp) может помочь вам.

После ознакомления с исходным кодом ThreadPoolExecutor можно понять, что он предоставляет методы set / get для большинства основных параметров и некоторые расширенные методы, которые позволяют динамически изменять и получать соответствующие значения во время выполнения. Эти методы включают:

public void setCorePoolSize(int corePoolSize);
public void setMaximumPoolSize(int maximumPoolSize);
public void setKeepAliveTime(long time, TimeUnit unit);
public void setThreadFactory(ThreadFactory threadFactory);
public void setRejectedExecutionHandler(RejectedExecutionHandler handler);
public void allowCoreThreadTimeOut(boolean value);

public int getCorePoolSize();
public int getMaximumPoolSize();
public long getKeepAliveTime(TimeUnit unit);
public BlockingQueue<Runnable> getQueue();
public RejectedExecutionHandler getRejectedExecutionHandler();
public boolean allowsCoreThreadTimeOut();

protected void beforeExecute(Thread t, Runnable r);
protected void afterExecute(Runnable r, Throwable t);

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

Можно ли объединить центры конфигурации для динамической настройки параметров пула потоков во время работы?

Ответ положительный, и центры конфигурации обычно обладают высокой доступностью. Их использование также не требует чрезмерного беспокойства о проблемах с отказом конфигурации, а также может снизить сложность разработки динамических компонентов пула потоков и объём работ по интеграции.

Подводя итог, можно выделить следующие аспекты:

  • Универсальность: в разработке на Java, чтобы повысить производительность системы, пулы потоков являются основным инструментом, который выбирают более 90 % разработчиков.

  • Неопределённость: в проекте может существовать множество пулов потоков, включая пулы с интенсивным использованием ввода-вывода и пулы с интенсивным использованием процессора, но параметры ядра пула трудно определить, и необходимо иметь механизм для их динамической настройки во время работы.

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

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


Функции

На основании вышеизложенного анализа мы разработали несколько расширений для пула потоков ThreadPoolExecutor. Основные цели включают:

  1. Динамическое изменение параметров работающего пула потоков и немедленное применение изменений.
  2. Мониторинг состояния работающего пула потоков в реальном времени и запуск настроенных стратегий оповещения при возникновении проблем.
  3. Сбор показателей пула потоков через определённые промежутки времени для интеграции с платформами визуализации, такими как Grafana.
  4. Интеграция с управлением внутренними пулами потоков популярных промежуточных программ.

После нескольких версий итераций текущая версия v1.1.9.1 имеет следующие функции

  • Без вмешательства в код: мы изменили способ использования пула потоков, все конфигурации хранятся в центрах конфигурации. При запуске службы конфигурация извлекается из центра конфигурации и помещается в контейнер Spring. Во время использования она напрямую извлекается из контейнера Spring. Это не влияет на бизнес-код.

  • Лёгкость и простота: использование очень простое, достаточно ввести соответствующие зависимости, и интеграция может быть завершена всего за 3 минуты после 4 простых шагов.

  • Уведомление и оповещение: предоставляются различные типы уведомлений и оповещений (уведомления об изменениях конфигурации, активные оповещения, оповещения о предельных значениях очереди, оповещения об отклонении выполнения, оповещения о выполнении задач или ожидании тайм-аута), и настроенные пороговые значения могут немедленно отправлять оповещения. Поддерживаются такие платформы, как WeChat, DingTalk, Feishu, электронная почта, Yunzhijia, а также предоставляется интерфейс SPI для пользовательских расширений.

  • Мониторинг работы: показатели пула потоков собираются через определённые интервалы (более 20 показателей, включая показатели пула потоков, показатели очередей, показатели задач, TPS, TPXX и т. д.). Данные можно получить через MicroMeter, JsonLog и JMX тремя способами или через конечную точку SpringBoot Endpoint для получения последних данных показателей. Интерфейс SPI также предоставляется для пользовательских расширений.

  • Расширенные задачи: предоставляется функция упаковки задач (более мощная, чем Spring Task), просто реализуйте интерфейс TaskWrapper. Такие как MdcTaskWrapper, TtlTaskWrapper, SwTraceTaskWrapper, OpenTelemetryWrapper, могут поддерживать передачу контекста пула потоков.

  • Поддержка различных центров конфигурации: поддерживаются основные центры конфигурации, такие как Nacos, Apollo, Zookeeper, Consul, Etcd, Polaris, ServiceComb, а интерфейс SPI также предоставляется для пользовательских расширений.

  • Управление пулом потоков промежуточных программ: интегрировано управление пулом потоков популярных компонентов, таких как Tomcat, Jetty, Undertow, Dubbo, RocketMq, Hystrix, Grpc, Motan, Okhttp3, Brpc, Tars, SofaRpc, RabbitMq, Liteflow (динамическая настройка параметров, мониторинг, оповещение).

  • Различные режимы: предоставляется расширенный пул потоков DtpExecutor, пул потоков EagerDtpExecutor для сценариев с интенсивным вводом-выводом, пул диспетчеризации ScheduledDtpExecutor, упорядоченный пул OrderedDtpExecutor. Можно выбрать подходящий пул потоков в соответствии с бизнес-сценарием.

  • Совместимость: JUC обычный пул потоков и Spring ThreadPoolTaskExecutor также могут управляться фреймворком. Просто определите @Bean и добавьте аннотацию @DynamicTp при определении.

  • Надёжность: полагаясь на жизненный цикл Spring, можно изящно закрыть пул потоков перед закрытием Spring контейнера, максимально обрабатывая задачи в очереди.

  • Масштабируемость: ключевые функции фреймворка предоставляют SPI. Интерфейс для пользовательской настройки (конфигурационный центр, анализ конфигурационных файлов, уведомления и оповещения, сбор данных мониторинга, упаковка задач, стратегия отказа и т. д.)

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


Архитектура

Функции фреймворка можно разделить на несколько основных модулей:

  1. Модуль отслеживания изменений конфигурации.
  2. Модуль управления пулом потоков.
  3. Модуль мониторинга.
  4. Модуль уведомлений и оповещений.
  5. Модуль управления пулами потоков сторонних компонентов.

Техническая архитектура

Более подробную информацию можно найти в документации на официальном сайте: архитектура.


Этапы подключения

  1. Внедрить зависимости соответствующего конфигурационного центра, подробности см. в документации на официальном сайте.
  2. Настроить экземпляры пулов потоков в конфигурационном центре, конфигурацию см. в документации на официальном сайте.
  3. Добавить аннотацию @EnableDynamicTp к классу запуска.
  4. Использовать @Resource или @Autowired для внедрения зависимостей или получить доступ через DtpRegistry.getExecutor("name").
  5. После выполнения этих четырёх шагов вы можете начать использовать фреймворк. Разве это не кажется очень простым?

Для более подробного примера использования обратитесь к проекту example и документации на официальном сайте.


Уведомления и оповещения

  • При достижении пороговых значений срабатывания оповещений будут отправляться соответствующие сообщения об оповещениях (активность, ёмкость, отказ, ожидание задачи, выполнение задачи), а также будет выделяться соответствующая область.
Оповещение
  • Изменения конфигурации будут сопровождаться сообщениями о них, а изменённые поля будут выделены.
Уведомление об изменении

Дополнительные сведения см. в документации на официальном сайте.


Мониторинг

В настоящее время фреймворк предоставляет четыре способа сбора данных мониторинга. Тип сбора данных мониторинга настраивается с помощью свойства collectorTypes. По умолчанию используется Micrometer.

  1. Logging: данные о состоянии пула потоков будут выводиться в формате JSON в указанный файл журнала.
  2. Internal_logging: данные о состоянии пула потоков будут выводиться в формате JSON в файл журнала проекта.
  3. Micrometer: используется интерфейс мониторинга, данные собираются и сохраняются на соответствующей платформе хранения (например, Prometheus, InfluxDb и т.д.).
  4. Endpoint: предоставляется конечная точка, через которую можно получить данные мониторинга в режиме реального времени через HTTP.

Дополнительную информацию см. в документации на официальном сайте.


Star History

Star History Chart


Кодирование и управление версиями


Свяжитесь со мной

После прочтения этого раздела, пожалуйста, поставьте проекту звезду. Ваша поддержка — это наша движущая сила!

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

Группа WeChat заполнена до 200 человек, вы можете следить за общедоступной учётной записью WeChat и добавлять меня в личные сообщения (примечание: dynamic-tp).

Чтобы проект развивался лучше, зарегистрируйтесь здесь, регистрация использования.


Ссылки

  • HertzBeat: простая в использовании система мониторинга и оповещения в реальном времени, без агентов, мощные настраиваемые функции мониторинга.

Специальная благодарность

JNPF Low Code Development Platform


Благодарность

Спасибо JetBrains за поддержку открытых проектов.

JetBrains

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/dromara-dynamic-tp.git
git@api.gitlife.ru:oschina-mirror/dromara-dynamic-tp.git
oschina-mirror
dromara-dynamic-tp
dromara-dynamic-tp
master