比 Spring Cloud Zuul 更好用的 API 網(wǎng)關(guān)(spring cloud網(wǎng)關(guān)的好處)
推薦一個(gè) 比 spring cloud 更好用的 API 網(wǎng)關(guān)。它是一個(gè)基于腳本解釋器的低代碼 API 網(wǎng)關(guān)。用于協(xié)議轉(zhuǎn)換、反向代理、服務(wù)編排,BFF 等。
此項(xiàng)目是由 阿里本地生活 使用的 API 網(wǎng)關(guān)改進(jìn)而來(lái),在內(nèi)部有非常廣泛的使用,在本地生活承擔(dān) 40W QPS,支持 http 、dubbo。
它可以通過(guò)簡(jiǎn)單靈活的腳本語(yǔ)言來(lái)實(shí)現(xiàn) API 網(wǎng)關(guān)的功能。項(xiàng)目的核心是 實(shí)現(xiàn)了一個(gè)輕量級(jí)腳本引擎、一個(gè)純異步的 HTTP server 、一個(gè)純異步的 HTTP client, 引入了 dubbo 。通過(guò) 腳本來(lái)代替配置,可以實(shí)現(xiàn) 靈活的 http 調(diào)用、dubbo 調(diào)用功能,其強(qiáng)大之處在于 靈活的服務(wù)編排能力。
特性
同樣是使用 java 開(kāi)發(fā),相比與 SpringCloud Zuul,它有很多 鮮明的特點(diǎn)。
低代碼
它實(shí)現(xiàn)了一個(gè)靈活好用的腳本 解釋器(interpreter、vm),通過(guò)腳本代替配置文件、并且支持動(dòng)態(tài)更新、對(duì)于用戶來(lái)說(shuō)更加靈活、更加直觀。畢竟API 網(wǎng)關(guān)的用戶都是程序員,看簡(jiǎn)單的代碼比看一堆復(fù)雜的 YAML 配置來(lái)得更加直觀。
高性能、低開(kāi)銷(xiāo)
腳本解釋器是以協(xié)程的方式運(yùn)行的,不占用線程資源。底層也是基于 netty NIO 開(kāi)發(fā)的,除了 EVENT_LOOP 外無(wú)其它業(yè)務(wù)線程,利用大量的無(wú)鎖并發(fā)設(shè)計(jì),netty 零拷貝等技術(shù),性能高,開(kāi)銷(xiāo)很低。
輕依賴(lài)
整個(gè)項(xiàng)目只依賴(lài) netty 和 jackson 兩個(gè)第三方庫(kù),無(wú)其它依賴(lài)。核心代碼也只有 14000 行,在內(nèi)部實(shí)現(xiàn)了 虛擬機(jī)、異步帶連接池的 http client ,http server,依賴(lài)注入、reactive 異步事件等特性,非常利用閱讀和學(xué)習(xí)。