零屏鳍、概述
用于工作勘纯、學(xué)習(xí)的需要開始學(xué)習(xí)soul,希望能堅(jiān)持下去钓瞭,不像專欄的名字一樣 ------ soul從入門到放棄
本篇導(dǎo)讀:網(wǎng)關(guān)的基本概念驳遵、soul主要架構(gòu)、環(huán)境的基本搭建
一山涡、基本概念
什么是api網(wǎng)關(guān)(服務(wù)網(wǎng)關(guān))堤结?
服務(wù)網(wǎng)關(guān) = 路由轉(zhuǎn)發(fā) + 過(guò)濾器
- 路由轉(zhuǎn)發(fā):接收所有外界請(qǐng)求,根據(jù)路由配置鸭丛,轉(zhuǎn)發(fā)到微服務(wù)上
- 過(guò)濾器:可以完成一系列的橫切功能竞穷,如:限流、監(jiān)控系吩、權(quán)限校驗(yàn)等
以上這些功能本質(zhì)上都是通過(guò)過(guò)濾器實(shí)現(xiàn)的
什么是soul来庭?
一個(gè)基于WeuFlux實(shí)現(xiàn)的響應(yīng)式API網(wǎng)關(guān),具有異步的穿挨,高性能的月弛,跨語(yǔ)言的等特點(diǎn)肴盏。
soul的主要功能
- 支持各種語(yǔ)言(http協(xié)議),支持 dubbo帽衙,springcloud協(xié)議菜皂。
- 插件化設(shè)計(jì)思想,插件熱插拔,易擴(kuò)展厉萝。
插件的熱插拔恍飘,規(guī)則的動(dòng)態(tài)配置。
舉個(gè)列子谴垫,比如一個(gè)接口你限流是1秒50次章母,但是你想調(diào)小點(diǎn),像Springcloud-gateway 或者zuul 是不是還得改動(dòng)配置 然后重啟翩剪。 soul則不需要乳怎,直接在soul-admin找到對(duì)應(yīng)的接口修改即可.</pre>
- 靈活的流量篩選,能滿足各種流量控制前弯。
- 內(nèi)置豐富的插件支持蚪缀,鑒權(quán),限流恕出,熔斷询枚,防火墻等等。
- 流量配置動(dòng)態(tài)化浙巫,性能極高金蜀,網(wǎng)關(guān)消耗在 1~2ms。
- 支持集群部署狈醉,支持 A/B Test, 藍(lán)綠發(fā)布廉油。
架構(gòu)圖
此圖綠色部分為客戶端,按照網(wǎng)關(guān)要求的數(shù)據(jù)格式來(lái)請(qǐng)求網(wǎng)關(guān)服務(wù)苗傅。
soul的底層是webflux抒线,如果soul是集群部署的話,可以開啟nginx渣慕,來(lái)反向代理網(wǎng)關(guān)服務(wù)嘶炭。
Soul-admin
是soul的控制臺(tái),負(fù)責(zé)管理插件插拔逊桦,選擇器的配置眨猎,規(guī)則的配置。將數(shù)據(jù)寫入mysql中强经,同時(shí)基于SPI(HTTP睡陪、Zookeeper、Websocket三種之一),實(shí)現(xiàn)數(shù)據(jù)同步機(jī)制(后續(xù)篇章會(huì)詳解)兰迫。
Soul Cluster
soul啟動(dòng)后信殊,會(huì)根據(jù)數(shù)據(jù)同步機(jī)制,拉去遠(yuǎn)端相關(guān)配置信息至本地汁果,寫入本地JVM涡拘,然后開啟監(jiān)聽,來(lái)動(dòng)態(tài)更新JVM中的數(shù)據(jù)据德,
Plugins--Handler
基于插件責(zé)任鏈模式的執(zhí)行流程鳄乏,每個(gè)插件各司其職。插件是根據(jù)用戶在soul-admin配置網(wǎng)關(guān)請(qǐng)求數(shù)據(jù)棘利,規(guī)則橱野,來(lái)執(zhí)行具體邏輯。
二赡译、環(huán)境搭建
依賴工具:樸實(shí)無(wú)華的工具仲吏,降低網(wǎng)關(guān)引入門檻
JDK 1.8+
Maven 3.2.x
Git
mysql 5.x :溫馨提醒,輕易不要嘗試mysql 8
克隆代碼
giee:git clone https://gitee.com/shuaiqiyu/soul.git --depth=1
github:git clone https://gitee.com/shuaiqiyu/soul.git --depth=1
關(guān)于: depth
- 用 git clone --depth=1 的好處是限制 clone 的深度蝌焚,不會(huì)下載 Git 協(xié)作的歷史記錄,這樣可以大大加快克隆的速度
- depth用于指定克隆深度誓斥,為1即表示只克隆最近一次commit
- 適合用 git clone --depth=1 的場(chǎng)景:你只是想clone最新版本來(lái)使用或?qū)W習(xí)只洒,而不是參與整個(gè)項(xiàng)目的開發(fā)工作
maven編譯
可以skip一些,提升運(yùn)行效率
mvn clean package install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Drat.skip=true -Dcheckstyle.skip=true
修改配置及啟動(dòng)
soul-admin
soul-admin/src/main/resources/application.yml
修改mysql的配置項(xiàng)目劳坑,之后 啟動(dòng)項(xiàng)目即可毕谴。
項(xiàng)目啟動(dòng)會(huì)類LocalDataSourceLoader,會(huì)執(zhí)行schema.sql腳本距芬,自動(dòng)創(chuàng)建庫(kù)涝开、表、相關(guān)初始化數(shù)據(jù)框仔。
訪問(wèn)地址:http://localhost:9095/
用戶名:admin 密碼:123456
soul-bootstrap
基本不需要修改舀武,只要注意與后臺(tái)連接地址一致即可
訪問(wèn)地址:http://localhost:9195/
三、心得總結(jié)
環(huán)境搭建的過(guò)程离斩,復(fù)習(xí)很多maven與git上的使用小技巧
本篇幅講了soul的大致架構(gòu)银舱,對(duì)分布式系統(tǒng)的交互有了新的理解,下一篇將擼起胳膊開始最簡(jiǎn)單的http接口測(cè)試
靡不有初跛梗,鮮克有終寻馏。希望自己能堅(jiān)持寫完這個(gè)系列