零、概述
用于工作、學(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ā) + 過濾器
- 路由轉(zhuǎn)發(fā):接收所有外界請(qǐng)求,根據(jù)路由配置,轉(zhuǎn)發(fā)到微服務(wù)上
- 過濾器:可以完成一系列的橫切功能,如:限流、監(jiān)控、權(quán)限校驗(yàn)等
以上這些功能本質(zhì)上都是通過過濾器實(shí)現(xiàn)的
什么是soul?
一個(gè)基于WeuFlux實(shí)現(xiàn)的響應(yīng)式API網(wǎng)關(guān),具有異步的,高性能的,跨語言的等特點(diǎn)。
soul的主要功能
- 支持各種語言(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ù)格式來請(qǐng)求網(wǎng)關(guān)服務(wù)。
soul的底層是webflux,如果soul是集群部署的話,可以開啟nginx,來反向代理網(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)聽,來動(dòng)態(tài)更新JVM中的數(shù)據(jù),
Plugins--Handler
基于插件責(zé)任鏈模式的執(zhí)行流程,每個(gè)插件各司其職。插件是根據(jù)用戶在soul-admin配置網(wǎng)關(guān)請(qǐng)求數(shù)據(jù),規(guī)則,來執(zhí)行具體邏輯。
二、環(huán)境搭建
依賴工具:樸實(shí)無華的工具,降低網(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最新版本來使用或?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)建庫、表、相關(guān)初始化數(shù)據(jù)。
用戶名:admin 密碼:123456
soul-bootstrap
基本不需要修改,只要注意與后臺(tái)連接地址一致即可
三、心得總結(jié)
環(huán)境搭建的過程,復(fù)習(xí)很多maven與git上的使用小技巧
本篇幅講了soul的大致架構(gòu),對(duì)分布式系統(tǒng)的交互有了新的理解,下一篇將擼起胳膊開始最簡單的http接口測(cè)試
靡不有初,鮮克有終。希望自己能堅(jiān)持寫完這個(gè)系列