用 Python 也能做微服务?
一、Python 和微服务,是敌是友?
Python 因其极强的开发效率与生态,一直是数据处理、AI、Web 开发的主力选手。但在“微服务”这个领域,它一直处于边缘地带:
- 服务注册 / 发现?🤷♂️ 没有统一规范
- 负载均衡?熔断?限流?🤔 自己造轮子?
- 与 Java/Go 微服务联动?🧱 很难
Dubbo Python SDK 正是填补这块生态空白的利器。
二、Dubbo Python SDK 是什么?
由 Apache Dubbo 官方提供的 Python 实现,Dubbo Python SDK 致力于将 Python 编写的服务、客户端纳入 Dubbo 微服务体系。
核心特性:
| 能力 | 描述 |
|---|---|
| 协议支持 | Triple(gRPC-over-HTTP2),跨语言无障碍 |
| 服务注册发现 | 支持 Nacos、Zookeeper |
| 服务治理 | 内建负载均衡、熔断、重试、限流等策略 |
| 安全能力 | 支持 TLS 双向认证、Token 鉴权 |
| 可观测性 | OpenTelemetry、Prometheus 等追踪/监控 |
| 简单易用 | Pythonic 编码风格,快速开发体验 |
三、完整实战:从 0 写一个 Dubbo 服务
步骤一:安装 SDK
pip install dubbo3
或推荐使用 virtualenv 管理隔离环境。
步骤二:定义服务接口(Protobuf)
文件名:greeter.proto
syntax = "proto3";service Greeter {rpc SayHello (HelloRequest) returns (HelloReply);
}message HelloRequest {string name = 1;
}message HelloReply {string message = 1;
}
生成代码:
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. greeter.proto
步骤三:服务实现 + 配置
from dubbo3 import DubboServer
from generated.greeter_pb2 import HelloReply
from generated.greeter_pb2_grpc import GreeterServicerclass GreeterService(GreeterServicer):async def SayHello(self, request, context):return HelloReply(message=f"你好,{request.name}!来自 Python Dubbo 服务")# 启动服务
DubboServer().register_service(GreeterService()).start()
YAML 配置(推荐):
application:name: python-dubbo-service
registries:nacos:protocol: nacosaddress: 127.0.0.1:8848
protocols:triple:port: 50051
四、作为消费者调用远程 Dubbo 服务
Python 也可以作为 Consumer 调用 Java 或 Go 提供的 Dubbo 服务。
from dubbo3 import DubboClientclient = DubboClient(service='com.foo.Greeter', interface='Greeter', registry='nacos://127.0.0.1:8848')resp = await client.SayHello({'name': 'Python'})
print(resp['message'])
你甚至可以像请求 HTTP 一样调用 RPC 接口,轻松构建跨语言微服务。
五、服务治理参数配置详解
YAML 支持丰富的配置选项,下面是部分治理功能配置:
consumer:request_timeout: 3000retries: 2loadbalance: round_robinfilter:- auth- metrics
provider:max_connections: 100circuit_breaker:enabled: truefailure_rate_threshold: 50slow_call_rate_threshold: 100
| 参数 | 含义 |
|---|---|
| retries | 失败重试次数 |
| request_timeout | 单次调用超时时间 |
| loadbalance | 负载均衡策略(round_robin, random) |
| circuit_breaker | 熔断器配置 |
| filter | 认证、监控、日志等中间件 |
六、项目结构推荐(大型项目)
dubbo-python-service/
├── proto/ # protobuf 定义
│ └── greeter.proto
├── generated/ # gRPC 自动生成文件
├── services/ # 服务实现代码
│ └── greeter.py
├── config.yaml # 服务配置
├── server.py # 启动入口
├── requirements.txt
└── README.md
⚠️ 建议使用 async/await 协程结构,避免阻塞问题。
七、部署建议与云原生接入
- ✅ 可用 Docker 打包部署,镜像体积 <100MB
- ✅ 支持 Kubernetes 部署 + Service 发现
- ✅ 与 Pixiu 网关配合做统一接入(暴露为 HTTP/REST 接口)
- ✅ 可与 Java Dubbo 服务通过 Triple 无缝通信
八、与 FastAPI / Flask 集成建议
虽然 SDK 是独立启动的 gRPC 服务,但你可以用 FastAPI/Flask 实现 Hybrid 结构:

