自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

HTTP API網(wǎng)關(guān)選擇之一Kong介紹

開發(fā) 開發(fā)工具
本文將從架構(gòu)、API管理、插件三個層面介紹Kong。

Kong是Mashape開源的高性能高可用API網(wǎng)關(guān)和API服務(wù)管理層。它基于OpenResty,進行API管理,并提供了插件實現(xiàn)API的AOP。Kong在Mashape 管理了超過15,000 個API,為200,000開發(fā)者提供了每月數(shù)十億的請求支持。本文將從架構(gòu)、API管理、插件三個層面介紹Kong。

開源

一、架構(gòu)

按照康威定律,我們系統(tǒng)架構(gòu)會拆的很散,系統(tǒng)由一堆服務(wù)組成,如下圖所示:

Kong

如在訪問庫存服務(wù)、優(yōu)惠券服務(wù)、價格服務(wù)時之前都會做一些特殊處理,如限流、緩存、日志、請求統(tǒng)計。而這些處理幾乎是所有服務(wù)都需要的,這不就是我們常說的AOP嘛,當我們服務(wù)多起來的時候,應(yīng)該將這些通用處理集中到一個地方進行管理,如下圖所示:

通過Kong統(tǒng)一管理通用功能

即通過Kong統(tǒng)一管理通用功能。

Kong的安裝請參考官網(wǎng)示例。Kong整體架構(gòu)如下所示:

Kong整體架構(gòu)

  1. Kong核心基于OpenResty構(gòu)建,實現(xiàn)了請求/響應(yīng)的Lua處理化;
  2. Kong插件攔截請求/響應(yīng),如果接觸過Java Servlet,等價于攔截器,實現(xiàn)請求/響應(yīng)的AOP處理;
  3. Kong Restful 管理API提供了API/API消費者/插件的管理;
  4. 數(shù)據(jù)中心用于存儲Kong集群節(jié)點信息、API、消費者、插件等信息,目前提供了PostgreSQL和Cassandra支持,如果需要高可用建議使用Cassandra;
  5. dnsmasq用于提供給Nginx DNS解析功能;
  6. Kong集群中的節(jié)點通過gossip協(xié)議自動發(fā)現(xiàn)其他節(jié)點,當通過一個Kong節(jié)點的管理API進行一些變更時也會通知其他節(jié)點。每個Kong節(jié)點的配置信息是會緩存的,如插件,那么當在某一個Kong節(jié)點修改了插件配置時,需要通知其他節(jié)點配置的變更。

二、API/API消費者/插件管理

Kong的整體流程架構(gòu)如下圖所示:

Kong的整體流程架構(gòu)

1. 添加API服務(wù)

首先我們需要通過Kong管理API向Kong注冊API服務(wù),如下所示:

  1. curl –I –X POST \ 
  2.   --url http://kong:8001/apis/ \ 
  3.   --data ‘name=queryStockService’\ 
  4.   --data ‘upstream_url=http://stock.jd.local/’\ 
  5.   --data ‘request_host=api.jd.com’ 
  6.   --data ‘request_path=queryStock’ 

向Kong添加了一個API,全局***名字為queryStockService,當我們訪問http://api.jd.com/queryStock時會upstream到http://stock.jd.local/queryStock處理,這不就是Nginx反向代理的功能,Kong實現(xiàn)了API的動態(tài)添加。

2. 添加API消費者

我們的API中有些是公開的,所有人都可以訪問,而有些API是私有的,只有授權(quán)才能訪問。在開放平臺中,只有授權(quán)的開發(fā)者才能訪問API,且有些高級API是只針對部分開發(fā)者可用,還有如對不同開發(fā)者有不同的API調(diào)用次數(shù)限制,等等。在這些非公開場景下,需要有一個API消費者。

  1. curl -i -X POST \ 
  2.   --url http://kong:8001/consumers/ \ 
  3.   --data "username=zhangkaitao"\ 

其會生成一個consumer_id “e5da92dd-fbe8-4031-bebf-34c741e209b1”,添加插件章節(jié)會用到該ID。

3. 添加插件

插件可以是全局的,也可以是局部的。如限流插件,我們可以配置為全局限流。目前支持:所有API和所有消費者、所有API和特定消費者、所有消費者和特定API、特定消費者和特定API。

為queryStockService添加50次/秒的限流。特定API和所有消費者配置。

  1. curl -X POSThttp://kong:8001/apis/queryStockService/plugins \ 
  2.     --data "name=rate-limiting"\ 
  3.     --data "config.second=50

目前Kong的限流實現(xiàn)是基于計數(shù)器,默認是本地限流,可以配置為如使用Redis,實現(xiàn)集群限流。

