注冊(cè)中心是服務(wù)要實(shí)現(xiàn)服務(wù)化管理的核心組件,類似于目錄服務(wù)的作用,也是微服務(wù)架構(gòu)中最基礎(chǔ)的設(shè)施之一,主要用來存儲(chǔ)服務(wù)信息,譬如服務(wù)提供者 URL 、路由信息等。注冊(cè)中心的實(shí)現(xiàn)是通過一種映射的方式,將復(fù)雜的服務(wù)端信息映射為簡單易懂的信息提供給客戶端。

注冊(cè)中心的核心功能為以下三點(diǎn):

注冊(cè)中心本質(zhì)上是為了解耦服務(wù)提供者和服務(wù)消費(fèi)者,在微服務(wù)體系中,各個(gè)業(yè)務(wù)服務(wù)之間會(huì)頻繁互相調(diào)用,并且需要對(duì)各個(gè)服務(wù)的 IP、port 等路由信息進(jìn)行統(tǒng)一的管理。但是要如何進(jìn)行管理呢?我們可以通過注冊(cè)中心的服務(wù)注冊(cè)功能將已有服務(wù)的相關(guān)信息提供到統(tǒng)一的注冊(cè)中心進(jìn)行管理。

通過上述描述,您可以了解到注冊(cè)中心可以幫助用戶通過映射快速找到服務(wù)和服務(wù)地址。隨著業(yè)務(wù)更新迭代,服務(wù)會(huì)頻繁發(fā)生變化,在服務(wù)端中注冊(cè)了新的服務(wù)或者服務(wù)宕機(jī)后,客戶端仍然可以通過注冊(cè)中心的服務(wù)發(fā)現(xiàn)功能拉取服務(wù)列表,如果注冊(cè)中心的服務(wù)節(jié)點(diǎn)發(fā)生變更,注冊(cè)中心會(huì)發(fā)送請(qǐng)求通知客戶端重新拉取。

如果服務(wù)端的服務(wù)突然宕機(jī),并且沒有向注冊(cè)中心反饋,客戶端可以通過注冊(cè)中心的健康檢查功能,進(jìn)行固定時(shí)間間隔的主動(dòng)上報(bào)心跳方式向服務(wù)端表明自己的服務(wù)狀態(tài)。如果服務(wù)狀態(tài)異常,則會(huì)通知注冊(cè)中心,注冊(cè)中心可以及時(shí)把已經(jīng)宕機(jī)的服務(wù)節(jié)點(diǎn)進(jìn)行剔除,避免資源的浪費(fèi)。

Apache APISIX + Nacos 可以將各個(gè)微服務(wù)節(jié)點(diǎn)中與業(yè)務(wù)無關(guān)的各項(xiàng)控制,集中在 Apache APISIX 中進(jìn)行統(tǒng)一管理,即通過 Apache APISIX 實(shí)現(xiàn)接口服務(wù)的代理和路由轉(zhuǎn)發(fā)的能力。在 Nacos 上注冊(cè)各個(gè)微服務(wù)后,Apache APISIX 可以通過 Nacos 的服務(wù)發(fā)現(xiàn)功能獲取服務(wù)列表,查找對(duì)應(yīng)的服務(wù)地址從而實(shí)現(xiàn)動(dòng)態(tài)代理。

API 網(wǎng)關(guān)基于 Nacos 實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)

前提條件

本文操作基于以下環(huán)境進(jìn)行。

步驟一:服務(wù)注冊(cè)

  1. 使用 Node.js 的 Koa 框架在 3005 端口啟動(dòng)一個(gè)簡單的測(cè)試服務(wù)作為上游(Upstream)。
const Koa = require('koa');
const app = new Koa();

app.use(async ctx => {
ctx.body = 'Hello World';
});

app.listen(3005);
  1. 在命令行中通過請(qǐng)求 Nacos Open API 的方式進(jìn)行服務(wù)注冊(cè)。
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=APISIX-NACOS&ip=127.0.0.1&port=3005&ephemeral=false'
  1. 執(zhí)行服務(wù)注冊(cè)后使用以下命令查詢當(dāng)前服務(wù)情況。
curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=APISIX-NACOS'

正確返回結(jié)果示例如下:

{
"name": "DEFAULT_GROUP@@APISIX-NACOS",
"groupName": "DEFAULT_GROUP",
"clusters": "",
"cacheMillis": 10000,
"hosts": [
{
"instanceId": "127.0.0.1#3005#DEFAULT#DEFAULT_GROUP@@APISIX-NACOS",
"ip": "127.0.0.1",
"port": 3005,
"weight": 1.0,
"healthy": true,
"enabled": true,
"ephemeral": true,
"clusterName": "DEFAULT",
"serviceName": "DEFAULT_GROUP@@APISIX-NACOS",
"metadata": {},
"instanceHeartBeatInterval": 5000,
"instanceHeartBeatTimeOut": 15000,
"ipDeleteTimeout": 30000,
"instanceIdGenerator": "simple"
}
],
"lastRefTime": 1643191399694,
"checksum": "",
"allIPs": false,
"reachProtectionThreshold": false,
"valid": true
}

步驟二:新增 Nacos 路由

使用 Apache APISIX 提供的 Admin API 創(chuàng)建一個(gè)新的路由(Route),APISIX 通過 upstream.discovery_type 字段選擇使用的服務(wù)發(fā)現(xiàn)類型,upstream.service_name 需要與注冊(cè)中心的對(duì)應(yīng)服務(wù)名進(jìn)行關(guān)聯(lián),因此創(chuàng)建路由時(shí)指定服務(wù)發(fā)現(xiàn)類型為 nacos

curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
{
"uri": "/nacos/*",
"upstream": {
"service_name": "APISIX-NACOS",
"type": "roundrobin",
"discovery_type": "nacos"
}
}'

在上述命令中,請(qǐng)求頭 X-API-KEY 是 Admin API 的訪問 token,可以在 conf/config.yaml 文件中的 apisix.admin_key.key 查看。

添加成功后,正確返回結(jié)果示例如下:

{
"action": "set",
"node": {
"key": "\/apisix\/routes\/1",
"value": {
"update_time": 1643191044,
"create_time": 1643176603,
"priority": 0,
"uri": "\/nacos\/*",
"upstream": {
"hash_on": "vars",
"discovery_type": "nacos",
"scheme": "http",
"pass_host": "pass",
"type": "roundrobin",
"service_name": "APISIX-NACOS"
},
"id": "1",
"status": 1
}
}
}

除此之外,您還可以在 upstream.discovery_args 中傳遞其他服務(wù)相關(guān)參數(shù)用于指定服務(wù)所在的命名空間或組別,具體內(nèi)容可參考官方文檔。

步驟三:驗(yàn)證配置結(jié)果

使用以下命令發(fā)送請(qǐng)求至需要配置的路由。

curl -i http://127.0.0.1:9080/nacos/

正常返回結(jié)果示例如下:

HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Content-Length: 11
Connection: keep-alive
Date: Thu, 27 Jan 2022 00:48:26 GMT
Server: APISIX/2.12.0

Hello World

通過示例看到,Apache APISIX 中新增的路由已經(jīng)可以通過 Nacos 服務(wù)發(fā)現(xiàn)找到正確的服務(wù)地址,并正常響應(yīng)。

總結(jié)

本文為大家介紹了注冊(cè)中心的概念以及 Apache APISIX 如何配合 Nacos 實(shí)現(xiàn)基于服務(wù)發(fā)現(xiàn)的路由代理。用戶可以根據(jù)自身的業(yè)務(wù)需求和過往技術(shù)架構(gòu)使用 Apache APISIX 與 Nacos,以實(shí)現(xiàn)接口服務(wù)的代理和路由轉(zhuǎn)發(fā)的能力。

關(guān)于 nacos 插件的更多說明和完整配置信息,可參考 Apache APISIX 官方文檔。

文章來源:Nacos’ Service Discovery Practice in API Gateway

上一篇:

深入解析 GraphQL:APISIX 如何優(yōu)化 API 管理與路由

下一篇:

掌握 API 生命周期:基本階段和行之有效的成功策略
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)