一. 微服務
二. Api Gateway
三. Kong 的使用
一. 微服務
對於一些傳統的 大型項目,傳統的方式會有一些缺陷,比如說 新人熟悉系統成本高(因為整個系統作為一個整體,彼此會有一定的牽連),項目重
啟時間長,重構困難(對於一個新技術的引入,可能需要對整個項目推到重來),不易於更換新的技術,並且整個項目會慢慢變成巨無霸。
所以說就會有微服務這種概念,一個服務實現一個不同的特性或者功能。每一個獨立的微服務都是一個小型應用。一些微服務可能會暴露一些api 給
其他的一些微服務或者是客戶。如下圖1(把各個業務拆分):

對於微服務,目前 像Netflix ,亞馬遜,ebay 等都有應用。
當然,微服務也有一定的缺陷,比如說 每個服務(每個應用) 如果都有一個 數據庫的話,那么如何維持 數據庫事務。再比如說,服務之間的調用可
能會由於 網絡的原因變得不可達,那么 代碼中要額外增加 請求失敗的代碼。
二. Api Gateway
api gateway 即 api 網關。所有的請求首先會經過這個網關。這有點類似於前端控制器模式,也有點類似於 Facade模式。如下圖2所示:

由於所有的請求會先經過這個 api 網關,所以 可以在 這里做 權限控制,安全,負載均衡,請求分發,監控等等。
那么,為什么要用 這個 api gateway 這個東西,主要原因在於 一個客戶可以直接請求每一個服務。每一個服務都有一個 url。這些url 會和 負載均
衡設備相映射。為了得到產品信息,客戶需要發很多的 request 請求。這樣就不是很好。另外一個問題就是 可能協議不同,不一定是 http,比如說可能
由於防火牆或者什么的限制,可能需要用到其他的協議。再另外,以后重構的時候可能要拆分接口,或者合並接口,由於客戶端和 API 直接打交道,所以
比較難。
所以說,如上 圖1 加入了 api gateway 就可以變為 如下圖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
參考:https://getkong.org/install/ ,里面寫得比較詳細了,但是要預先安裝一個 Cassandra 數據庫(介紹:http://cassandra.apache.org/)。安裝之后,Kong 項目會監控兩個端口,一個是 8000,一個是 8001。 8000端口是可以給用戶訪問,就是說用戶發送請求先到 Kong 項目的 8000 端口,然
后Kong 項目幫你轉到你的后端應用api。 8001 端口是管理端口,比如說,管理員可以通過 8001端口來得到你加入過的 api。
參考文檔:https://getkong.org/docs/0.5.x/admin-api/ , 里面介紹了 api 的管理,包括 增刪查改。下面介紹我第一次 使用時 還有有些不清楚的點:
3.2.1 列出 所加過的 api
- curl localhost:8001/apis/
3.2.2 加入 api
單個加入:
- 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。
- 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
- curl -i -X DELETE localhost:8001/apis/00f90ca9-cf2d-4830-c842-3b90f6cd08af
四. 參考:
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