欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

云原生 API 網(wǎng)關(guān) APISIX入門(mén)

jf_78858299 ? 來(lái)源:k8s技術(shù)圈 ? 作者:陽(yáng)明 ? 2023-05-04 17:35 ? 次閱讀

Apache APISIX 是 Apache 軟件基金會(huì)下的云原生 API 網(wǎng)關(guān),它具有動(dòng)態(tài)、實(shí)時(shí)、高性能等特點(diǎn),提供了負(fù)載均衡、動(dòng)態(tài)上游、灰度發(fā)布(金絲雀發(fā)布)、服務(wù)熔斷、限速、防御惡意攻擊、身份認(rèn)證、可觀測(cè)性等豐富的流量管理功能。我們可以使用 Apache APISIX 來(lái)處理傳統(tǒng)的南北向流量,也可以處理服務(wù)間的東西向流量。同時(shí),它也支持作為 Kubernetes Ingress Controller 來(lái)使用。

APISIX 基于 Nginx 和 etcd,與傳統(tǒng) API 網(wǎng)關(guān)相比,APISIX 具有動(dòng)態(tài)路由和熱加載插件功能,避免了配置之后的 reload 操作,同時(shí) APISIX 支持 HTTP(S)、HTTP2、Dubbo、QUIC、MQTT、TCP/UDP 等更多的協(xié)議。而且還內(nèi)置了 Dashboard,提供強(qiáng)大而靈活的界面。同樣也提供了豐富的插件支持功能,而且還可以讓用戶自定義插件。

主要具有以下幾個(gè)特點(diǎn):

  • 多平臺(tái)支持 :APISIX 提供了多平臺(tái)解決方案,它不但支持裸機(jī)運(yùn)行,也支持在 Kubernetes 中使用,還支持與 AWS Lambda、Azure Function、Lua 函數(shù)和 Apache OpenWhisk 等云服務(wù)集成。
  • 全動(dòng)態(tài)能力 :APISIX 支持熱加載,這意味著你不需要重啟服務(wù)就可以更新 APISIX 的配置。請(qǐng)?jiān)L問(wèn)為什么 Apache APISIX 選擇 Nginx + Lua 這個(gè)技術(shù)棧?以了解實(shí)現(xiàn)原理。
  • 精細(xì)化路由 :APISIX 支持使用 NGINX 內(nèi)置變量做為路由的匹配條件,你可以自定義匹配函數(shù)來(lái)過(guò)濾請(qǐng)求,匹配路由。
  • 運(yùn)維友好 :APISIX 支持與以下工具和平臺(tái)集成:HashiCorp Vault、Zipkin、Apache SkyWalking、Consul、Nacos、Eureka。通過(guò) APISIX Dashboard,運(yùn)維人員可以通過(guò)友好且直觀的 UI 配置 APISIX。
  • 多語(yǔ)言插件支持 :APISIX 支持多種開(kāi)發(fā)語(yǔ)言進(jìn)行插件開(kāi)發(fā),開(kāi)發(fā)人員可以選擇擅長(zhǎng)語(yǔ)言的 SDK 開(kāi)發(fā)自定義插件。

安裝 APISIX

為了簡(jiǎn)單,我們這里可以直接在本地使用 docker 方式來(lái)啟動(dòng) APISIX,首先 Clone 官方提供的 apisix-docker 倉(cāng)庫(kù):

? git clone https://github.com/apache/apisix-docker.git
? cd apisix-docker

在項(xiàng)目根目錄下面的 example 目錄中有啟動(dòng) APISIX 的 docker-compose 配置文件,如下所示:

version: "3"

