失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Nacos 在 Apache APISIX API 网关中的服务发现实践

Nacos 在 Apache APISIX API 网关中的服务发现实践

时间:2023-05-12 03:18:01

相关推荐

Nacos 在 Apache APISIX API 网关中的服务发现实践

Apache APISIX 是一个动态、实时、高性能的 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。它不仅拥有众多实用的插件,而且支持插件动态变更和热插拔。同时在使用服务发现组件时,不仅可以利用 etcd,也可以将 Eureka、Consul 和 Nacos 作为服务发现组件。本文将详细为您介绍如何在 Apache APISIX 中配置 Nacos 作为 Apache APISIX API 网关中的服务发现组件。

注册中心

什么是注册中心

服务注册中心是服务要实现服务化管理的核心组件,类似于目录服务的作用,也是微服务架构中最基础的设施之一,主要用来存储服务信息,譬如服务提供者 URL 、路由信息等。注册中心的实现是通过一种映射的方式,将复杂的服务端信息映射为简单易懂的信息提供给客户端。

注册中心的核心功能为以下三点:

服务注册:服务提供方注册中心进行注册。

服务发现:服务消费方可以通过注册中心寻找到服务提供方的调用路由信息。

健康检测:确保注册到注册中心的服务节点是可以被正常调用的,避免无效节点导致的调用资源浪费等问题。

为什么需要注册中心?

注册中心本质上是为了解耦服务提供者和服务消费者,在微服务体系中,各个业务服务之间会频繁互相调用,并且需要对各个服务的 IP、port 等路由信息进行统一的管理。但是要如何进行管理呢?我们可以通过注册中心的服务注册功能将已有服务的相关信息提供到统一的注册中心进行管理。

通过上述描述,您可以了解到注册中心可以帮助用户通过映射快速找到服务和服务地址。随着业务更新迭代,服务会频繁发生变化,在服务端中注册了新的服务或者服务宕机后,客户端仍然可以通过注册中心的服务发现功能拉取服务列表,如果注册中心的服务节点发生变更,注册中心会发送请求通知客户端重新拉取。

如果服务端的服务突然宕机,并且没有向注册中心反馈,客户端可以通过注册中心的健康检查功能,进行固定时间间隔的主动上报心跳方式向服务端表明自己的服务状态。如果服务状态异常,则会通知注册中心,注册中心可以及时把已经宕机的服务节点进行剔除,避免资源的浪费。

Apache APISIX + Nacos 为用户提供了什么应用场景?

Apache APISIX + Nacos 可以将各个微服务节点中与业务无关的各项控制,集中在 Apache APISIX 中进行统一管理,即通过Apache APISIX 实现接口服务的代理和路由转发的能力。各个微服务在 Nacos 上注册后,Apache APISIX 可以通过 Nacos 的服务发现功能获取服务列表,查找对应的服务地址从而实现动态代理。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sk6XaUbU-1645607132156)(/space/api/box/stream/download/asynccode/?code=MjliYTliN2UxYjkxOGMxYzQyZjQyN2VmNzg3ZDYxZWVfMDZ3SzZBTzFQNGNsSGdUU2szb2x1M2Nzd056dFJKMGxfVG9rZW46Ym94Y243MzVrWWVjNTRDYWx1Tk9wVmtiVkllXzE2NDU2MDcxMjM6MTY0NTYxMDcyM19WNA)]

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中传递其他服务相关参数用于指定服务所在的命名空间或组别,具体内容可参考下表:

步骤三:验证配置结果

使用以下命令发送请求至需要配置的路由。

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 00:48:26 GMTServer: APISIX/2.12.0Hello World

通过示例看到,Apache APISIX 中新增的路由已经可以通过 Nacos 服务发现找到正确的服务地址,并正常响应。

总结

本文为大家介绍了注册中心的概念以及 Apache APISIX 如何配合 Nacos 实现基于服务发现的路由代理。实际场景中如何进行 Apache APISIX 与 Nacos 的配合使用,您需要看具体的业务需求和过往技术架构。

关于nacos插件的更多说明和完整配置信息,可参考官网文档:nacos。

Apache APISIX 项目目前正在开发其他插件以支持集成更多服务,如果您对此有兴趣,您可以通过GitHub Discussions 发起讨论,或通过邮件列表进行交流。

如果觉得《Nacos 在 Apache APISIX API 网关中的服务发现实践》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。