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