最近在公司進行API網關重寫,公司內採用serverMesh進行服務註冊,調用,這裏結合以前學習對API網關服務進行簡單的總結與分析。html
網關的單節點場景:nginx
網關的多節點場景:c++
這裏的多節點是根據模塊進行多節點分佈,咱們公司採用的是單模塊多集羣分佈,沒有進行多模塊【模塊愈來愈多會致使更加複雜】。
網關的做用shell
* 統一入口api
* 安全:黑名單、權限身份認證瀏覽器
* 限流:實現微服務訪問流量計算,基於流量計算分析進行限流,能夠定義多種限流規則。緩存
* 緩存:數據緩存安全
* 日誌:日誌記錄服務器
* 監控:記錄請求響應數據,api耗時分析,性能監控網絡
* 重試:異常重試
* 熔斷: 降級
單純來看,會感受與微服務的特色類似
現有的框架:
Tyk:Tyk是一個開放源碼的API網關,它是快速、可擴展和現代的。Tyk提供了一個API管理平臺,其中包括API網關、API分析、開發人員門戶和API管理面板。Trk 是一個基於Go實現的網關服務。
Kong:Kong是一個可擴展的開放源碼API Layer(也稱爲API網關或API中間件)。Kong 在任何RESTful API的前面運行,經過插件擴展,它提供了超越核心平臺的額外功能和服務。
Orange:和Kong相似也是基於OpenResty的一個API網關程序,是由國人開發的。
Netflix zuul:Zuul是一種提供動態路由、監視、彈性、安全性等功能的邊緣服務。Zuul是Netflix出品的一個基於JVM路由和服務端的負載均衡器。
apiaxle: Nodejs 實現的一個 API 網關。
api-umbrella: Ruby 實現的一個 API 網關。
技術選型
從咱們公司一代網關選型來看,採用的Orange與Netflix zuul結合開發。
即外層爲nginx,中間爲zuul,最後爲後臺服務
首先安裝nginx
網上不少資料,這裏簡單列一下步驟:
1、Nginx下載:nginx-1.13.0.tar.gz,下載到:/opt/softwares/ $ wget http://nginx.org/download/nginx-1.13.0.tar.gz 2、Nginx解壓安裝: $ tar -zxvf nginx-1.13.0.tar.gz -C ./ 3、預先安裝 $ yum -y install gcc gcc-c++ ncurses-devel perl pcre pcre-devel zlib gzip zlib-devel 4、Nginx編譯 $ ./configure --prefix=/usr/local/nginx 5、安裝Nginx: 安裝命令:make & make install 6、查看安裝路徑 $ cd /usr/local/nginx $ ll conf 存放配置文件 html 網頁文件 logs 存放日誌 sbin shell啓動、中止等腳本 7、啓動nginx $ cd sbin $ ./nginx 8、瀏覽器,訪問ip地址,默認80端口 9、中止nginx $ ps -ef | grep nginx 執行命令:$ kill –INT 進程號 $ kill -INT 3844 $ ./nginx -s stop 10、從新讀取配置文件 $ nginx -s reload 11、檢查配置文件是否正確 $ ./nginx -t 問題報錯:[error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid" 解決方案: # /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -c的命令是指定配置文件位置
正向代理與反向代理
正向代理
用戶要訪問服務器C,但由於網絡緣由沒法訪問;但服務器A能夠訪問服務器C。這樣用戶能夠把服務器A設置爲正向代理服務器。由服務器A去請求服務器C,而後服務器A把數據返回會用戶。
反向代理
用戶須要訪問一些服務器應用,但對方不想把服務器應用地址暴露給用戶,這樣能夠確保安全。那用戶若是訪問呢?能夠經過反向代理服務器,用戶只須要知道反向代理服務器地址就能夠,最後由反向代理服務器去訪問服務器的應用
總結:正向代理與反向代理的區別
1)正向代理 是須要 在用戶的電腦上 配置正向代理服務器的;而反向代理不須要,由於用戶是直接訪問的反向代理服務器
2)正向代理的應用場景是 用戶是知道目標服務器的地址,如:www.google.com,但不能直接訪問,那麼就須要在用戶電腦配置一個正向代理服務器,用戶再次訪問的地址www.google.com。
而反向代理的應用場景是 用戶原本就不知道 目標服務器的地址;而是由平臺方提供一個反向代理服務器的地址,用戶直接訪問反向代理服務器的地址就行 www.a.com
無論目標服務器有多少,用戶不須要關心,只要訪問反向代理服務器就ok;由反向代理服務器去解析訪問目標服務器
3)反向代理 極大的保護了應用的安全性,並且此結構能夠很好的搭建負載均衡
nginx 信號控制
1)nginx啓動
指令:nginx程序 -c nginx配置文件
# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
2)nginx重啓
#cd /usr/local/nginx/sbin
##重啓
# ./nginx -s reload 進入nginx可執行程序的目錄 # cd /usr/local/nginx/sbin/ # ./nginx -s reload nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"
重啓是創建在nginx服務須要啓動
3)nginx中止
# ./nginx -s stop
# ./nginx -s quit
quit 是一個優雅的關閉方式,Nginx在退出前完成已經接受的鏈接請求
stop 是快速關閉,無論有沒有正在處理的請求。
4)從新打開日誌
# ./nginx -s reopen
5)nginx檢查配置文件
檢查配置文件是否正確
第一種
進入nginx可執行程序的目錄 # cd /usr/local/nginx/sbin/ # ./nginx -t
第二種
# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
二)nginx的信號控制
Nginx支持2種進程模型Single和Master-Worker
Single是單進程,通常不適用,
Master-Worker是主進程和工做進程模型運行,主進程對工做進程管理。
Nginx容許咱們經過信號來控制主進程,用信號的方式能夠達到不影響現有鏈接的目的。
信號類型
INT,TERM 快速關閉信號
QUIT 從容關閉信號
HUP 從容重啓信號,通常用於修改配置文件後,重啓
USR1 重讀日誌,通常用於日誌的切割
USR2 平滑升級信號
WINCH 從容關閉舊進程
具體語法:
kill -信號選項 nginx的主進程號
例:
# kill -INT 26661
# kill -HUP 4873
1)nginx中止
# ps -ef | grep nginx 得到進程號
第1種從容「優雅」中止
# kill -QUIT master進程號
# Nginx服務能夠正常地處理完當前全部請求再中止服務
# 步驟:首先會關閉監聽端口,中止接收新的鏈接,而後把當前正在處理的鏈接所有處理完,最後再退出進程。
第2種快速中止
# kill -TERM master進程號
# kill -INT master進程號
# 快速中止服務時,worker進程與master進程在收到信號後會馬上跳出循環,退出進程。
第3種強制中止
# pkill -9 nginx
# 系統強殺nginx進程
2)重啓nginx
# kill -HUP master進程號