services:
  apisix-dashboard:
    image: apache/apisix-dashboard:3.0.0-alpine
    restart: always
    volumes:
      - ./dashboard_conf/conf.yaml:/usr/local/apisix-dashboard/conf/conf.yaml
    ports:
      - "9000:9000"
    networks:
      apisix:

  apisix:
    image: apache/apisix:3.2.0-debian
    restart: always
    volumes:
      - ./apisix_conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro
    depends_on:
      - etcd
    ports:
      - "9180:9180/tcp"
      - "9080:9080/tcp"
      - "9091:9091/tcp"
      - "9443:9443/tcp"
      - "9092:9092/tcp"
    networks:
      apisix:

  etcd:
    image: rancher/coreos-etcd:v3.4.15-arm64
    user: root
    restart: always
    volumes:
      - ./etcd_data:/etcd-data
    environment:
      ETCD_UNSUPPORTED_ARCH: "arm64"
      ETCD_ENABLE_V2: "true"
      ALLOW_NONE_AUTHENTICATION: "yes"
      ETCD_ADVERTISE_CLIENT_URLS: "http://0.0.0.0:2379"
      ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379"
      ETCD_DATA_DIR: "/etcd-data"
    ports:
      - "2379:2379/tcp"
    networks:
      apisix:

  web1:
    image: nginx:1.19.10-alpine
    restart: always
    volumes:
      - ./upstream/web1.conf:/etc/nginx/nginx.conf
    ports:
      - "9081:80/tcp"
    environment:
      - NGINX_PORT=80
    networks:
      apisix:

  web2:
    image: nginx:1.19.10-alpine
    restart: always
    volumes:
      - ./upstream/web2.conf:/etc/nginx/nginx.conf
    ports:
      - "9082:80/tcp"
    environment:
      - NGINX_PORT=80
    networks:
      apisix:

networks:
  apisix:
    driver: bridge

該 compose 里面主要包含了 APISIX 的三個(gè)容器:apisix、etcd 以及 apisix-dashboard。現(xiàn)在我們就可以使用 docker-compose 來(lái)進(jìn)行一鍵啟動(dòng):

? docker-compose -f docker-compose.yml up -d

另外兩個(gè) nginx 容器是用于測(cè)試的:

圖片

docker-compose

請(qǐng)確保其他系統(tǒng)進(jìn)程沒(méi)有占用 9000、9080、9091、9092、9180、9443 和 2379 端口。如果啟動(dòng)有錯(cuò)誤,可以嘗試為 examples 目錄設(shè)置成 777 權(quán)限,保證 etcd 數(shù)據(jù)有權(quán)限寫(xiě)入。

當(dāng) APISIX 啟動(dòng)完成后我們就可以通過(guò) curl 來(lái)訪問(wèn)正在運(yùn)行的 APISIX 實(shí)例。比如,可以發(fā)送一個(gè)簡(jiǎn)單的 HTTP 請(qǐng)求來(lái)驗(yàn)證 APISIX 運(yùn)行狀態(tài)是否正常。

? curl "http://127.0.0.1:9080" --head
HTTP/1.1 404 Not Found
Date: Tue, 21 Mar 2023 07:38:45 GMT
Content-Type: text/plain; charset=utf-8
Connection: keep-alive
Server: APISIX/3.2.0

現(xiàn)在,你已經(jīng)成功安裝并運(yùn)行了 APISIX !

功能測(cè)試

接下來(lái)我們來(lái)了解下 APISIX 的一些功能。在了解之前我們需要對(duì) APISIX 的幾個(gè)主要概念和組件簡(jiǎn)單了解下:

上游

Upstream 也稱(chēng)為上游,上游是對(duì)虛擬主機(jī)的抽象,即應(yīng)用層服務(wù)或節(jié)點(diǎn)的抽象。

上游的作用是按照配置規(guī)則對(duì)服務(wù)節(jié)點(diǎn)進(jìn)行負(fù)載均衡,它的地址信息可以直接配置到路由或服務(wù)上。當(dāng)多個(gè)路由或服務(wù)引用同一個(gè)上游時(shí),可以通過(guò)創(chuàng)建上游對(duì)象,在路由或服務(wù)中使用上游的 ID 方式引用上游,減輕維護(hù)壓力。

路由

Route 也稱(chēng)為路由,是 APISIX 中最基礎(chǔ)和最核心的資源對(duì)象。

APISIX 可以通過(guò)路由定義規(guī)則來(lái)匹配客戶端請(qǐng)求,根據(jù)匹配結(jié)果加載并執(zhí)行相應(yīng)的插件,最后把請(qǐng)求轉(zhuǎn)發(fā)給到指定的上游服務(wù)。路由中主要包含三部分內(nèi)容:匹配規(guī)則、插件配置和上游信息。

服務(wù)

Service 也稱(chēng)為服務(wù),是某類(lèi) API 的抽象(也可以理解為一組 Route 的抽象)。它通常與上游服務(wù)抽象是一一對(duì)應(yīng)的,Route 與 Service 之間,通常是 N:1 的關(guān)系。

消費(fèi)者

