美團(tuán)的動(dòng)態(tài)線程池,不依賴中間件可以實(shí)現(xiàn)么?

為什么寫(xiě)這個(gè)項(xiàng)目?

大家好,我是龍臺(tái)。

美團(tuán)線程池文章 介紹中,因?yàn)闃I(yè)務(wù)對(duì)線程池參數(shù)沒(méi)有合理配置,觸發(fā)過(guò)幾起生產(chǎn)事故,進(jìn)而引發(fā)了一系列思考。最終決定封裝線程池動(dòng)態(tài)參數(shù)調(diào)整,擴(kuò)展線程池監(jiān)控以及消息報(bào)警等功能

在開(kāi)源平臺(tái)找了挺多動(dòng)態(tài)線程池項(xiàng)目,從功能性以及健壯性而言,個(gè)人感覺(jué)不滿足企業(yè)級(jí)應(yīng)用

因?yàn)閷?duì)動(dòng)態(tài)線程池比較感興趣,加上想寫(xiě)一個(gè)有意義的項(xiàng)目,所以決定自己來(lái)造一個(gè)輕量級(jí)的輪子

想給項(xiàng)目起一個(gè)簡(jiǎn)單易記的名字,類似于 Eureka、Nacos、Redis;后來(lái)和朋友商量,決定以動(dòng)物命名:Hippo(河馬)

GitHub:https://github.com/acmenlt/dynamic-threadpool(建議復(fù)制到電腦查看)

├── dynamic-threadpool
│   ├── dynamic-threadpool-common  -- 公共模塊
│   ├── dynamic-threadpool-config  -- 配置中心
│   ├── dynamic-threadpool-console  -- 控制臺(tái)
│   ├── dynamic-threadpool-discovery  -- 注冊(cè)中心
│   ├── dynamic-threadpool-spring-boot-starter  -- Client 依賴組件
│   ├── dynamic-threadpool-example  -- 示例項(xiàng)目
│   └── dynamic-threadpool-server  -- 服務(wù)端
│   └── dynamic-threadpool-tools  -- 抽象工具類

它解決了什么問(wèn)題?

線程池在業(yè)務(wù)系統(tǒng)應(yīng)該都有使用到,幫助業(yè)務(wù)流程提升效率以及管理線程,多數(shù)場(chǎng)景應(yīng)用于大量的異步任務(wù)處理

雖然線程池提供了我們?cè)S多便利,但也并非盡善盡美,比如下面這些問(wèn)題就無(wú)法很好解決

image

如果線程池的配置涉及到上述問(wèn)題,那么就有可能需要發(fā)布業(yè)務(wù)系統(tǒng)來(lái)解決;如果發(fā)布后參數(shù)仍不合理,繼續(xù)發(fā)布......

Hippo 很好解決了這個(gè)問(wèn)題,它將業(yè)務(wù)中所有線程池統(tǒng)一管理,遇到上述問(wèn)題不需要發(fā)布系統(tǒng)就可以替換線程池參數(shù)

image

它有什么特性?

應(yīng)用系統(tǒng)中線程池并不容易管理。參考美團(tuán)的設(shè)計(jì),Hippo 按照租戶、項(xiàng)目、線程池的維度劃分。再加上系統(tǒng)權(quán)限,讓不同的開(kāi)發(fā)、管理人員負(fù)責(zé)自己系統(tǒng)的線程池操作

舉個(gè)例子,小編在一家公司的公共組件團(tuán)隊(duì),團(tuán)隊(duì)中負(fù)責(zé)消息、短鏈接網(wǎng)關(guān)等項(xiàng)目。公共組件是租戶,消息或短鏈接就是項(xiàng)目

Hippo 除去動(dòng)態(tài)修改線程池,還包含實(shí)時(shí)查看線程池運(yùn)行時(shí)指標(biāo)、負(fù)載報(bào)警、配置日志管理等。具體功能如下圖

image

如何運(yùn)行 Demo?

目前動(dòng)態(tài)線程池功能已經(jīng)完成,可以直接把代碼拉到本地運(yùn)行。項(xiàng)目中數(shù)據(jù)庫(kù)是作者 ECS Docker 搭建,大家直接使用即可

  1. 啟動(dòng) dynamic-threadpool-server 模塊下 ServerApplication 應(yīng)用類
  2. 啟動(dòng) dynamic-threadpool-example 模塊下 ExampleApplication 應(yīng)用類

