无缝集成:基于FastAPI实现AI模型服务与nacos的完美融合

这篇具有很好参考价值的文章主要介绍了无缝集成:基于FastAPI实现AI模型服务与nacos的完美融合。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 场景介绍

当我们使用python构建AI模型算法的过程中,经常会遇到如下的问题:

  • 这个模型如何提供给其他微服务调用(比如JAVA构建的微服务)?
  • 这个模型如何做到多个服务节点的负载均衡?
  • 这个模型如何做到服务的备份与故障转移?

本项目通过一个实际的例子,展示如何基于FastAPI实现AI模型服务与nacos的完美融合,从而实现AI模型服务与其他微服务的互通、负载均衡、以及故障转移。本项目实现以下四个目标:

  • 基于sklearn构建了一个kmeans算法模型
  • 基于FastApi将模型通过发布成api接口
  • 基于nacos的sdk,将api接口发布到nacos注册中心,供java等其它微服务调用,实现服务发现、负载均衡、故障转移
  • 基于nacos的sdk,将nacos作为配置中心,实时同步nacos中的配置变化,作为构建模型时的参数

服务接口的输入参数:{"points":[[x1,y1],[x2,y2],[x3,y3],......,[xn,yn]]}

服务接口的输出:{"results": [center1,center1,center2,......,centerx]}

输出每个point值对应的center编号

1.1 FastAPI介绍

fastapi nacos,人工智能初探,人工智能项目实战,微服务,fastapi,人工智能,nacos,python

FastAPI是一个现代的,快速(高性能)python web框架。基于标准的python类型提示,使用python3.6+构建API的Web框架。

FastAPI的主要特点如下:

  • 快速:非常高的性能,与NodeJS和Go相当(这个要感谢Starlette和Pydantic),是最快的Python框架之一。

  • 快速编码:将开发速度提高约200%到300%。

  • 更少的bug:减少大约40%的开发人员人为引起的错误。

  • 直观:强大的编辑器支持,调试时间更短。

  • 简单:易于使用和学习。减少阅读文档的时间。

  • 代码简洁:尽量减少代码重复。每个参数可以声明多个功能,减少程序的bug。

  • 健壮:生产代码会自动生成交互式文档。

  • 基于标准:基于并完全兼容API的开放标准:OpenAPI和JSON模式。

1.2 Nacos介绍

fastapi nacos,人工智能初探,人工智能项目实战,微服务,fastapi,人工智能,nacos,python

Nacos 是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施

Nacos 支持如下核心特性:

  • 服务发现: 支持 DNS 与 RPC 服务发现,也提供原生 SDK 、OpenAPI 等多种服务注册方式和 DNS、HTTP 与 API 等多种服务发现方式。
  • 2)服务健康监测: Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。
  • 3)动态配置服务: Nacos 提供配置统一管理功能,能够帮助我们将配置以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
  • 4)动态 DNS 服务: Nacos 支持动态 DNS 服务权重路由,能够让我们很容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单 DNS 解析服务。
  • 5)服务及其元数据管理: Nacos 支持从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

2 代码实现

2.1 构建一个kmeans的机器学习算法

from sklearn.cluster import KMeans

class SklKMeans:
    def __init__(self, clusters):
        self.model = KMeans(n_clusters=clusters, random_state=9)

    def fit(self, inputs):
        y_pred = self.model.fit_predict(inputs)
        return y_pred

基于sklearn实现,clusters作为入参,聚类的中心点个数。

实际模型初始化是,这个参数是从nacos配置中心同步过来的。

2.2 基于FastApi将kmeans的机器学习算法发布成api接口

资源地址为:'/api/skl-kmeans'

访问参数为:{points:[    [1,2],[2,3],[3,5],[4,6],[8,8],[10,11],[12,12],[12,15],[10,12]]}

返回结果为:{ "results": [1,    1,    1,      1,     2,     0,         0,         0,         0]}

默认聚类中心点的个数:3

from fastapi import APIRouter
from pydantic import BaseModel
from skl_kmeans import SklKMeans
import settings
import numpy as np

router = APIRouter()

class ClusterRequest(BaseModel):
    points: list

@router.post('/api/skl-kmeans')
async def api_skl_kmeans(req: ClusterRequest):
    try:
        model = SklKMeans(settings.clusters)
        response = model.fit(np.asarray(req.points))
        response = {"results": response.tolist()}
    except Exception as ex:
        response = None
    return response

2.3 将FastApi接口注册到nacos注册中心

服务注册到nacos,服务名称为“skl-kmeans”,服务端口为9999,心跳间隔为30s

import nacos
from net_utils import net_helper

class NacosHelper:
    service_name = None
    service_port = None
    service_group = None

    def __init__(self, server_endpoint, namespace_id, username=None, password=None):
        self.client = nacos.NacosClient(server_endpoint,
                                        namespace=namespace_id,
                                        username=username,
                                        password=password)
        self.endpoint = server_endpoint
        self.service_ip = net_helper.get_host_ip()

    def register(self):
        self.client.add_naming_instance(self.service_name,
                                        self.service_ip,
                                        self.service_port,
                                        group_name=self.service_group)

    def unregister(self):
        self.client.remove_naming_instance(self.service_name,
                                           self.service_ip,
                                           self.service_port)

    def set_service(self, service_name, service_port, service_group):
        self.service_name = service_name
        self.service_port = service_port
        self.service_group = service_group

    async def beat_callback(self):
        self.client.send_heartbeat(self.service_name,
                                        self.service_ip,
                                        self.service_port)

    def load_conf(self, data_id, group):
        return self.client.get_config(data_id=data_id, group=group, no_snapshot=True)

    def add_conf_watcher(self, data_id, group, callback):
        self.client.add_config_watcher(data_id=data_id, group=group, cb=callback)

nacos必备的参数有endpoint、namespace_id,group_name, username, password, data_id

nacos_endpoint = '192.168.1.238:8848'
nacos_namespace_id = '1bc91fa5-37e3-4269-8e41-3f4e4efb7633'
nacos_group_name = 'DEFAULT_GROUP'
nacos_username = 'nacos'
nacos_password = 'nacos'
nacos_data_id = 'skl-kmeans'

service_name = 'skl-kmeans'
service_port = 9999
beat_interval = 30

application.include_router(api_skl_kmeans.router, tags=['skl-kmeans'])

nacos = NacosHelper(nacos_endpoint, nacos_namespace_id, nacos_username, nacos_password)
nacos.set_service(service_name, service_port, nacos_group_name)
nacos.register()

@application.on_event('startup')
def init_scheduler():
    scheduler = AsyncIOScheduler()
    scheduler.add_job(nacos.beat_callback, 'interval', seconds=beat_interval)
    scheduler.start()

2.4 将nacos作为配置中心,启动时读取配置,并实时监控配置变化

配置中心中的配置文件data_id为“skl-kmeans”,项目启动时,强制同步一次配置;更改配置文件时,程序能够自动监控配置文件变化,并自动更新到内存中。

service_name = 'skl-kmeans'
service_port = 9999
beat_interval = 30

nacos_endpoint = '192.168.1.238:8848'
nacos_namespace_id = '1bc91fa5-37e3-4269-8e41-3f4e4efb7633'
nacos_group_name = 'DEFAULT_GROUP'
nacos_username = 'nacos'
nacos_password = 'nacos'
nacos_data_id = 'skl-kmeans'

def load_config(content):
    yaml_config = yaml.full_load(content)
    clusters = yaml_config['clusters']
    settings.clusters = clusters

def nacos_config_callback(args):
    content = args['raw_content']
    load_config(content)

# 注册配置变更监控回调
nacos.add_conf_watcher(nacos_data_id, nacos_group_name, nacos_config_callback)

# 启动时,强制同步一次配置
data_stream = nacos.load_conf(nacos_data_id,nacos_group_name)
load_config(data_stream)

2.5 在nacos中创建配置文件

配置文件的data_id为skl-kmeans

fastapi nacos,人工智能初探,人工智能项目实战,微服务,fastapi,人工智能,nacos,python

 内容为:

fastapi nacos,人工智能初探,人工智能项目实战,微服务,fastapi,人工智能,nacos,python

 2.6 启动服务

查看skl-kmeans算法服务在nacos的注册情况

fastapi nacos,人工智能初探,人工智能项目实战,微服务,fastapi,人工智能,nacos,python

已经注册成功,下面通过postman调用(也可以通过java微服务调用),构造请求参数points,实现points的聚类

fastapi nacos,人工智能初探,人工智能项目实战,微服务,fastapi,人工智能,nacos,python

{"points":[[1,2],[2,3],[3,5],[4,6],[8,8],[10,11],[12,12],[12,15],[10,12]]}
{
    "results": [
        1,
        1,
        1,
        1,
        2,
        0,
        0,
        0,
        0
    ]
}

动态调整nacos中的clusters参数,将3个中心点改为4个中心点,调整完成,kmeans算法已经自动同步了配置变化。通过postman再次调用接口,返回结果已经聚类到4个点

fastapi nacos,人工智能初探,人工智能项目实战,微服务,fastapi,人工智能,nacos,python

 从而说明kmeans算法能够实时监控nacos中配置的变化,实现动态聚类

3 完整代码下载

代码地址:完整code文章来源地址https://www.toymoban.com/news/detail-784859.html

到了这里,关于无缝集成:基于FastAPI实现AI模型服务与nacos的完美融合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud Alibaba(一)微服务简介+Nacos的安装部署与使用+Nacos集成springboot实现服务注册+Feign实现服务之间的远程调用+负载均衡+领域划分

    目录 一.认识微服务 1.0.学习目标 1.1.单体架构 单体架构的优缺点如下: 1.2.分布式架构 分布式架构的优缺点: 1.3.微服务 微服务的架构特征: 1.4.SpringCloud 1.5Nacos注册中心 1.6.总结 二、Nacos基本使用安装部署+服务注册 (一)linux安装包方式单节点安装部署 1. jdk安装配置 2. na

    2024年02月09日
    浏览(47)
  • Spring Cloud集成Nacos实现服务配置中心 | Spring Cloud 7

    先我们来看一下,微服务架构下关于配置文件的一些问题: 配置文件相对分散。在一个微服务架构下,配置文件会随着微服务的增多变的越来越多,而且分散在各个微服务中,不好统一配置和管理。 配置文件无法区分环境,开发环境、测试环境、线上环境。微服务项目可能会

    2024年02月14日
    浏览(56)
  • 新版Win11巨变:无缝集成GPT-4!系统级生成式AI工具Copilot来了

    继为Office套件带来AI助手Microsoft 365 Copilot后,微软在今晚的Build 2023大会上宣布,Windows Copilot将全面降临Windows 11操作系统。 Windows Copilot简言之就是Bing AI聊天的Windows桌面版,基于GPT-4打造,它可以帮助你自动化各种任务,包括复制粘贴、截图、管理多窗口等。 按计划,Windows

    2024年02月12日
    浏览(35)
  • Asp .Net Core 系列:集成 Ocelot+Nacos+Swagger+Cors实现网关、服务注册、服务发现

    什么是 Ocelot ? Ocelot是一个开源的ASP.NET Core微服务网关,它提供了API网关所需的所有功能,如路由、认证、限流、监控等。 Ocelot是一个简单、灵活且功能强大的API网关,它可以与现有的服务集成,并帮助您保护、监控和扩展您的微服务。 以下是Ocelot的一些主要功能: 路由管理

    2024年01月19日
    浏览(53)
  • SpringBoot集成Nacos-服务注册篇

    Nacos是阿里巴巴开源的一款用于实现服务注册和发现、动态配置管理的中间件。它提供了服务注册与发现、配置管理和动态DNS等功能,可广泛应用于微服务架构中。Spring Boot作为一种快速开发的Java框架,与Nacos的集成可以方便地实现服务的注册与发现。 本文将分为以下几个部

    2024年02月16日
    浏览(40)
  • 微服务框架SpringcloudAlibaba+Nacos集成RabbiMQ

    目前公司使用jeepluscloud版本,这个版本没有集成消息队列,这里记录一下,集成的过程;这个框架跟ruoyi的那个微服务版本结构一模一样,所以也可以快速上手。 配置类的东西做成一个公共的模块 rabbitmq模块: 哪一个服务模块需要消息队列,就在对应的yml文件中配置 rabbit链接

    2024年02月07日
    浏览(41)
  • 微服务框架SpringcloudAlibaba+Nacos集成RabbitMQ

    目前公司使用jeepluscloud版本,这个版本没有集成消息队列,这里记录一下,集成的过程;这个框架跟ruoyi的那个微服务版本结构一模一样,所以也可以快速上手。 配置类的东西做成一个公共的模块 rabbitmq模块: 哪一个服务模块需要消息队列,就在对应的yml文件中配置 rabbit链接

    2024年02月06日
    浏览(30)
  • Gateway服务集成Nacos2021.0.4错误解决

    gateway服务集成nacos,启动后报错: Caused by: com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: ; 版本: jdk:1.8 spring-boot:2.7.11 spring-cloud:2021.0.6 spring-cloud-alibaba:2021.0.4.0 单配置文件:application.yaml中配置 多配置文件:

    2024年02月13日
    浏览(35)
  • .net core 6 集成nacos的服务注册和配置中心

    1、安装nuget包 2、加上配置文件         注意:         \\\"ConfigUseRpc\\\": false         \\\"NamingUseRpc\\\": false         http连接选false否则配置中心可能会获取不到内容 3、注册 启动后 4、使用服务发现 5、注册配置中心 随意添加配置 6、使用配置中心 7、配置变化的监听方法

    2024年01月16日
    浏览(35)
  • EasyLLM:简化语言模型处理,实现 OpenAI 和 Hugging Face 客户端的无缝切换

    在这短短不到一年的时间里,国内外涌现的大型语言模型(LLM)可谓是百花齐放,不管是开源还是闭源都出现了一些非常优秀的模型,然而在利用LLM进行应用开发的时候,会发现每个模型从部署、到训练、微调、API接口开发、Prompt提示词格式等方面都存在或多或少的差异,导

    2024年02月13日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包