Consumer 是某類(lèi)服務(wù)的消費(fèi)者,需要與用戶認(rèn)證配合才可以使用。當(dāng)不同的消費(fèi)者請(qǐng)求同一個(gè) API 時(shí),APISIX 會(huì)根據(jù)當(dāng)前請(qǐng)求的用戶信息,對(duì)應(yīng)不同的 Plugin 或 Upstream 配置。如果 Route、Service、Consumer 和 Plugin Config 都綁定了相同的插件,只有消費(fèi)者的插件配置會(huì)生效。插件配置的優(yōu)先級(jí)由高到低的順序是:Consumer > Route > Plugin Config > Service。

對(duì)于 API 網(wǎng)關(guān)而言,一般情況可以通過(guò)請(qǐng)求域名、客戶端 IP 地址等字段識(shí)別到某類(lèi)請(qǐng)求方,然后進(jìn)行插件過(guò)濾并轉(zhuǎn)發(fā)請(qǐng)求到指定上游。但有時(shí)候該方式達(dá)不到用戶需求,因此 APISIX 支持了 Consumer 對(duì)象。

插件

Plugin 也稱(chēng)之為插件,它是擴(kuò)展 APISIX 應(yīng)用層能力的關(guān)鍵機(jī)制,也是在使用 APISIX 時(shí)最常用的資源對(duì)象。插件主要是在 HTTP 請(qǐng)求或響應(yīng)生命周期期間執(zhí)行的、針對(duì)請(qǐng)求的個(gè)性化策略。插件可以與路由、服務(wù)或消費(fèi)者綁定。

如果路由、服務(wù)、插件配置或消費(fèi)者都綁定了相同的插件,則只有一份插件配置會(huì)生效,插件配置的優(yōu)先級(jí)由高到低順序是:消費(fèi)者 > 路由 > 插件配置 > 服務(wù)。同時(shí)在插件執(zhí)行過(guò)程中也會(huì)涉及 6 個(gè)階段,分別是 rewriteaccess、before_proxyheader_filter、body_filterlog。

Admin API

APISIX 提供了強(qiáng)大的 Admin API 和 Dashboard 供用戶使用,Admin API 是一組用于配置 Apache APISIX 路由、上游、服務(wù)、SSL 證書(shū)等功能的 RESTful API。

我們可以通過(guò) Admin API 來(lái)獲取、創(chuàng)建、更新以及刪除資源。同時(shí)得益于 APISIX 的熱加載能力,資源配置完成后 APISIX 將會(huì)自動(dòng)更新配置,無(wú)需重啟服務(wù),具體的架構(gòu)原理可以查看下面的架構(gòu)圖:

圖片

APISIX 架構(gòu)圖

主要分為兩個(gè)部分:

  • APISIX 核心 :包括 Lua 插件、多語(yǔ)言插件運(yùn)行時(shí)(Plugin Runner)、Wasm 插件運(yùn)行時(shí)等;
  • 功能豐富的各種內(nèi)置插件 :包括可觀測(cè)性、安全、流量控制等。

APISIX 在其核心中,提供了路由匹配、負(fù)載均衡、服務(wù)發(fā)現(xiàn)、API 管理等重要功能,以及配置管理等基礎(chǔ)性模塊。除此之外,APISIX 插件運(yùn)行時(shí)也包含其中,提供原生 Lua 插件的運(yùn)行框架和多語(yǔ)言插件的運(yùn)行框架,以及實(shí)驗(yàn)性的 Wasm 插件運(yùn)行時(shí)等。APISIX 多語(yǔ)言插件運(yùn)行時(shí)提供多種開(kāi)發(fā)語(yǔ)言的支持,比如 Golang、Java、Python、JS 等。

APISIX 目前也內(nèi)置了各類(lèi)插件,覆蓋了 API 網(wǎng)關(guān)的各種領(lǐng)域,如認(rèn)證鑒權(quán)、安全、可觀測(cè)性、流量管理、多協(xié)議接入等。當(dāng)前 APISIX 內(nèi)置的插件使用原生 Lua 實(shí)現(xiàn),關(guān)于各個(gè)插件的介紹與使用方式,后續(xù)我們?cè)俳榻B。

創(chuàng)建路由

下面的示例中我們先使用 Admin API 來(lái)創(chuàng)建一個(gè) Route 并與 Upstream 綁定,當(dāng)一個(gè)請(qǐng)求到達(dá) APISIX 時(shí),APISIX 會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到指定的上游服務(wù)中。

以下示例代碼中,我們將為路由配置匹配規(guī)則,以便 APISIX 可以將請(qǐng)求轉(zhuǎn)發(fā)到對(duì)應(yīng)的上游服務(wù):

