您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)Networknt Light 4J分析報(bào)告是怎樣的,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
Networknt Light 4J分析報(bào)告
一、整體介紹
Light 4J是networknt.com的核心產(chǎn)品。一個(gè)基于Java SE快速、輕量級(jí)并且高效的微服務(wù)框架。其包含十多個(gè)子模塊,用于不同風(fēng)格的API構(gòu)建,包括OAuth3,Portal,Logging,Messaging和Metrics等基礎(chǔ)設(shè)施服務(wù)。此外,還有一系列工具可幫助提高開發(fā)人員和操作人員的工作效率。
1、性能情況
在Light 4J官方的benchmark的測(cè)試報(bào)告中,將它與 Spring Boot 及其他微服務(wù)平臺(tái)作了性能比較。Light 4J比Spring Boot內(nèi)嵌Tomcat的主流微服務(wù)框架平臺(tái)快44倍,并且只需要1/5內(nèi)存,性能與 Go 語(yǔ)言并肩,擁有更低的平均延遲。
Framework | Language | Max Throughput | Avg Latency | Transfer |
Go FastHttp | Go | 1,396,685.83 | 99.98ms | 167.83MB |
Light-4j | Java | 1,344,512.65 | 2.36ms | 169.25MB |
Spark | Java | 194,553.83 | 13.85ms | 32.47MB |
Go Http | Go | 170,313.02 | 15.01ms | 20.95MB |
Spring Boot Undertow | Java | 44,260.61 | 38.94ms | 6.42MB |
Spring Boot Tomcat | Java | 33,086.22 | 82.93ms | 3.98MB |
2、Github情況
Light 4J目前共有71個(gè)Github子項(xiàng)目,其中Java項(xiàng)目39個(gè),最高熱度的項(xiàng)目為L(zhǎng)ight 4J本身,2167 star,354 fork,低于Spring Boot、Spring Cloud、Dubbo等項(xiàng)目。其余幾個(gè)核心子項(xiàng)目,如light-oauth3、light-rest-4j、light-proxy等項(xiàng)目?jī)H有一兩百的star。
Light 4J項(xiàng)目目前共有23個(gè)代碼貢獻(xiàn)者,但目前關(guān)注的開發(fā)者開始逐漸加入, 形成開發(fā)梯隊(duì)。
3、Light 4J能力清單
模塊 | 描述 |
server | 基于Undertow實(shí)現(xiàn)http請(qǐng)求 |
security | 基于OAuth3實(shí)現(xiàn)JWT的校驗(yàn)和解析,并支持mock |
config | 支持獨(dú)立應(yīng)用的外配配置文件,支持docker配置文件 |
Utility | 一個(gè)工具集 |
client | 封裝了httpclient和httpasyncclient的能力,支持緩存和jwt信息的讀取 |
validator | 支持基于sawgger的請(qǐng)求參數(shù)和url路徑校驗(yàn),支持基于json-schema-validator的請(qǐng)求包體校驗(yàn) |
audit | 支持以json的格式,將請(qǐng)求和響應(yīng)報(bào)文輸出到日志文件中 |
info | 提供一個(gè)/server/info端點(diǎn),可以輸出應(yīng)用的各個(gè)組件配置信息 |
mask | 為特定數(shù)據(jù)脫敏,比如卡號(hào)等信息 |
status | 構(gòu)建http錯(cuò)誤類型模型,使用唯一的錯(cuò)誤編號(hào)來幫助應(yīng)用排查問題 |
swagger-codegen | 使用swagger規(guī)范生成API接口程序 |
balance | 復(fù)雜均衡模塊,默認(rèn)支持輪詢和本地優(yōu)先,可擴(kuò)展開發(fā) |
body | 支持將http body格式化成Java Map或List |
cluster | 支持通過服務(wù)名的方式進(jìn)行服務(wù)發(fā)現(xiàn) |
consul | Light 4j的consul注冊(cè)中心實(shí)現(xiàn) |
correlation、traceability | 鏈路跟蹤模塊 |
CORS | http CORS 訪問控制模塊 |
zookeeper | Light 4j的zookeeper注冊(cè)中心實(shí)現(xiàn) |
data-source | 各種數(shù)據(jù)庫(kù)接入實(shí)現(xiàn) |
decryptor、encode-decode | 加解密模塊,支持AES |
rate-limit | 請(qǐng)求速率限制模塊 |
prometheus | 支持prometheus格式數(shù)據(jù)接口 |
email-sender | 郵件發(fā)送模塊 |
ip-whitelist | 請(qǐng)求白名單 |
metrics | 交易統(tǒng)計(jì)模塊 |
二、框架設(shè)計(jì)思路及技術(shù)核心
Light 4J面向微服務(wù)架構(gòu)進(jìn)行設(shè)計(jì),力求高吞吐、低延遲、輕量級(jí)?;赨ndertow Core Http server核心組件進(jìn)行實(shí)現(xiàn),集成了盡可能少的第三方依賴庫(kù)。在架構(gòu)設(shè)計(jì)時(shí),主要遵循以下設(shè)計(jì)原則:
專門為微服務(wù)進(jìn)行設(shè)計(jì),并對(duì)容器化部署進(jìn)行適配優(yōu)化
摒棄復(fù)雜的JavaEE,僅基于純粹的HTTP進(jìn)行實(shí)現(xiàn)
以安全第一為設(shè)計(jì)原則,內(nèi)嵌了OAuth3.0實(shí)現(xiàn)和分布式網(wǎng)關(guān)的實(shí)現(xiàn)
設(shè)計(jì)中考慮了如何在微服務(wù)上實(shí)現(xiàn)分布式事物
將各個(gè)不同功能都設(shè)計(jì)為插件形式,易于框架的定制和擴(kuò)展
服務(wù)消費(fèi)方直接支持服務(wù)的發(fā)現(xiàn),無(wú)需通過服務(wù)網(wǎng)關(guān)、服務(wù)代理等機(jī)制進(jìn)行實(shí)現(xiàn)
日志可以結(jié)合ElasticSearch,、LogStash、Kibana提供監(jiān)控和報(bào)警能力
內(nèi)嵌的服務(wù)調(diào)用統(tǒng)計(jì)和鏈路跟蹤功能
實(shí)現(xiàn)了自己的依賴注入機(jī)制,無(wú)需引入Spring等復(fù)雜框架
Light 4J框架將Handler請(qǐng)求攔截機(jī)制作為核心,在Handler中處理框架邏輯和業(yè)務(wù)邏輯。Handler可分為兩種,一種是chain類型Handler,類似過濾器,會(huì)處理每個(gè)請(qǐng)求;另一種path類型Handler僅處理特定http路徑請(qǐng)求。
配置chain handler有兩個(gè)步驟:1、在yml配置文件中handlers的位置增加實(shí)現(xiàn)類定義(外部引入),格式為“包名.類名@別名”;2、在yml配置文件中的的chains位置增加該別名,別名的順序代表處理的順序,cross-cutting concerns處理鏈?zhǔn)情_發(fā)是結(jié)構(gòu), 用戶可以override或者加入自己的cross-cutting concerns處理鏈去支持其它標(biāo)準(zhǔn)或者應(yīng)用, 比如opentracing, istio 等。
配置http handler有三個(gè)步驟:1、基于LightHttpHandler接口實(shí)現(xiàn)http請(qǐng)求處理類;2、在yml配置文件中handler位置定義該實(shí)現(xiàn)類的,格式為“包名.類名”;3、在yml配置文件中paths的位置配置http請(qǐng)求對(duì)應(yīng)的請(qǐng)求方式、路徑、實(shí)現(xiàn)類。
Handlers配置示例:
Chains配置示例:
Paths配置示例:
自定義Handlers實(shí)現(xiàn)示例:
三、總結(jié)
1、性能方面
Light 4J相比較與現(xiàn)有的Spring Boot、Spring Cloud或Dubbo,由于功能上的簡(jiǎn)化,性能上確實(shí)會(huì)來帶較大的提升,同時(shí)它也提供了基礎(chǔ)的服務(wù)注冊(cè)與發(fā)現(xiàn)機(jī)制,支持zookeeper,支持容器上云部署。
不同于大應(yīng)用(monolithic application), 微服務(wù)(microservices application)的每一個(gè)服務(wù)本身所處理的邏輯相對(duì)簡(jiǎn)單, 不應(yīng)該把大量的業(yè)務(wù)邏輯處理和數(shù)據(jù)庫(kù)交互放在單個(gè)服務(wù)(service API)中。而service to service的交互相對(duì)更加頻繁 (servicemesher)。 很多復(fù)雜的業(yè)務(wù)邏輯處理應(yīng)該分布在多個(gè)服務(wù)中,然后通過service to service的交互來完成。所以框架本身的性能和service to service的交互中的相應(yīng)時(shí)間就極其重要。對(duì)于大規(guī)模容器上云部署, 可以顯著地節(jié)約成本。
基于一個(gè)用戶的測(cè)試報(bào)告:
For the same functionality,
Framework throughput latency memory
Spring-Boot 213/s 66.07ms 1.5GB
Light-4j 2319/s 11.39ms 300MB
2、生態(tài)方面
Light 4J主要的弱點(diǎn)在于其生態(tài)的相對(duì)薄弱。 Light 4J目前并沒有完善的生態(tài)體系,社區(qū)方面熱度也較低,主項(xiàng)目?jī)H有2.2k的star,其他項(xiàng)目基本都只有幾十到幾百的star。相比于Spring健全的生態(tài)體系,能力上會(huì)弱很多,比如熔斷、限流、配置中心這些能力目前處于沒有實(shí)現(xiàn)或僅有簡(jiǎn)單方案的狀態(tài),與不同第三方中間件的對(duì)接,都要以Handler的模式進(jìn)行二次開發(fā)適配。
3、能力方面
Light 4J框架Handler請(qǐng)求攔截機(jī)制對(duì)于開發(fā)者透明并且可延遲配置, 開發(fā)者可以集中精力在業(yè)務(wù)邏輯從而提高工作效率。 雖然Light 4J本身提供了較多微服務(wù)架構(gòu)下所需的能力, 有些并沒有跟蹤行業(yè)標(biāo)準(zhǔn)。例如Light 4J框架內(nèi)部提供了鏈路跟蹤模塊不支持Open Tracing . 用戶可以按自己的標(biāo)準(zhǔn)設(shè)計(jì)并開發(fā)擴(kuò)展模塊 (cross-cutting concerns middleware handler)。
關(guān)于Networknt Light 4J分析報(bào)告是怎樣的就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。