本文为您介绍 Apache APISIX、Nacos 基本概念以及注册核心的作用,并为您展现了 Apache APISIX 基于 Nacos 实现服务发现的具体操作。
背景信息
对于 Apache APISIX
Apache APISIX 是一个动静、实时、高性能的 API 网关,提供负载平衡、动静上游、灰度公布、服务熔断、身份认证、可观测性等丰盛的流量治理性能。Apache APISIX 不仅领有泛滥实用的插件,而且反对插件动静变更和热插拔。
对于 Nacos
Nacos 是阿里巴巴开源的一个易于应用的动静服务发现、配置和服务治理平台。它提供了一组简略易用的个性集,能够帮忙您疾速实现动静服务发现,服务配置,服务元数据及流量治理,让您更麻利和容易地构建,交付和治理微服务平台。Nacos 是构建以“服务”为核心的古代利用架构(例如微服务范式、云原生范式)的服务基础设施。
注册核心
什么是注册核心
服务注册核心是服务要实现服务化治理的外围组件,相似于目录服务的作用,也是微服务架构中最根底的设施之一,次要用来存储服务信息,譬如服务提供者 URL 、路由信息等。注册核心的实现是通过一种映射的形式,将简单的服务端信息映射为简略易懂的信息提供给客户端。
注册核心的外围性能为以下三点:
- 服务注册:服务提供方向注册核心进行注册。
- 服务发现:服务生产方能够通过注册核心寻找到服务提供方的调用路由信息。
- 衰弱检测:确保注册到注册核心的服务节点是能够被失常调用的,防止有效节点导致的调用资源节约等问题。
为什么须要注册核心?
注册核心实质上是为了解耦服务提供者和服务消费者,在微服务体系中,各个业务服务之间会频繁相互调用,并且须要对各个服务的 IP、port 等路由信息进行对立的治理。然而要如何进行治理呢?咱们能够通过注册核心的 服务注册 性能将已有服务的相干信息提供到对立的注册核心进行治理。
通过上述形容,您能够理解到注册核心能够帮忙用户通过映射疾速找到服务和服务地址。随着业务更新迭代,服务会频繁发生变化,在服务端中注册了新的服务或者服务宕机后,客户端依然能够通过注册核心的 服务发现 性能拉取服务列表,如果注册核心的服务节点产生变更,注册核心会发送申请告诉客户端从新拉取。
如果服务端的服务忽然宕机,并且没有向注册核心反馈,客户端能够通过注册核心的健康检查性能,进行固定工夫距离的被动上报心跳形式向服务端表明本人的服务状态。如果服务状态异样,则会告诉注册核心,注册核心能够及时把曾经宕机的服务节点进行剔除,防止资源的节约。
Apache APISIX + Nacos 为用户提供了什么利用场景?
Apache APISIX + Nacos 能够将各个微服务节点中与业务无关的各项管制,集中在 Apache APISIX 中进行对立治理,即通过Apache APISIX 实现接口服务的代理和路由转发的能力。各个微服务在 Nacos 上注册后,Apache APISIX 能够通过 Nacos 的服务发现性能获取服务列表,查找对应的服务地址从而实现动静代理。
[外链图片转存失败,源站可能有防盗链机制,倡议将图片保留下来间接上传(img-Sk6XaUbU-1645607132156)(https://tfzcfxawmk.feishu.cn/...)]
Apache APISIX 基于 Nacos 实现服务发现
前提条件
本文操作基于以下环境进行。
- 操作系统 Centos 7.9。
- 已装置 Apache APISIX 2.12.1,详情请参考:Apache APISIX how-to-bulid。
- 已装置 Nacos 2.0.4,详情请参考:quick start。
- 已装置 Node.js,详情请参考:node.js Installation。
步骤一:服务注册
- 应用 Node.js 的 Koa 框架在
3005
端口启动一个简略的测试服务作为上游(Upstream)。
const Koa = require('koa');const app = new Koa();app.use(async ctx => { ctx.body = 'Hello World';});app.listen(3005);
- 在命令行中通过申请 Nacos Open API 的形式进行服务注册。
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'
- 执行服务注册后应用以下命令查问以后服务状况。
curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=APISIX-NACOS'
正确返回后果示例如下:
{ "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 创立一个新的路由(Route),APISIX 通过 upstream.discovery_type
字段抉择应用的服务发现类型,upstream.service_name
须要与注册核心的对应服务名进行关联,因而创立路由时指定服务发现类型为 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" }}'
在上述命令中,申请头 X-API-KEY
是 Admin API 的拜访 token,能够在 conf/config.yaml
文件中的 apisix.admin_key.key
查看。
增加胜利后,正确返回后果示例如下:
{ "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
中传递其余服务相干参数用于指定服务所在的命名空间或组别,具体内容可参考下表:
名字 | 类型 | 可选项 | 默认值 | 有效值 | 阐明 |
---|---|---|---|---|---|
namespace_id | string | 可选 | public | 服务所在的命名空间 | |
group_name | string | 可选 | DEFAULT_GROUP | 服务所在的组 |
步骤三:验证配置后果
应用以下命令发送申请至须要配置的路由。
curl -i http://127.0.0.1:9080/nacos/
失常返回后果示例如下:
HTTP/1.1 200 OKContent-Type: text/plain; charset=utf-8Content-Length: 11Connection: keep-aliveDate: Thu, 27 Jan 2022 00:48:26 GMTServer: APISIX/2.12.0Hello World
通过示例看到,Apache APISIX 中新增的路由曾经能够通过 Nacos 服务发现找到正确的服务地址,并失常响应。
总结
本文为大家介绍了注册核心的概念以及 Apache APISIX 如何配合 Nacos 实现基于服务发现的路由代理。理论场景中如何进行 Apache APISIX 与 Nacos 的配合应用,您须要看具体的业务需要和过往技术架构。
对于 nacos
插件的更多阐明和残缺配置信息,可参考官网文档:nacos。
Apache APISIX 我的项目目前正在开发其余插件以反对集成更多服务,如果您对此有趣味,您能够通过GitHub Discussions 发动探讨,或通过邮件列表进行交换。