? curl "http://127.0.0.1:9180/apisix/admin/routes/1" -X PUT -d '
{
  "methods": ["GET"],
  "host": "youdianzhishi.com",
  "uri": "/anything/*",
  "upstream": {
    "type": "roundrobin",
    "nodes": {
      "httpbin.org:80": 1
    }
  }
}' -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
# 正常會(huì)得到如下所示的結(jié)果
{"value":{"create_time":1679392758,"methods":["GET"],"host":"youdianzhishi.com","status":1,"priority":0,"update_time":1679392758,"upstream":{"pass_host":"pass","hash_on":"vars","type":"roundrobin","nodes":{"httpbin.org:80":1},"scheme":"http"},"id":"1","uri":"/anything/*"},"key":"/apisix/routes/1"}

其中的 X-API-KEY 的值在 APISIX 的配置文件中 apisix_config.yaml 中有配置,位于 deployment.admin.admin_key 下面。

該配置意味著,當(dāng)請(qǐng)求滿足下述的所有規(guī)則時(shí),請(qǐng)求將被轉(zhuǎn)發(fā)到上游服務(wù)(httpbin.org:80):

  • 請(qǐng)求的 HTTP 方法為 GET。
  • 請(qǐng)求頭包含 host 字段,且它的值為 youdianzhishi.com。
  • 請(qǐng)求路徑匹配 /anything/*,* 意味著任意的子路徑,例如 /anything/foo?arg=10。

當(dāng)路由創(chuàng)建完成后,現(xiàn)在我們就可以通過(guò)以下命令訪問(wèn)上游服務(wù)了:

? curl -i -X GET "http://127.0.0.1:9080/anything/foo?arg=10" -H "Host: youdianzhishi.com"
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 443
Connection: keep-alive
Date: Tue, 21 Mar 2023 08:25:49 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Server: APISIX/3.2.0

{
  "args": {
    "arg": "10"
  },
  "data": "",
  "files": {},
  "form": {},
  "headers": {
    "Accept": "*/*",
    "Host": "youdianzhishi.com",
    "User-Agent": "curl/7.85.0",
    "X-Amzn-Trace-Id": "Root=1-64196a0d-1d2b654b29cbed3f7a9302c7",
    "X-Forwarded-Host": "youdianzhishi.com"
  },
  "json": null,
  "method": "GET",
  "origin": "172.22.0.1, 221.11.206.200",
  "url": "http://youdianzhishi.com/anything/foo?arg=10"
}

該請(qǐng)求將被 APISIX 轉(zhuǎn)發(fā)到 http://httpbin.org:80/anything/foo?arg=10,我們可以和直接訪問(wèn)上游數(shù)據(jù)進(jìn)行對(duì)比。

圖片

httpbin數(shù)據(jù)

使用上游服務(wù)創(chuàng)建路由

我們還可以通過(guò)以下命令創(chuàng)建一個(gè)上游,并在路由中使用它,而不是直接將其配置在路由中:

? curl "http://127.0.0.1:9180/apisix/admin/upstreams/1" -X PUT -d '
{
  "type": "roundrobin",
  "nodes": {
    "httpbin.org:80": 1
  }
}' -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
# 正常會(huì)得到如下所示的輸出
{"value":{"type":"roundrobin","create_time":1679392818,"pass_host":"pass","hash_on":"vars","update_time":1679392818,"nodes":{"httpbin.org:80":1},"id":"1","scheme":"http"},"key":"/apisix/upstreams/1"}

該上游配置與上一節(jié)配置在路由中的上游相同。同樣使用了 roundrobin 作為負(fù)載均衡機(jī)制,并設(shè)置了 httpbin.org:80 為上游服務(wù)。為了將該上游綁定到路由,此處需要把 upstream_id 設(shè)置為 "1"。

上游服務(wù)創(chuàng)建完成后,現(xiàn)在我們可以通過(guò)以下命令將其綁定到指定的 /get 路由:

? curl "http://127.0.0.1:9180/apisix/admin/routes/1" -X PUT -d '
{
  "uri": "/get",
  "host": "httpbin.org",
  "upstream_id": "1"
}' -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
# 正常會(huì)得到如下所示的輸出
{"value":{"upstream_id":"1","status":1,"create_time":1679392758,"host":"httpbin.org","update_time":1679392834,"priority":0,"id":"1","uri":"/get"},"key":"/apisix/routes/1"}

我們已經(jīng)創(chuàng)建了路由與上游服務(wù),現(xiàn)在可以通過(guò)以下命令訪問(wèn)上游服務(wù):

? curl -i -X GET "http://127.0.0.1:9080/get?foo1=bar1&foo2=bar2" -H "Host: httpbin.org"
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 370
Connection: keep-alive
Date: Tue, 21 Mar 2023 08:40:19 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Server: APISIX/3.2.0

{
  "args": {
    "foo1": "bar1",
    "foo2": "bar2"
  },
  "headers": {
    "Accept": "*/*",
    "Host": "httpbin.org",
    "User-Agent": "curl/7.85.0",
    "X-Amzn-Trace-Id": "Root=1-64196d73-165daa124c362e5d4c6bb79d",
    "X-Forwarded-Host": "httpbin.org"
  },
  "origin": "172.22.0.1, 221.11.206.200",
  "url": "http://httpbin.org/get?foo1=bar1&foo2=bar2"
}

同樣該請(qǐng)求也會(huì)被 APISIX 轉(zhuǎn)發(fā)到 http://httpbin.org:80/anything/foo?arg=10

使用 Dashboard

同樣我們還可以使用 APISIX Dashboard 創(chuàng)建和配置類(lèi)似于上述步驟中所創(chuàng)建的路由。

如果你已經(jīng)完成上述操作步驟,正?,F(xiàn)在我們已經(jīng)可以通過(guò) localhost:9000 來(lái)訪問(wèn) APISIX Dashboard 了。

圖片

dashboard

默認(rèn)的用戶名和密碼均為 admin,在 examples 目錄中 dashboard_conf 下面的 conf.yaml 進(jìn)行配置:

authentication:
  secret: secret
  expire_time: 3600
  users:
    - username: admin
      password: admin
    - username: user
      password: user

上面我們的 docker-compose 中也已經(jīng)啟動(dòng)了 Grafana,所以登錄后我們也可以在首頁(yè)儀表盤(pán)上配置 Grafana,地址為 http://localhost:3000。

圖片

Grafana

登錄后單擊側(cè)邊欄中的路由,可以查看已經(jīng)配置的路由列表,可以看到在上述步驟中使用 Admin API 創(chuàng)建的路由。

圖片

路由列表

你也可以通過(guò)單擊創(chuàng)建按鈕并按照提示創(chuàng)建新路由:

圖片圖片

如果想利用 APISIX 實(shí)現(xiàn)身份驗(yàn)證、安全性、限流限速和可觀測(cè)性等功能,可通過(guò)添加插件實(shí)現(xiàn)。

限流限速和安全插件

在很多時(shí)候,我們的 API 并不是處于一個(gè)非常安全的狀態(tài),它隨時(shí)會(huì)收到不正常的訪問(wèn),一旦訪問(wèn)流量突增,可能就會(huì)導(dǎo)致你的 API 發(fā)生故障,這個(gè)時(shí)候我們就可以通過(guò)速率限制來(lái)保護(hù) API 服務(wù),限制非正常的訪問(wèn)請(qǐng)求。對(duì)此,我們可以使用如下方式進(jìn)行:

  • 限制請(qǐng)求速率;
  • 限制單位時(shí)間內(nèi)的請(qǐng)求數(shù);
  • 延遲請(qǐng)求;
  • 拒絕客戶端請(qǐng)求;
  • 限制響應(yīng)數(shù)據(jù)的速率。

APISIX 提供了多個(gè)內(nèi)置的限流限速的插件,包括 limit-conn、limit-countlimit-req。

  • limit-conn 插件主要用于限制客戶端對(duì)服務(wù)的并發(fā)請(qǐng)求數(shù)。
  • limit-req 插件使用漏桶算法限制對(duì)用戶服務(wù)的請(qǐng)求速率。
  • limit-count 插件主要用于在指定的時(shí)間范圍內(nèi),限制每個(gè)客戶端總請(qǐng)求個(gè)數(shù)。

這里我們就以 limit-count 插件為例,來(lái)說(shuō)明如何通過(guò)限流限速插件保護(hù)我們的 API 服務(wù)。如下所示。

使用下面的命令首先創(chuàng)建一條路由:

? curl -i http://127.0.0.1:9180/apisix/admin/routes/1 -X PUT -d '
{
    "uri": "/index.html",
    "plugins": {
        "limit-count": {
            "count": 2,
            "time_window": 60,
            "rejected_code": 503,
            "key_type": "var",
            "key": "remote_addr"
        }
    },
  "upstream_id": "1"
}' -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'