这样可以既保留 HTTP 接口,又享受 Dubbo 的注册治理能力。
九、常见问题 FAQ
| 问题 | 解答 |
|---|---|
| Q1:不注册中心可以直接调用吗? | 可以,设置直连地址即可(direct_url) |
| Q2:支持 TLS 吗? | 支持,配置 cert 和 key 即可 |
| Q3:怎么调试? | SDK 支持服务日志输出,可配合 grpcurl 工具测试 |
| Q4:支持服务网关接入吗? | 可通过 Pixiu 网关或 envoy 转发 |
十、总结
Dubbo Python SDK 并不是另起炉灶,而是让 Python 真正“进入微服务核心体系”的钥匙:
- 不再是边缘脚本或 AI 推理单元
- 可以参与统一的服务治理、注册中心、限流熔断、链路追踪
- 与 Java / Go / Rust / Node.js 等语言并肩作战
在微服务架构越来越多样化的今天,Dubbo Python SDK 为 Python 提供了一个生产级通道。
相关文章:
用 Python 也能做微服务?
一、Python 和微服务,是敌是友? Python 因其极强的开发效率与生态,一直是数据处理、AI、Web 开发的主力选手。但在“微服务”这个领域,它一直处于边缘地带: 服务注册 / 发现?🤷♂️ 没有统一…...
Android 13系统定制实战:基于系统属性的音量键动态屏蔽方案解析
1. 需求背景与实现原理 在Android 13系统定制化开发中,需根据设备场景动态屏蔽音量键(VOLUME_UP/VOLUME_DOWN)功能。其核心诉求是通过系统属性(persist.sys.roco.volumekey.enable)控制音量键的响应逻辑,确…...
Maya基本操作
基本操作 按住ALT键,左键旋转视角,中键平移视角,右键放大缩小视角。 按空格键切换4格视图。 导入FBX格式文件后,无贴图显示。 按6键开启。着色纹理显示 坐标轴相关 修改菜单-左键最上面的虚线。固定修改选项窗口。 选中物体…...
SQL Server Management Studio(SSMS)安装教程
目录 一、SSMS的下载 二、SSMS 的安装 三、连接服务器 四、卸载 SSMS 一、SSMS的下载 1.进入 SQL Server Management Studio 官方下载页面:SQL Server Management Studio点击进入下载页面 2.点击链接开始下载,浏览器右上角会显示下载进度;…...
若依前端框架增删改查
1.下拉列表根据数据库加载 这个是用来查询框 绑定了 change 事件来处理站点选择变化后的查询逻辑。 <el-form-item label"站点选择" prop"stationId" v-has-permi"[ch:m:y]"><el-select v-model"queryParams.stationId" pl…...
LiteratureReading:[2023] GPT-4: Technical Report
文章目录 一、文献简明(zero)二、快速预览(first)1、标题分析2、作者介绍3、引用数4、摘要分析(1)翻译(2)分析 5、总结分析(1)翻译(2)…...
区块链交易
文章目录 交易准备合约和代码逻辑合约compile.jsindex.js 运行 交易 项目来自https://github.com/Dapp-Learning-DAO/Dapp-Learning/blob/main/basic/02-web3js-transaction/README-cn.md 本项目包含对交易进行签名,发送,接收交易回执,验证…...
Walrus 经济模型 101
本文作者:Steve_4P,文章仅代表作者观点。 要点总结 2025 年 3 月 20 日,Walrus 基金会宣布成功融资 约 1.4 亿美元,投资方包括 Standard Crypto、a16z 等机构。Walrus 当前估值约 20 亿美元,其中 7% 代币供应量分配给…...
SpringCould微服务架构之Docker(1)
项目中微服务比较多的时候,一个一个手动的部署太麻烦了,所以就需要用到Docker。 项目部署中的问题: Docker是一种快速交付应用、运行应用的技术。...
mac丝滑安装Windows操作系统【丝滑简单免费】
mac丝滑安装Windows操作系统【丝滑&简单&免费】 记录mac丝滑安装windows系统1、安装免费版 VMware fusion 132、安装Windows镜像文件3、跳过联网安装(完成1后将2拖入1 点点点 即可来到3的环节)4、 安装vmware 工具【非常重要,涉及联网…...
系统与网络安全------网络应用基础(2)
资料整理于网络资料、书本资料、AI,仅供个人学习参考。 交换机 认识交换机 交换机,Switch 用户将多台计算机/交换机连接在一起,组建网络 交换机负责为其中任意两台计算机提供独享线路进行通信 非网管型交换机 即插即用交换机 即插即用&…...
eclipse [jvm memory monitor] SHOW_MEMORY_MONITOR=true
eclipse虚拟机内存监控设置SHOW_MEMORY_MONITORtrue D:\eclipse-jee-oxygen-2-win32-x86_64\workspace\.metadata\.plugins\org.eclipse.core.runtime\.settings org.eclipse.ui.prefs (文件比较多,别找错了) SHOW_MEMORY_MONITORtrue 重启 -xms 1024…...
【论文笔记】生成对抗网络 GAN
GAN 2014 年,Ian Goodfellow 等人提出生成对抗网络(Generative Adversarial Networks),GAN 的出现是划时代的,虽然目前主流的图像/视频生成模型是扩散模型(Diffusion Models)的天下,…...
《鸟哥的Linux私房菜基础篇》---5 vim 程序编辑器
目录 一、vim程序编辑器的简介 二、命令模式快捷键(默认模式) 1、光标移动 2、编辑操作 3、搜索与替换 三、插入模式快捷键 四、底行模式快捷键(按:进入) 五、高级技巧 1、分屏操作 2、多文件编辑 3、可视化…...
spring+k8s 功能说明
以下是一个结合 Kubernetes(k8s) 和 Spring Boot 的完整实例,涵盖应用开发、容器化、部署到 Kubernetes 集群的全流程。 1. 创建 Spring Boot 应用 1.1 项目初始化 使用 Spring Initializr 生成一个简单的 REST API 项目: • 依…...
Enovia许可分析的自动化解决方案
随着企业产品生命周期管理(PLM)需求的不断演变,Enovia许可分析已成为确保资源优化和合规性的关键环节。然而,传统的手动许可分析方法往往效率低下、易出错,并且难以应对大规模数据。为了解决这一挑战,Enovi…...
【Agent】Dify Docker 安装问题 INTERNAL SERVER ERROR
总结:建议大家选择稳定版本的分支,直接拉取 master 分支,可能出现一下后面更新代码导致缺失一些环境内容。 启动报错 一直停留在 INSTALL 界面 我是通过 Docker 进行安装的,由于项目开发者不严谨导致,遇到一个奇怪的…...
【学Rust写CAD】11 2D CAD可用rust库
使用 Rust 开发 2D CAD 应用时,选择合适的库是关键。以下是一些适合用于 2D CAD 开发的 Rust 库和工具,涵盖图形渲染、几何计算、用户界面等方面: 图形渲染 lyon 简介: lyon 是一个用于 2D 图形渲染的 Rust 库,支持路径填充、描边…...
怎样基于安卓部署deepseek?
要在安卓设备上部署DeepSeek(或者类似的深度学习模型),您需要将模型从开发环境迁移到安卓应用中。具体步骤涉及将深度学习模型转化为安卓设备能够运行的格式,并配置安卓应用以支持这种模型的运行。以下是一个简化的步骤指南&#…...
【Excel使用技巧】某列保留固定字段或内容
目录 ✅ 方法一:使用 Excel 公式提取 body 部分 🔍 解释: ✅ 方法二:批量处理整列数据 🚨 注意事项 🚨 处理效果 我想保留Excel某一列的固定内容,比如原内容是: thread entry i…...
a-date-picker 格式化日期格式 YYYY-MM-DD HH:mm:ss
<template><a-range-pickerv-model:value"dateRange":show-time"{ format: HH:mm:ss, // 时间部分格式defaultValue: [moment(00:00:00, HH:mm:ss), moment(23:59:59, HH:mm:ss)] // 默认时间范围}"format"YYYY-MM-DD HH:mm:ss" // 整体…...
vue3,element-plus 表格搜索过滤数据
1、表格数据 // 表格数据 import type { User } from "/interface"; const tableData ref<User[]>([]); 2、 表格搜索过滤数据 // 搜索内容 const search ref(""); // 表格过滤数据 const tableFilterData computed(() >tableData.value.fi…...
WordPress 性能优化技术指南:打造快速加载的网站
WordPress 是全球最流行的内容管理系统(CMS),以其灵活性和易用性深受用户喜爱。然而,随着网站内容和功能的增加,加载速度可能会变慢,影响用户体验和搜索引擎排名。在2025年的数字化环境中,网站性…...
vue中上传接口file表单提交二进制文件流
1.使用elementui上传组件 要做一个选择文件后,先不上传,等最后点击确定后,把file二进制流及附加参数一起提交上去。 首先使用elementui中的上传组件,设置auto-uploadfalse,也就是选择文件后不立刻上传。 <el-uplo…...
【学习笔记】卷积网络简介及原理探析
作者选择了由 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 三位大佬撰写的《Deep Learning》(人工智能领域的经典教程,深度学习领域研究生必读教材),开始深度学习领域学习,深入全面的理解深度学习的理论知识。 之前的文章参考下面的链接…...
element-plus中Cascader级联选择器组件的使用
目录 一.基本使用 二.进阶使用 1.如何获取最后一级选项的值? 2.如何让级联选择器的输入框只展示最后一级? 三.实战 1.场景描述 2.实现步骤 ①设计后端返回值Vo ②编写controller ③编写service ④编写mapper层 ⑤在前端,通过发送…...
计算机网络的分类——按照按拓扑结构分类
计算机的拓扑结构是引用拓扑学中研究和大小、形状无关的点、线关系的方法,将网络中的计算机和通信设备抽象为一个点,把传输介质抽象成一条线,由点和线组成的几何图形就是计算机网络的拓扑结构。计算机网络的拓扑结构主要由通信子网决定&#…...
【华为Pura先锋盛典】华为Pura X“阔折叠”手机发布:首次全面搭载HarmonyOS 5
文章目录 前言一、阔感体验,大有不同二、鸿蒙AI,大有智慧三、便携出行,大有不同四、首款全面搭载 HarmonyOS 5 的手机五、卓越性能,可靠安心六、红枫影像,大放光彩预热:鸿蒙电脑HarmonyOS 5 升级计划小结 前…...
MQ,RabbitMQ,MQ的好处,RabbitMQ的原理和核心组件,工作模式
1.MQ MQ全称 Message Queue(消息队列),是在消息的传输过程中 保存消息的容器。它是应用程序和应用程序之间的通信方法 1.1 为什么使用MQ 在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理࿰…...
ETL:数据清洗、规范化和聚合的重要性
在当今这个数据呈爆炸式增长的时代,数据已成为企业最为宝贵的资产之一。然而,数据的海量增长也伴随着诸多问题,如数据来源多样、结构复杂以及质量问题等,这些问题严重阻碍了数据的有效处理与深度分析。在此背景下,ETL&…...
