一. 微服務html
二. Api Gateway前端
三. Kong 的使用nginx
一. 微服務數據庫
對於一些傳統的 大型項目,傳統的方式會有一些缺陷,好比說 新人熟悉系統成本高(由於整個系統做爲一個總體,彼此會有必定的牽連),項目重apache
啓時間長,重構困難(對於一個新技術的引入,可能須要對整個項目推到重來),不易於更換新的技術,而且整個項目會慢慢變成巨無霸。後端
因此說就會有微服務這種概念,一個服務實現一個不一樣的特性或者功能。每個獨立的微服務都是一個小型應用。一些微服務可能會暴露一些api 給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
3.2.2 加入 api
單個加入:
--url:http://localhost:8001/apis/ 固定的,加入 api 就得寫這個,表示給 kong管理。
upstream_url:表示咱們的網站。至關於一個請求前綴。
request_path:就是具體咱們的 api。
四. 參考:
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