這里我們直接使用前面已經(jīng)創(chuàng)建的上游(ID 為 1)來(lái)創(chuàng)建/更新一條路由,并且在 plugins 中啟用了 limit-count 插件,該插件僅允許客戶端在 60 秒內(nèi),訪問(wèn)上游服務(wù) 2 次,超過(guò)兩次,就會(huì)返回 503 錯(cuò)誤碼。

上面的指令執(zhí)行成功后,接下來(lái)我們連續(xù)使用下面的命令訪問(wèn)三次后,則會(huì)出現(xiàn)如下錯(cuò)誤。

? curl http://127.0.0.1:9080/index.html
? curl http://127.0.0.1:9080/index.html
? curl http://127.0.0.1:9080/index.html

正常情況下就會(huì)出現(xiàn)如下所示的 503 錯(cuò)誤,則表示 limit-count 插件已經(jīng)配置成功。

<html>
  <head>
    <title>503 Service Temporarily Unavailable<span class="hljs-name"title>
  <span class="hljs-name"head>
  <body>
    <center><h1>503 Service Temporarily Unavailable<span class="hljs-name"h1><span class="hljs-name"center>
    <hr />
    <center>openresty<span class="hljs-name"center>
    <p>
      <em>Powered by <a href="https://apisix.apache.org/">APISIX<span class="hljs-name"a>.<span class="hljs-name"em>
    <span class="hljs-name"p>
  <span class="hljs-name"body>
<span class="hljs-name"html>

緩存響應(yīng)

當(dāng)我們?cè)跇?gòu)建一個(gè) API 時(shí),肯定希望他能夠盡量保持簡(jiǎn)單和快速,一旦讀取相同數(shù)據(jù)的并發(fā)需求增加,可能會(huì)面臨一些問(wèn)題,一般我們直接的辦法就是引入緩存,當(dāng)然我們可以在不同層面去進(jìn)行緩存的。

  • 邊緣緩存或 CDN
  • 數(shù)據(jù)庫(kù)緩存
  • 服務(wù)器緩存(API 緩存)
  • 瀏覽器緩存

反向代理緩存是另一種緩存機(jī)制,通常在 API 網(wǎng)關(guān)內(nèi)實(shí)現(xiàn)。它可以減少對(duì)你的端點(diǎn)的調(diào)用次數(shù),也可以通過(guò)緩存上游的響應(yīng)來(lái)改善對(duì)你的 API 請(qǐng)求的延遲。如果 API Gateway 的緩存中有所請(qǐng)求資源的新鮮副本,它就會(huì)使用該副本直接滿足請(qǐng)求,而不是向端點(diǎn)發(fā)出請(qǐng)求。如果沒(méi)有找到緩存的數(shù)據(jù),請(qǐng)求就會(huì)轉(zhuǎn)到預(yù)定的上游服務(wù)(后端服務(wù))。

我們這里主要了解的是 API 網(wǎng)關(guān)層的緩存,也就是 APISIX 提供的 API 緩存,它也可以和其他插件一起使用,目前支持基于磁盤(pán)的緩存,也可以在插件配置中指定緩存過(guò)期時(shí)間或內(nèi)存容量等。

比如我們現(xiàn)在有一個(gè) /products 的 API 接口,通常每天只更新一次,而該端點(diǎn)每天都會(huì)收到重復(fù)的數(shù)十億次請(qǐng)求,以獲取產(chǎn)品列表數(shù)據(jù),現(xiàn)在我們就可以使用 APISIX 提供的一個(gè)名為 proxy-cache 的插件來(lái)緩存該接口的響應(yīng)。

這里我們還是使用前面 ID 為 1 的上游對(duì)象,使用 /anything/products 來(lái)模擬產(chǎn)品接口,直接執(zhí)行下面的命令來(lái)更新路由的插件:

? curl "http://127.0.0.1:9180/apisix/admin/routes/1" -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d '{
  "name": "Route for API Caching",
  "methods": [
    "GET"
  ],
  "uri": "/anything/*",
  "plugins": {
    "proxy-cache": {
      "cache_key": [
        "$uri",
        "-cache-id"
      ],
      "cache_bypass": [
        "$arg_bypass"
      ],
      "cache_method": [
        "GET"
      ],
      "cache_http_status": [
        200
      ],
      "hide_cache_headers": true,
      "no_cache": [
        "$arg_test"
      ]
    }
  },
  "upstream_id": "1"
}'

