微服務,ApiGateway 與 Kong

一. 微服務html

二. Api Gateway前端

三. Kong 的使用nginx

 

一. 微服務數據庫

        對於一些傳統的 大型項目,傳統的方式會有一些缺陷,好比說 新人熟悉系統成本高(由於整個系統做爲一個總體,彼此會有必定的牽連),項目重apache

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

        因此說就會有微服務這種概念,一個服務實現一個不一樣的特性或者功能。每個獨立的微服務都是一個小型應用。一些微服務可能會暴露一些api 給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

相關文章
相關標籤/搜索