Soul网关发布2.2.0 | 让高性能网关变得如此简单!
點擊上方“朱小廝的博客”,選擇“設(shè)為星標(biāo)”
后臺回復(fù)"加群",加入新技術(shù)
本文來自:貓大人的Dromara分布式事務(wù)
Soul發(fā)布全新的架構(gòu)2.2.0版本 讓網(wǎng)關(guān)變得如此簡單
我們還是先來看看新增功能,然后再講故事。
完全的插件化架構(gòu)設(shè)計,插件熱插拔。
完整支持dubbo所有版本,alibaba-dubbo ,apache-dubbo。
支持dubbo泛化調(diào)用,多參數(shù),復(fù)雜參數(shù)接口。
增強monitor插件,移除influxdb支持,新增內(nèi)存,CPU,QPS,TPS,響應(yīng)遲延等metrics,支持接入Prometheus。
springCloud插件支持eureka與nacos二種注冊中心。
waf插件增強,支持黑白名單,以及混合模式。
抽離Hystrix熔斷功能,獨立成插件支持。
修護Zookeeper數(shù)據(jù)同步方式bug,新增nacos同步數(shù)據(jù)方式。
多種soul-client支持,提供傳統(tǒng)spring,以及springboot等方式接入。
優(yōu)化 soul-admin后臺控制界面。
負(fù)載均衡算法bug修護。
修護大文件上傳時候的bug。
…….太多了不一一列舉了。
體驗新架構(gòu),10分鐘搞定一個高可用高性能網(wǎng)關(guān)。
啟動 soul-admin
下載soul-admin.jar包,并啟動.
>?wget??https://yu199195.github.io/jar/soul-admin.jar >?java?-jar?soul-admin.jar?--spring.datasource.url="jdbc:mysql://你的url:3306/soul?useUnicode=true&characterEncoding=utf-8&useSSL=false"??--spring.datasource.username='you?username'??--spring.datasource.password='you?password'訪問 http://localhost:9095/index.html 默認(rèn)的用戶名:admin ?密碼:123456。
搭建屬于你的網(wǎng)關(guān)
首先你新建一個空的springboot項目,可以參考 soul-bootstrap. 也可以在spring官網(wǎng):[https://spring.io/quickstart]
引入如下jar包:
在你的 application.yaml 文件中加上如下配置:
這樣網(wǎng)關(guān)的環(huán)境就已經(jīng)搭建完成。
體驗新架構(gòu)下的插件熱插拔
問:我想使用熔斷功能,應(yīng)該如何做呢?
答:你可以在pom.xml文件 引入以下依賴,更多的還請看:https://dromara.org/zh-cn/docs/soul/soul.html
??<!--?soul?hystrix?plugin?start--><dependency><groupId>org.dromara</groupId><artifactId>soul-spring-boot-starter-plugin-hystrix</artifactId><version>2.2.0</version></dependency><!--?soul?hystrix?plugin?end-->問:我怎么接入dubbo服務(wù)呢?
答:1)如果你使用的是alibaba-dubbo,那么你應(yīng)該引入如下:
???<!--soul?alibaba?dubbo?plugin?start--><dependency><groupId>org.dromara</groupId><artifactId>soul-spring-boot-starter-plugin-alibaba-dubbo</artifactId><version>2.2.0</version></dependency><!--?soul?alibaba?dubbo?plugin?end-->2) 如果你使用apache-dubbo,那么你應(yīng)該引入如下:
???<!--soul?apache?dubbo?plugin?start--><dependency><groupId>org.dromara</groupId><artifactId>soul-spring-boot-starter-plugin-apache-dubbo</artifactId><version>2.2.0</version></dependency><!--?soul?apache?dubbo?plugin?end-->更多的使用請你參考:https://dromara.org/zh-cn/docs/soul/user-dubbo.html
問:如果我想使用限流功能呢?
答:你可以引入以下依賴,具體的參考:https://dromara.org/zh-cn/docs/soul/plugin-rateLimiter.html
??<!--?soul?ratelimiter?plugin?start--><dependency><groupId>org.dromara</groupId><artifactId>soul-spring-boot-starter-plugin-ratelimiter</artifactId><version>2.2.0</version></dependency><!--?soul?ratelimiter?plugin?end-->總而言之,你想要使用什么插件,你就新增該插件的依賴。就這?是熱插拔么。。
問:那有些插件我不想用了怎么辦?
答:在soul-admin后臺禁用該插件即可,想用就開啟。
Soul網(wǎng)關(guān)的特性
我覺得最大的特色是在流量篩選和管控方面。無論多復(fù)雜的請求,可以根據(jù)各種條件,規(guī)則,匹配方式,來進行流量過濾,篩選,處理。這個過程完全是可視化,自定義,即時生效的,程序無需任何更改。
每個配置都在soul-admin 控制臺配置,會同步到每個Soul網(wǎng)關(guān)節(jié)點的JVM內(nèi)存,這也是Soul集群高性能的關(guān)鍵之一,在soul網(wǎng)關(guān)內(nèi)部,使用了http長輪詢,websocket,zookeeper等方式,獨立實現(xiàn)了分布式配置中心的功能。
Soul網(wǎng)關(guān)使用Reactor編程方式來實現(xiàn),獨立了線程調(diào)度,低消耗,經(jīng)過網(wǎng)關(guān)的流量,我們在開啟10個插件都處理的情況下,延遲是1~2ms。
插件機制,默認(rèn)提供了限流,熔斷,黑白名單,認(rèn)證等等插件。
支持A/B test,藍綠發(fā)布(因為掌控了所有流量這個很容易做)。
Soul網(wǎng)關(guān)有哪些使用場景,又有哪些值得你關(guān)注或者學(xué)習(xí)的?
首先我覺得還是實用主義,需要用到,才會去了解。那么在什么場景下,你需要用到呢?
后臺管理web
首先隨便微服務(wù)的流行,我們的后臺都劃分成很多的微服務(wù),我相信你們每個公司都有一個后臺管理系統(tǒng)吧,如果我沒猜錯的話,他們大體上是如下架構(gòu)。
它會有什么問題呢?大家思考一下。
每個微服務(wù)項目的開發(fā)人員都在這上面進行開發(fā),會越來越笨重。
如何不停機發(fā)布的問題?你要發(fā)布商品模塊的接口,會造成所有其他的模塊使用不了。
假如某一個模塊接口的請求量很大(需要部署多個),另一個模塊不需要,你又怎么拆分呢?
有人又會說,那我把他們拆處理,拆成一個一個web不就行了么?但是這樣又會帶來一個新的問題,負(fù)載均衡在哪里做?統(tǒng)一的認(rèn)證在哪里做?
Soul網(wǎng)關(guān)就很好了解決了以上所有問題,只需要把你的微服務(wù)注冊到Soul網(wǎng)關(guān)。你想怎么玩都可以,不重樣的.. 比如 order模塊有2個應(yīng)用,你要發(fā)布新的版本,你可以在網(wǎng)關(guān)里面,把流量先打到其中一個,另一個進行更新,更新完了以后,再把流量放過去。改變了以前運維掌控一切的觀念,java程序員,也可以玩的更好,運維都省了,向老板申請加薪指日可待。
需要統(tǒng)一鑒權(quán)?你只需要在網(wǎng)關(guān)新增一個適合自己業(yè)務(wù)的鑒權(quán)插件就OK。
公司入口網(wǎng)關(guān)(開放平臺)
如果一個公司要做開放平臺或者入口網(wǎng)關(guān),鑒權(quán),限流,監(jiān)控,熔斷肯定少不了。
如果貴公司是dubbo體系,開發(fā)人員寫了dubbo服務(wù)后,還要傻乎乎的新增一個web項目,來提供接口給別人調(diào)用嗎?
如果一個接口被攻擊,你怎么處理呢?如果被大流量攻擊,你怎么處理呢?
不巧,soul 在設(shè)計之初就是來干這種事情的,我們來看一下整體的架構(gòu)圖。
Soul網(wǎng)關(guān)是使用響應(yīng)式編程實現(xiàn)的,響應(yīng)式編程絕對是未來 java鄰域的重要方向,看風(fēng)向標(biāo)Spring體系就好了。我在14年的時候,天天寫for循環(huán)操作集合,溜的一筆。領(lǐng)導(dǎo)對我說,要使用lambda表達式,這是未來的重點,今天來看,如果你是java程序員,你不會lambda函數(shù)式編程,你好意思么。從發(fā)布2.2.0,談?wù)劷鼛啄甑拈_源體會。
我是17年左右的時候,開始寫開源項目的,最開始我和王亮一起討論設(shè)計了LCN分布式事務(wù),后面自己又陸續(xù)寫了Hmily,Raincat,Myth等分布式事務(wù)中間件,再后來寫了Soul網(wǎng)關(guān),這一路走來,遇到很多很有意思的事,也遭受很多小白用戶的摧殘。總的感覺,一個好的開源項目,高擴展,可插拔的設(shè)計實在太重要了。
案例一:Soul網(wǎng)關(guān)剛開始數(shù)據(jù)同步只支持Zookeeper方式,有些用戶反饋,我們沒有zk,那怎么辦?
案例二 :Soul網(wǎng)關(guān)是支持Dubbo的,但是有些用戶是alibaba-dubbo,有些用戶apache-dubbo,你又怎么說?
案例三 :soul剛開始提供的客戶端都是基于Springboot的,有些用戶是傳統(tǒng)的Spring,你又怎么說?
所以插件化設(shè)計,SPI可插拔設(shè)計勢在必行。
SPI VS 可插拔
誠然SPI擴展方式,是可插拔的基石,但是他們又不完全等同。舉個列子:假如我們先存儲一條數(shù)據(jù),你定好了SPI接口,也有Mysql,mongodb,elasticseach,zookeeper等等多種方式實現(xiàn),現(xiàn)在你要考慮的是把它組合在一起項目里面,還是放在不同的項目,按需打包和加載呢?這些都是要考慮的,所以不能一股腦的SPI方式。
checkStyle
嚴(yán)格的代碼規(guī)范,是對源碼學(xué)習(xí)中,框架使用者的尊重,更是一種開源的態(tài)度。
嚴(yán)格的代碼規(guī)范,讓人看起來舒服,也更容易讓人理解整個代碼。
也希望各位小伙伴提交PR的時候,至少本地要Install成功,之前有些PR,為了不打擊他們的積極性,合并之后流著淚修改。
參與開源
目前我主要專注于Apache ShardingSphere,這是中國人在apache組織的第一個關(guān)于數(shù)據(jù)庫分庫分表的頂級項目,歡迎大家參與進來。https://github.com/apache/shardingsphere。
國人在開源方面,技術(shù)方面大到芯片,小到MATLAB ,都落后挺多的,也希望大家擁有開源的心態(tài),多參與開源,學(xué)習(xí)技術(shù),宣傳思想,為往圣繼絕學(xué)!
想知道更多?掃描下面的二維碼關(guān)注我
后臺回復(fù)”加群“獲取公眾號專屬群聊入口
【精彩推薦】
超清晰的DNS入門指南
深入理解Java Stream流水線
干掉Swagger,試試這個
干掉GuavaCache:Caffeine才是本地緩存的王
如何用ELK搭建TB級的日志系統(tǒng)
深度好文:Linux系統(tǒng)內(nèi)存知識
日志系統(tǒng)新貴Loki,確實比笨重的ELK輕
日志采集系統(tǒng)都用到哪些技術(shù)?
面試官:為什么HashMap的加載因子是0.75?
點個在看少個 bug?????
總結(jié)
以上是生活随笔為你收集整理的Soul网关发布2.2.0 | 让高性能网关变得如此简单!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis性能指标监控
- 下一篇: TCP协议面试灵魂10问 | 强势整理