Зачем писать этот проект?
Всем привет, меня зовут Лунтай.
Статья о пуле потоков MeituanВо введении из-за того, что бизнес неправильно настроил параметры пула потоков, произошло несколько производственных аварий, что привело к ряду мыслей. Наконец, решил инкапсулировать динамическую настройку параметров пула потоков, расширить мониторинг пула потоков, оповещение о сообщениях и другие функции.
Я нашел много проектов с динамическим пулом потоков на платформе с открытым исходным кодом, но с точки зрения функциональности и надежности я лично считаю, что они не удовлетворяют приложения корпоративного уровня.
Поскольку меня больше интересуют динамические пулы потоков и я хочу написать осмысленный проект, я решил сам создать легкое колесо.
Я хотел дать проекту простое и легко запоминающееся имя, похожее на Eureka, Nacos, Redis, после обсуждения с друзьями решил назвать его в честь животного:Бегемот (Бегемот)
Бегемот на гитхабе:GitHub.com/Городской чат/Надеюсь, вы…
Я чувствую себя полезным, пожалуйста, нажмите звездочку за усердную работу, спасибо
Какую проблему он решает?
Пулы потоков следует использовать в бизнес-системах, чтобы помочь бизнес-процессам повысить эффективность и управлять потоками.Большинство сценариев применяются к большому количеству асинхронной обработки задач.
Хотя пул потоков предоставляет нам много удобств, он не идеален, например, следующие проблемы не могут быть решены хорошо
Если конфигурация пула потоков связана с вышеперечисленными проблемами, может потребоваться релиз бизнес-системы для ее решения; если после релиза параметры по-прежнему неразумны, продолжайте релиз...
Hippo очень хорошо решает эту проблему, он управляет всеми пулами потоков в бизнесе единым образом, при возникновении вышеперечисленных проблем параметры пула потоков могут быть заменены без перезагрузки системы.
Какие особенности у него есть?
Пулами потоков в прикладных системах управлять непросто. Ссылаясь на дизайн Meituan, Hippo разделен в соответствии с размерами арендаторов, проектов и пулов потоков. В сочетании с системными разрешениями, пусть разные разработчики и менеджеры несут ответственность за операции пула потоков в своих собственных системах.
Например, Xiaobian входит в группу общедоступных компонентов компании, и эта команда отвечает за такие проекты, как обмен сообщениями и шлюзы коротких ссылок. Общие компоненты — арендаторы, сообщения или короткие ссылки — элементы
модуль | имя модуля | Примечания |
---|---|---|
dynamic-threadpool-common | общедоступный модуль | - |
dynamic-threadpool-config | Центр конфигурации | Обеспечивает функцию обновления пула потоков в квазиреальном времени. |
dynamic-threadpool-console | консоль | Стыковка с front-end проектами |
dynamic-threadpool-discovery | Регистрационный центр | Предоставляет такие функции, как регистрация экземпляра проекта пула потоков, обновление и автономный режим. |
dynamic-threadpool-spring-boot-starter | SpringBoot Starter | - |
dynamic-threadpool-example | пример проекта | - |
dynamic-threadpool-server | Сервер | Компоненты интеграции с сервером |
dynamic-threadpool-tools | абстрактный класс инструментов | Swagger, журнал операций и другие компоненты |
В дополнение к динамическому изменению пула потоков, Hippo также включает в себя просмотр в режиме реального времени показателей времени выполнения пула потоков, оповещения о нагрузке и управление журналом конфигурации. Конкретные функции заключаются в следующем
Как запустить демо?
В настоящее время функция динамического пула потоков завершена, и код можно напрямую использовать для локального запуска. База данных в проекте построена автором ECS Docker, вы можете использовать ее напрямую
- запускать
dynamic-threadpool-server
Класс приложения ServerApplication под модулем - запускать
dynamic-threadpool-example
Класс приложения ExampleApplication под модулем
Измените конфигурацию в пуле потоков через интерфейс. HTTP POST-путь:http://localhost:6691/v1/cs/configs, тело запроса Body выглядит следующим образом:
{
"ignore": "tenantId、itemId、tpId 代表唯一线程池,请不要修改",
"tenantId": "prescription",
"itemId": "dynamic-threadpool-example",
"tpId": "message-produce",
"coreSize": 10,
"maxSize": 15,
"queueType": 9,
"capacity": 100,
"keepAliveTime": 10,
"rejectedType": 7,
"isAlarm": 0,
"capacityAlarm": 81,
"livenessAlarm": 82
}
После успешного вызова интерфейса наблюдайте за выводом журнала консоли dynamic-threadpool-example.Если вывод журнала включает, но не ограничивается этой информацией, это успех.
[🔥 MESSAGE-PRODUCE] Changed thread pool. coreSize :: [11=>10], maxSize :: [15=>15], queueType :: [9=>9]
capacity :: [100=>100], keepAliveTime :: [10000=>10000], rejectedType :: [7=>7]
На данном этапе функция отправки сообщений Dingding была интегрирована, и она будет по-прежнему получать доступ к таким каналам уведомлений, как корпоративный WeChat, электронная почта, Feishu и SMS. Вы можете испытать отправку сообщений, добавив группу DingTalk, номер группы: 31764717.
Изменения конфигурации | Уведомление о тревоге |
---|
Функция кода проекта все еще находится в стадии разработки, и первоначально планируется выпустить ВЫПУСК 1.0.0 для выполнения следующих функций. После развертывания службы сервера вам нужно только ввести компонент Starter в бизнес-систему, чтобы выполнить динамическую модификацию, мониторинг, оповещение и другие функции.
Что я могу получить от просмотра исходного кода?
Релизная версия еще не выпущена. Друзья могут прочитать исходный код фреймворка и проверить хорошие концепции дизайна или навыки кодирования в фреймворке.
В процессе разработки проекта для справки используется элегантный дизайн проектов промежуточного программного обеспечения, таких как Nacos, Eureka, Seata, ShardingSphere.
Итоги обзора
Редактор - программист с чистотой кода.Разработка кода в проекте полностью соответствует правилам кода Alibaba.Также рекомендуется всем использовать его и развивать хорошие привычки кодирования.
Маленький друг перед экраном, если вы считаете, что планирование функций проекта и дизайн кода неплохие, нажмите 🚀 Звезда, чтобы облегчить последующую проверку.
Если у вас есть другие взгляды на этот проект, добро пожаловать в поле для комментариев~