更新完成后現(xiàn)在我們來(lái)對(duì)該接口發(fā)起幾次請(qǐng)求:

? curl http://localhost:9080/anything/products -i

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 398
Connection: keep-alive
Date: Tue, 21 Mar 2023 10:48:42 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Server: APISIX/3.2.0
Apisix-Cache-Status: MISS

? curl http://localhost:9080/anything/products -i

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 398
Connection: keep-alive
Date: Tue, 21 Mar 2023 10:48:42 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Server: APISIX/3.2.0
Apisix-Cache-Status: HIT

正常每次都應(yīng)該收到 HTTP 200 OK 響應(yīng),但是第一次響應(yīng)中的 Apisix-Cache-Status 顯示為 MISS,這意味著當(dāng)請(qǐng)求第一次進(jìn)入路由時(shí),響應(yīng)還沒(méi)有被緩存。而后面的幾次請(qǐng)求會(huì)得到一個(gè)緩存的響應(yīng),緩存指標(biāo)變?yōu)榱?HIT,表示我們的響應(yīng)緩存成功了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1521

    瀏覽量

    62464
  • nginx
    +關(guān)注

    關(guān)注

    0

    文章

    155

    瀏覽量

    12243
  • MQTT
    +關(guān)注

    關(guān)注

    5

    文章

    655

    瀏覽量

    22735
  • zetcd
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    2830
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    性能提升1倍,成本直降50%!基于龍蜥指令加速的下一代云原生網(wǎng)關(guān)

    接入網(wǎng)關(guān)在硬件加速領(lǐng)域也邁出了第一步,開(kāi)始嘗試 QAT 卡硬件加速方案。在經(jīng)歷 Tengine QAT 的探索實(shí)踐后,阿里云推出了基于開(kāi)源 Envoy 構(gòu)建的 MSE 云原生網(wǎng)關(guān)產(chǎn)品(參考[5
    發(fā)表于 08-31 10:46

    只需 6 步,你就可以搭建一個(gè)云原生操作系統(tǒng)原型

    編者按: 過(guò)去的三年對(duì)基礎(chǔ)軟件領(lǐng)域來(lái)說(shuō)是不平凡的三年,是波濤洶涌的三年。隨著國(guó)際形勢(shì)和行業(yè)格局的變化,大家一定充分感受到了云原生和操作系統(tǒng)這兩個(gè)話題的熱度。那么當(dāng)云原生和操作系統(tǒng)這兩個(gè)熱點(diǎn)話題相遇
    發(fā)表于 09-15 14:01

    容器技術(shù)和云原生誕生的歷史背景

    背景 云原生技術(shù)有利于各組織在公有云、私有云和混合云等新型動(dòng)態(tài)環(huán)境中,構(gòu)建和運(yùn)行可彈性擴(kuò)展的應(yīng)用。云原生的代表技術(shù)包括容器、服務(wù)網(wǎng)格、微服務(wù)、不可變基礎(chǔ)設(shè)施和聲明式API。 聊容器技術(shù)避不開(kāi)
    的頭像 發(fā)表于 10-26 09:57 ?7207次閱讀
    容器技術(shù)和<b class='flag-5'>云原生</b>誕生的歷史背景

    云原生應(yīng)用中的“云”指的是什么?

    云原生應(yīng)用是獨(dú)立的小規(guī)模松散耦合服務(wù)的集合,旨在提供備受認(rèn)可的業(yè)務(wù)價(jià)值,例如快速融合用戶反饋以實(shí)現(xiàn)持續(xù)改進(jìn)。簡(jiǎn)而言之,通過(guò)云原生應(yīng)用開(kāi)發(fā),您可以加速構(gòu)建新應(yīng)用,優(yōu)化現(xiàn)有應(yīng)用并在云原生架構(gòu)中集成。其
    的頭像 發(fā)表于 11-27 17:24 ?2257次閱讀

    華為云正式提出云原生2.0的概念

    華為云發(fā)布云原生產(chǎn)業(yè)白皮書(shū),并提出云原生2.0的概念。
    的頭像 發(fā)表于 12-07 11:51 ?3799次閱讀

    引領(lǐng)云原生2.0時(shí)代,賦能新云原生企業(yè)

    十年云計(jì)算浪潮下,DevOps、容器、微服務(wù)等技術(shù)飛速發(fā)展,云原生成為潮流。Forrester首席分析師戴鯤表示,云原生是企業(yè)數(shù)字化轉(zhuǎn)型的基礎(chǔ),企業(yè)需要建立云原生優(yōu)先的戰(zhàn)略,構(gòu)建一體化全棧云原
    的頭像 發(fā)表于 12-11 16:04 ?1869次閱讀

    如何更好地構(gòu)建云原生應(yīng)用生態(tài),推動(dòng)業(yè)界更好地落地云原生

    ? 近年來(lái),“云原生”成為炙手可熱的概念,云原生技術(shù)在制造、政務(wù)、電信、金融等垂直行業(yè)的應(yīng)用占比也在快速攀升,有力地支撐了業(yè)務(wù)系統(tǒng)重構(gòu),越來(lái)越多的企業(yè)和開(kāi)發(fā)者開(kāi)始把業(yè)務(wù)與技術(shù)向云原生演進(jìn)。 ? 中國(guó)
    的頭像 發(fā)表于 12-24 11:13 ?2676次閱讀

    解讀騰訊云原生 鵝廠云原生的“新路”與“歷承”

    在云計(jì)算產(chǎn)業(yè)中,云原生是一個(gè)長(zhǎng)期討論的“老話題”。而在今年新基建、產(chǎn)業(yè)數(shù)字化的宏觀背景下,云原生的應(yīng)用主體開(kāi)始擴(kuò)張,關(guān)于這條技術(shù)路徑的討論也重新火熱了起來(lái)。 云原生突然“翻紅”的原因,或許在于更多
    的頭像 發(fā)表于 12-28 18:10 ?3543次閱讀

    華為云云原生入門(mén)級(jí)開(kāi)發(fā)者認(rèn)證概述

    那小編今天就來(lái)聊一聊值得大家關(guān)注的認(rèn)證:華為云云原生入門(mén)級(jí)開(kāi)發(fā)者認(rèn)證(HCCDA - Cloud Native )。
    的頭像 發(fā)表于 03-28 10:44 ?1w次閱讀

    Apache APISIX云原生API網(wǎng)關(guān)

    ./oschina_soft/gitee-apisix.zip
    發(fā)表于 05-16 09:23 ?1次下載
    Apache <b class='flag-5'>APISIX</b><b class='flag-5'>云原生</b><b class='flag-5'>API</b><b class='flag-5'>網(wǎng)關(guān)</b>

    華為云中什么是云原生服務(wù)中心

    云原生服務(wù)中心(Operator Service Center,OSC)是面向服務(wù)提供商和服務(wù)使用者的云原生服務(wù)生命周期治理平臺(tái),提供大量的云原生服務(wù),并使用自研部署引擎,支持所有服務(wù)包統(tǒng)一管理
    發(fā)表于 07-27 15:44 ?730次閱讀
    華為云中什么是<b class='flag-5'>云原生</b>服務(wù)中心

    什么是分布式云原生

    什么是分布式云原生 華為云分布式云原生服務(wù)(Ubiquitous Cloud Native Service, UCS)是業(yè)界首個(gè)分布式云原生產(chǎn)品,為企業(yè)提供云原生業(yè)務(wù)部署、管理、應(yīng)用生
    發(fā)表于 07-27 15:52 ?1620次閱讀

    關(guān)于API網(wǎng)關(guān)策略的知識(shí)分享

    近些年隨著云原生和微服務(wù)架構(gòu)的日趨發(fā)展,API 網(wǎng)關(guān)以流量入口的角色在技術(shù)架構(gòu)中扮演著越來(lái)越重要的作用。API 網(wǎng)關(guān)主要負(fù)責(zé)接收所有請(qǐng)求的流
    的頭像 發(fā)表于 02-11 10:45 ?1253次閱讀

    什么是云原生MLOps平臺(tái)

    云原生MLOps平臺(tái),是指利用云計(jì)算的基礎(chǔ)設(shè)施和開(kāi)發(fā)工具,來(lái)構(gòu)建、部署和管理機(jī)器學(xué)習(xí)模型的全生命周期的平臺(tái)。以下,是對(duì)云原生MLOps平臺(tái)的介紹,由AI部落小編整理。
    的頭像 發(fā)表于 12-12 13:13 ?177次閱讀

    云原生AI服務(wù)怎么樣

    云原生AI服務(wù),是指采用云原生的原則和技術(shù)來(lái)構(gòu)建、部署和管理人工智能應(yīng)用及工作負(fù)載的方法和模式。那么,云原生AI服務(wù)怎么樣呢?下面,AI部落小編帶您了解。
    的頭像 發(fā)表于 01-23 10:47 ?133次閱讀