API網關【gateway 】- 1

最近在公司進行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進程號

相關文章
相關標籤/搜索