為queryStockService添加密鑰身份認證。

  1. curl -i -X POST \ 
  2.   --url http://kong:8001/apis/queryStockService/plugins/ \ 
  3.   --data 'name=key-auth' 

為消費者添加秘鑰。

  1. curl -i -X POST \ 
  2.   --url http://kong:8001/consumers/zhangkaitao/key-auth/\ 
  3.   --data 'key=myKey

通過秘鑰訪問API。

  1. curl -i -X GET \ 
  2.   --url http://api.jd.com/queryStock \ 
  3.   --header "Host: api.jd.com"\ 
  4.   --header "apikey: myKey" 

特定API和特定消費者限流,需要配合身份認證模塊。

  1. curl -X POST http://kong:8001/apis/abc/plugins \ 
  2. --data "name=rate-limiting"\ 
  3.     --data "consumer_id=e5da92dd-fbe8-4031-bebf-34c741e209b1"\ 
  4.     --data "config.second=1

到此添加API、添加API消費、添加API插件就介紹完了。

 

三、Kong默認插件

身份認證:Kong提供了Basic Authentication、Key authentication、OAuth2.0 authentication、HMAC authentication、JWT、LDAP authentication認證實現(xiàn)。

安全:ACL(訪問控制)、CORS(跨域資源共享)、動態(tài)SSL、IP限制、爬蟲檢測實現(xiàn)。

流量控制:請求限流(基于請求計數(shù)限流)、上游響應(yīng)限流(根據(jù)upstream響應(yīng)計數(shù)限流)、請求大小限制。限流支持本地、Redis和集群限流模式。

分析監(jiān)控:Galileo(記錄請求和響應(yīng)數(shù)據(jù),實現(xiàn)API分析)、Datadog(記錄API Metric如請求次數(shù)、請求大小、響應(yīng)狀態(tài)和延遲,可視化API Metric)、Runscope(記錄請求和響應(yīng)數(shù)據(jù),實現(xiàn)API性能測試和監(jiān)控)。

轉(zhuǎn)換:請求轉(zhuǎn)換(在轉(zhuǎn)發(fā)到upstream之前修改請求)、響應(yīng)轉(zhuǎn)換(在upstream響應(yīng)返回給客戶端之前修改響應(yīng))。

日志:TCP、UDP、HTTP、File、Syslog、StatsD、Loggly等。

也可以開發(fā)自己的插件,如緩存等。

四、總結(jié)

Kong作為API網(wǎng)關(guān)提供了API管理功能,及圍繞API管理實現(xiàn)了一些默認的插件,另外還具備集群水平擴展能力,從而提升整體吞吐量。Kong本身是基于OpenResty,可以在現(xiàn)有Kong的基礎(chǔ)上進行一些擴展,從而實現(xiàn)更復(fù)雜的特性。

有一些特性Kong默認是缺失的,如API級別的超時、重試、fallback策略、緩存、API聚合、ABTest等,這些需要開發(fā)者自己定制和擴展。

如果你要做開放平臺,你要做HTTP API網(wǎng)關(guān),Kong是您的一個選擇。

【本文是51CTO專欄作者張開濤的原創(chuàng)文章,作者微信公眾號:開濤的博客( kaitao-1234567)】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2020-12-21 13:13:35

API網(wǎng)關(guān)Kong代碼

2015-05-08 17:24:41

APIAPI網(wǎng)關(guān)Kong

2020-04-29 14:33:49

微服務(wù)網(wǎng)關(guān)Kong

2023-06-09 14:46:36

2018-04-17 16:29:24

Java面試HTTP

2021-05-06 05:39:30

Inotify監(jiān)聽系統(tǒng)

2019-12-27 10:42:45

HTTPMQTT物聯(lián)網(wǎng)

2021-03-15 07:55:55

API網(wǎng)關(guān)微服務(wù)架構(gòu)

2013-07-19 09:50:10

Java8API

2023-09-07 10:56:36

2009-08-18 17:53:08

思科認證介紹思科培訓(xùn)

2021-07-26 08:12:31

開源API網(wǎng)關(guān)

2022-01-17 10:55:50

微服務(wù)API網(wǎng)關(guān)

2020-07-28 08:32:57

微服務(wù)API網(wǎng)關(guān)熔斷

2022-05-20 12:14:50

ZuulSpringClou

2018-08-01 22:52:24

微服務(wù)容器云平臺API網(wǎng)關(guān)

2020-07-07 07:54:01

API網(wǎng)關(guān)微服務(wù)

2021-08-04 06:56:49

HTTP緩存前端

2023-06-26 18:13:56

開源API

2021-12-02 18:18:21

消費網(wǎng)關(guān)工業(yè)物聯(lián)網(wǎng)網(wǎng)關(guān)物聯(lián)網(wǎng)
點贊
收藏

51CTO技術(shù)棧公眾號