微服務,ApiGateway 與 Kong


一. 微服務

二. Api Gateway

三. Kong 的使用

 

一. 微服務

        對於一些傳統的 大型項目,傳統的方式會有一些缺陷,比如說 新人熟悉系統成本高(因為整個系統作為一個整體,彼此會有一定的牽連),項目重

啟時間長,重構困難(對於一個新技術的引入,可能需要對整個項目推到重來),不易於更換新的技術,並且整個項目會慢慢變成巨無霸。

        所以說就會有微服務這種概念,一個服務實現一個不同的特性或者功能。每一個獨立的微服務都是一個小型應用。一些微服務可能會暴露一些api 給

其他的一些微服務或者是客戶。如下圖1(把各個業務拆分):

圖1

 

        對於微服務,目前 像Netflix ,亞馬遜,ebay 等都有應用。

        當然,微服務也有一定的缺陷,比如說 每個服務(每個應用) 如果都有一個 數據庫的話,那么如何維持 數據庫事務。再比如說,服務之間的調用可

能會由於 網絡的原因變得不可達,那么 代碼中要額外增加 請求失敗的代碼。

 

二. Api Gateway

        api gateway 即 api 網關。所有的請求首先會經過這個網關。這有點類似於前端控制器模式,也有點類似於 Facade模式。如下圖2所示:

 
圖2

 

        由於所有的請求會先經過這個 api 網關,所以 可以在 這里做 權限控制,安全,負載均衡,請求分發,監控等等

        那么,為什么要用 這個 api gateway 這個東西,主要原因在於 一個客戶可以直接請求每一個服務。每一個服務都有一個 url。這些url 會和 負載均

衡設備相映射。為了得到產品信息,客戶需要發很多的 request 請求。這樣就不是很好。另外一個問題就是 可能協議不同,不一定是 http,比如說可能

由於防火牆或者什么的限制,可能需要用到其他的協議。再另外,以后重構的時候可能要拆分接口,或者合並接口,由於客戶端和 API 直接打交道,所以

比較難。

        所以說,如上 圖1 加入了 api gateway 就可以變為 如下圖3所示:

圖3
 

        當然,任何技術都有缺陷, api gateway 也是一樣,比如說 容易成為性能瓶頸。

 

 

三. Kong 的使用

        Kong 是一個現成 的 api gateway 的解決方案,它在 nginx 上進行了開發。

        api gateway 的實現方式有很多種,比如說 JVM 上可以用基於NIO 的框架比如Netty,Vertx,Spring Reactor,JOSS Undertow。現在一個比較流程的沒有基於 JVM 的就是 NodeJs。其他的還有 Nginx Plus。

        以下介紹 Kong 的使用。

  • 3.1 安裝 Kong

  • 3.2 加入 API

3.1 安裝 Kong

 

    參考:https://getkong.org/install/ ,里面寫得比較詳細了,但是要預先安裝一個 Cassandra 數據庫(介紹:http://cassandra.apache.org/)。安裝之后,Kong 項目會監控兩個端口,一個是 8000,一個是 8001。 8000端口是可以給用戶訪問,就是說用戶發送請求先到 Kong 項目的 8000 端口,然

后Kong 項目幫你轉到你的后端應用api。 8001 端口是管理端口,比如說,管理員可以通過 8001端口來得到你加入過的 api。

 
3.2 加入 API

        參考文檔:https://getkong.org/docs/0.5.x/admin-api/ , 里面介紹了 api 的管理,包括 增刪查改。下面介紹我第一次 使用時 還有有些不清楚的點:

3.2.1  列出 所加過的 api

 

[html]  view plain  copy
 
  1. curl localhost:8001/apis/  

 

 

3.2.2 加入 api

單個加入:

[html]  view plain  copy
 
  1. curl -i -X POST --url http://localhost:8001/apis/ --data 'upstream_url=http://camp.uats.cc' --data 'request_path=login'   

上面這段命令表示:

 

 

  • --url:http://localhost:8001/apis/ 固定的,加入 api 就得寫這個,表示給 kong管理。

  • upstream_url:表示我們的網站。相當於一個請求前綴。

  • request_path:就是具體我們的 api。

   利用request_host 部署全部的 api:

 

 

[html]  view plain  copy
 
  1. curl -i -X POST --url http://localhost:8001/apis/ --data 'upstream_url=http://183.131.76.124:4100/' --data         'request_host=183.131.76.122'  

3.2.3 刪除 api

 

 

[html]  view plain  copy
 
  1. curl -i -X DELETE localhost:8001/apis/00f90ca9-cf2d-4830-c842-3b90f6cd08af  
后面 這個串表示 加入的api的 id。

 

 

四. 參考:

1. API Gateway 模式: http://microservices.io/patterns/apigateway.html

2. Nginx: https://www.nginx.com/blog/introduction-to-microservices/

3. Kong 項目官網:https://getkong.org/


 

 

 

 轉:http://blog.csdn.net/pzxwhc/article/details/49873623

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM