核心亮点
Aliware
详尽 API 参考:详尽的 API 文档,涵盖从基础配置获取到高级服务管理的所有操作,助力您高效开发。
快速开始
Aliware
Flask 篇 —— 简洁而优雅的配置之旅
# 导入Flask库,用于构建web应用
from flask import Flask
# 导入NacosClient,用于与Nacos服务器交互,实现配置管理和服务发现功能
from nacos import NacosClient
# 初始化Flask应用实例
app = Flask(__name__)
# 设置Nacos服务器地址,请替换为实际的Nacos服务器地址
SERVER_ADDRESSES = "Your nacos server address"
# 设置Nacos命名空间ID,请替换为实际的命名空间ID
NAMESPACE = "Your nacos namespace"
# 设置Nacos用户名和密码,用于认证访问Nacos服务器
USERNAME = 'Your user name'
PASSWORD = 'Your password'
client = NacosClient(server_addresses=SERVER_ADDRESSES, namespace=NAMESPACE, username=USERNAME, password=PASSWORD,
log_level='INFO')
# 定义路由,访问根路径'/'时返回的消息,展示来自Nacos的配置信息
def hello_world():
# 使用flask的config对象获取名为"config"的配置项,展示配置内容
return f'Hello, World! Config from Nacos: {app.config.get("config")}'
def init():
# 服务注册:让Flask应用在启动时自动注册到Nacos,实现服务发现的自动化。heartbeat_interval可以调整后台心跳间隔时间,默认为5秒。
client.add_naming_instance(service_name='my-flask-service', ip='localhost', port=5000, heartbeat_interval=5)
# 设置Nacos中配置数据的数据ID和分组,默认分组为'DEFAULT_GROUP'
data_id = 'test'
group = 'DEFAULT_GROUP'
# 从Nacos获取配置,并更新到Flask应用的config对象中,以便在应用中使用这些配置
app.config.update(config=client.get_config(data_id=data_id, group=group))
# 添加配置监听器,当Nacos中的配置发生变化时,自动更新Flask应用的config对象
client.add_config_watcher(data_id=data_id, group=group,
cb=lambda cfg: app.config.update(config=cfg['content']))
if __name__ == '__main__':
init()
app.run()
在这个简短的 Flask 应用中,我们首先初始化了 Nacos 客户端,随后从 Nacos 中获取配置来动态调整我们的“欢迎信息”,以及将当前的服务实例注册到了 Nacos 服务端,使得其他服务也能轻易发现并与其通信。
FastAPI 篇 —— 模型服务的配置管理
如果你有以上的困惑,借助 nacos-sdk-python 的能力实现 AI 模型服务跟 nacos 的完美融合,服务注册发现与配置管理也会变得前所未有的简洁高效。我们来看下面的一个简单例子吧:
# 导入FastAPI库,用于构建API服务
from fastapi import FastAPI
from nacos import NacosClient
app = FastAPI()
# 设置Nacos服务器地址,请替换为实际的Nacos服务器地址
SERVER_ADDRESSES = "Your nacos server address"
# 设置Nacos命名空间ID,请替换为实际的命名空间ID
NAMESPACE = "Your nacos namespace"
# 设置Nacos用户名和密码,用于认证访问Nacos服务器
USERNAME = 'Your user name'
PASSWORD = 'Your password'
client = NacosClient(server_addresses=SERVER_ADDRESSES, namespace=NAMESPACE, username=USERNAME, password=PASSWORD,
log_level='INFO')
# 定义一个异步函数,在FastAPI应用启动时执行
async def startup_event():
# 在启动时创建一个任务来初始化配置
asyncio.create_task(init())
# 通过NacosClient获取配置,并存储在应用的状态(state)中,以便后续使用
async def load_config(data_id, group):
app.state = {'config_data': client.get_config(data_id=data_id, group=group)}
# 异步函数,用于初始化应用所需的各种配置和监听器
async def init():
data_id = 'test'
group = 'DEFAULT_GROUP'
await load_config(data_id, group)
def on_config_change(cfg):
# 当Nacos中的配置发生变化时,更新应用状态中的配置数据
app.state = {'config_data': cfg['content']}
client.add_config_watcher(data_id, group, cb=on_config_change)
client.add_naming_instance(service_name='my-flask-service', ip='localhost', port=8000, heartbeat_interval=5)
# 定义一个GET请求的路由,返回简单的欢迎信息及当前从Nacos获取的配置数据
def hello_world():
return f'Hello, World! Config from Nacos: {app.state["config_data"]}'
if __name__ == '__main__':
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
通过这个例子,你也可以继续加工,尝试把你的 AI 算法模型包装成服务对外暴露调用,同时一些算法模型参数通过 nacos 来作为配置化动态管理。
AI 大模型篇 —— AI 场景的配置管理加速器
基于动态 Promot 调整这个 case,这次我们来结合阿里云通义百炼实践一下,来看看 Nacos 可以在其中流程中扮演什么样的角色
# 定义一个名为NacosConfigManager的类,用于管理Nacos配置
class NacosConfigManager:
def __init__(self):
# 初始化方法,创建一个空字典用于缓存配置信息
self.config_cache = {}
def get_config(self, data_id, group="DEFAULT_GROUP", need_watch=False):
"""
获取配置,如果缓存中没有则从Nacos获取并缓存。
如果need_watch为True,则为该配置添加监听器以便在配置变化时自动更新。
"""
if data_id not in self.config_cache:
config = client.get_config(data_id=data_id, group=group)
self.config_cache[data_id] = config
if need_watch:
client.add_config_watcher(data_id, group, cb=self.on_config_change)
return self.config_cache[data_id]
def on_config_change(self, cfg):
self.config_cache[cfg['data_id']] = cfg['content']
config_manager = NacosConfigManager()
# 初始化异步函数
async def init():
group = 'DEFAULT_GROUP'
config_manager.get_config(promot_data_id, group, True)
config_manager.get_config(app_id_data_id, group)
config_manager.get_config(app_key_id, group)
def hello_world():
# 通过百炼Application.call方法来调用模型,传递从Nacos获取的配置参数
response = Application.call(app_id=config_manager.get_config(app_id_data_id),
prompt=config_manager.get_config(promot_data_id),
api_key=config_manager.get_config(app_key_id),
)
if response.status_code != HTTPStatus.OK:
print('request_id=%s, code=%s, message=%s\n' % (response.request_id, response.status_code, response.message))
else:
print('request_id=%s\n output=%s\n usage=%s\n' % (response.request_id, response.output, response.usage))
return response.output.text
可以看到在这个例子中,我们把 APP_KEY、APP_ID 这类参数都放在了 Nacos 中存储,同时经常需要调整的 promot 模板利用 Nacos 的动态配置下发能力来实现运营实时调整更新,非常容易实现类似 ABTest 的效果。
加入我们
Aliware
GitHub 仓库: 访问 nacos-sdk-python,查看文档、报告问题或贡献代码,共同构建更好的 Nacos Python 社区:https://github.com/nacos-group/nacos-sdk-python