通過(guò)接口修改線程池中的配置。HTTP POST 路徑:http://localhost:6691/v1/cs/configs,Body 請(qǐng)求體如下:

{
    "ignore": "tenantId、itemId、tpId 代表唯一線程池,請(qǐng)不要修改",
    "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
}

接口調(diào)用成功后,觀察 dynamic-threadpool-example 控制臺(tái)日志輸出,日志輸出包括不限于此信息即為成功

[?? MESSAGE-PRODUCE] Changed thread pool. coreSize :: [11=>10], maxSize :: [15=>15], queueType :: [9=>9]
capacity :: [100=>100], keepAliveTime :: [10000=>10000], rejectedType :: [7=>7]

現(xiàn)階段已集成釘釘消息推送,后續(xù)會(huì)持續(xù)接入企業(yè)微信、郵箱、飛書(shū)、短信等通知渠道??梢酝ㄟ^(guò)添加釘釘群體驗(yàn)消息推送,群號(hào):31764717

image
image

項(xiàng)目代碼功能還在持續(xù)開(kāi)發(fā),初定發(fā)布 1.0.0 RELEASE 完成以下功能。部署了 Server 服務(wù),只需要引入 Starter 組件到業(yè)務(wù)系統(tǒng)中,即可完成動(dòng)態(tài)修改、監(jiān)控、報(bào)警等特性

查看源碼能收獲什么?

目前還沒(méi)有發(fā)布 Release 版本,小伙伴可以閱讀框架源碼,查看框架中好的設(shè)計(jì)理念或者編碼技巧

在項(xiàng)目開(kāi)發(fā)過(guò)程中,借鑒了 Nacos、Eureka、Seata、ShardingSphere 等中間件項(xiàng)目的優(yōu)雅設(shè)計(jì)

image

回顧總結(jié)

小編是個(gè)有代碼潔癖的程序員,項(xiàng)目中的代碼開(kāi)發(fā)完全遵守阿里巴巴代碼規(guī)約,也推薦大家使用,培養(yǎng)好的編碼習(xí)慣

屏幕前的小伙伴,如果覺(jué)得項(xiàng)目功能規(guī)劃、代碼設(shè)計(jì)還不錯(cuò)的話,辛苦點(diǎn)個(gè) ?? Star ,方便后續(xù)查看

對(duì)于這個(gè)項(xiàng)目,是否有什么不一樣看法,歡迎在評(píng)論區(qū)一起溝通交流~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 很久之前人們?yōu)榱死^續(xù)享用并行化帶來(lái)的好處而不想使用進(jìn)程,于是創(chuàng)造出了比進(jìn)程更輕量級(jí)的線程。以linux為例,創(chuàng)建一...
    xindoo閱讀 148評(píng)論 0 0
  • 歡迎大家關(guān)注我的微信公眾號(hào)【老周聊架構(gòu)】,Java后端主流技術(shù)棧的原理、源碼分析、架構(gòu)以及各種互聯(lián)網(wǎng)高并發(fā)、高性能...
    老周聊架構(gòu)閱讀 259評(píng)論 0 1
  • 線程池是一種多線程處理形式,大多用于高并發(fā)服務(wù)器上,它能合理有效的利用高并發(fā)服務(wù)器上的線程資源;線程與進(jìn)程用于處理...
    linux大本營(yíng)閱讀 1,313評(píng)論 0 0
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險(xiǎn)厭惡者,不喜歡去冒險(xiǎn),但是人生放棄了冒險(xiǎn),也就放棄了無(wú)數(shù)的可能。 ...
    yichen大刀閱讀 8,211評(píng)論 0 4
  • 公元:2019年11月28日19時(shí)42分農(nóng)歷:二零一九年 十一月 初三日 戌時(shí)干支:己亥乙亥己巳甲戌當(dāng)月節(jié)氣:立冬...
    石放閱讀 7,531評(píng)論 0 2

友情鏈接更多精彩內(nèi)容