На основе конфигурации центра лёгкий динамический пул потоков, со встроенной функцией мониторинга и оповещения, интегрированный с управлением пула потоков распространённых промежуточных программ, может быть настроен через SPI для расширения.
**Лёгкий динамический пул потоков на основе конфигурации центра**
Официальный сайт: https://dynamictp.cn 🔥
---При использовании пула потоков ThreadPoolExecutor возникают ли у вас следующие проблемы?
Если у вас есть эти проблемы, то динамический пул потоков с мониторингом (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. Основные цели включают:
После нескольких версий итераций текущая версия 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 уже есть зрелый опыт применения этой теории.
Функции фреймворка можно разделить на несколько основных модулей:
Более подробную информацию можно найти в документации на официальном сайте: архитектура.
Для более подробного примера использования обратитесь к проекту example и документации на официальном сайте.
Дополнительные сведения см. в документации на официальном сайте.
В настоящее время фреймворк предоставляет четыре способа сбора данных мониторинга. Тип сбора данных мониторинга настраивается с помощью свойства collectorTypes. По умолчанию используется Micrometer.
Дополнительную информацию см. в документации на официальном сайте.
После прочтения этого раздела, пожалуйста, поставьте проекту звезду. Ваша поддержка — это наша движущая сила!
Если у вас возникнут какие-либо проблемы во время использования или у вас есть идеи или предложения относительно проекта, вы можете присоединиться к сообществу и обсудить их с более чем 1500 участниками.
Группа WeChat заполнена до 200 человек, вы можете следить за общедоступной учётной записью WeChat и добавлять меня в личные сообщения (примечание: dynamic-tp).
Чтобы проект развивался лучше, зарегистрируйтесь здесь, регистрация использования.
JNPF Low Code Development Platform
Спасибо JetBrains за поддержку открытых проектов.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )