当前位置: 首页 > article >正文

FastAPI 与微服务架构

1. 先理解“单体”与“微服务”想象一家全能餐厅一个厨房做所有菜炒菜、蒸菜、凉菜、甜点、结账、洗碗……所有员工在一个大空间里工作如果某个环节出问题比如洗碗机坏了整个餐厅可能都要暂停这就是单体架构一个程序一个代码库、一个进程包含了所有功能。现在想象美食广场每个档口独立拉面档口、披萨档口、奶茶档口、收银台独立拉面档口有自己的厨房、食材、员工一个档口坏了不影响隔壁档口继续卖这就是微服务架构把一个大型应用拆成多个小型独立服务每个服务专注做一件事各自运行、各自部署。2. 微服务的核心特点极简版单一职责每个服务只做一件明确的事比如“用户服务”只管理用户注册、登录“订单服务”只处理订单。独立部署修改订单服务不需要重新发布用户服务。独立数据每个服务有自己的数据库可以不同种类MySQL、Redis、MongoDB。轻量级通信服务之间通过 HTTP/HTTPS、gRPC 或消息队列互相调用。3. FastAPI 在微服务中的角色FastAPI 是构建微服务的绝佳工具因为它快性能接近 Node.js 和 Go适合高并发。自带异步async/await方便调用其他服务不会阻塞。自动生成 API 文档每个微服务都自动有/docs调试和协作方便。数据校验和序列化Pydantic 帮你保证服务之间传递的数据格式正确。依赖注入轻松复用认证、数据库会话等逻辑。简单说你用 FastAPI 写一个“用户服务”再写一个“订单服务”它们各自独立运行互相通过 HTTP 请求调用。4. 一个具体的例子电商微服务假设我们拆成三个服务服务名称职责FastAPI 入口用户服务注册、登录、查询用户信息http://user-service:8000商品服务商品增删改查、库存管理http://product-service:8001订单服务创建订单、查询订单http://order-service:80024.1 用户服务简化版# user_service/main.pyfromfastapiimportFastAPI appFastAPI()users_db{1:{name:张三,email:zhangexample.com}}app.get(/users/{user_id})asyncdefget_user(user_id:str):returnusers_db.get(user_id,{error:user not found})app.post(/users)asyncdefcreate_user(name:str,email:str):user_idstr(len(users_db)1)users_db[user_id]{name:name,email:email}return{user_id:user_id}4.2 订单服务需要调用用户服务# order_service/main.pyfromfastapiimportFastAPI,HTTPExceptionimporthttpx appFastAPI()orders[]app.post(/orders)asyncdefcreate_order(user_id:str,product:str):# 调用用户服务检查用户是否存在asyncwithhttpx.AsyncClient()asclient:respawaitclient.get(fhttp://user-service:8000/users/{user_id})ifresp.status_code!200:raiseHTTPException(400,用户不存在)order_idlen(orders)1orders.append({order_id:order_id,user_id:user_id,product:product})return{order_id:order_id,status:created}关键点订单服务不直接查数据库而是通过 HTTP 请求询问用户服务。两个服务完全独立。5. 服务之间怎么互相找到服务发现在小例子中我们写死了地址http://user-service:8000。但在真实生产环境中服务可能随时迁移 IP、增减实例。这时候就需要服务发现工具如 Consul、etcd、Nacos或简单的反向代理如 Nginx、Traefik。不过作为小白你先记住微服务之间通过网络通信你需要一种方式知道“用户服务现在在哪里”。6. 微服务带来的挑战只提一下不展开分布式事务下单需要扣库存、创建订单、扣钱跨服务很难保证原子性。调试困难一个请求可能经过 5 个服务排查问题需要链路追踪如 Jaeger。部署复杂需要容器编排Kubernetes来管理几十个服务。数据一致性每个服务有自己的数据库数据同步需要最终一致性。但是不要怕对于很多中小项目先写成一个 FastAPI 单体等真正遇到瓶颈再拆微服务。不要为了“微服务”而微服务。7. 总结FastAPI 微服务的正确姿势前期用 FastAPI 写一个完整单体应用快速验证业务。中期把相对独立的模块如用户、支付、通知抽成独立的 FastAPI 服务。通信使用httpx异步请求、或 gRPC。部署每个服务打成一个 Docker 镜像用 Docker Compose 或 Kubernetes 管理。FastAPI 的优秀设计异步、类型提示、OpenAPI 自动生成让你在拆分微服务时依然保持高效开发。8. “走通感觉”的迷你实验在你自己的电脑上开两个终端。终端1 – 用户服务保存为user.pyfromfastapiimportFastAPI appFastAPI()app.get(/me)asyncdefme():return{name:Alice,id:1}运行uvicorn user:app --port 8000终端2 – 订单服务保存为order.pyfromfastapiimportFastAPIimporthttpx appFastAPI()app.get(/order)asyncdefcreate_order():asyncwithhttpx.AsyncClient()asclient:userawaitclient.get(http://localhost:8000/me)return{user:user.json(),item:book}运行uvicorn order:app --port 8001访问http://localhost:8001/order你会看到订单服务成功调用了用户服务。9.Uvicorn 和微服务架构Uvicorn 是什么类型ASGI 服务器异步网关服务器接口。作用接收网络请求比如来自浏览器的 HTTP 请求然后把请求交给你的 FastAPI 应用处理最后把响应返回给客户端。类比Uvicorn 就像餐厅的“服务员”——负责接收顾客点单、传给厨房、再把菜端给顾客。它不决定餐厅是做大厨全包的“单体餐厅”还是“美食广场”微服务。微服务架构是什么类型一种设计模式指导你如何构建软件系统。核心思想把一个大型应用拆成多个独立运行、独立部署、拥有独立数据库的小服务。类比把餐厅改成美食广场每个档口独立经营、互相通过传菜窗网络调用协作。这个“美食广场”的设计蓝图就是微服务架构。微服务架构设计/架构层“我们系统采用微服务架构有用户服务、订单服务、商品服务”。Uvicorn实现/运行层 “每个微服务独立运行用 Uvicorn 启动 FastAPI 实例”。你可以用 Uvicorn 运行一个单体 FastAPI 应用也可以用 Uvicorn 分别运行多个微服务。Uvicorn 只是工具不决定架构。uvicorn 就是让 FastAPI 能够“听到网络上的敲门声”——也就是监听 HTTP 端口。Uvicorn 负责监听端口比如 8000、接收 HTTP 请求、解析请求、调用 FastAPI 应用、返回响应。FastAPI 本身定义了“当收到什么请求时执行什么代码”但它不会自己监听端口。

相关文章:

FastAPI 与微服务架构

1. 先理解“单体”与“微服务” 想象一家全能餐厅: 一个厨房做所有菜(炒菜、蒸菜、凉菜、甜点、结账、洗碗……)所有员工在一个大空间里工作如果某个环节出问题(比如洗碗机坏了),整个餐厅可能都要暂停 这就…...

当AI开始写代码,软件测试从业者如何保住饭碗并实现升维

一、AI重构测试生态:危机中的转机2026年,全球首款AI程序员Devin的诞生掀起技术海啸。头部互联网企业相继推行AI编程考核制度:微博要求全员交叉领域AI能力测试,昆仑万维实施AI编程末位淘汰,阿里更将token消耗量纳入晋升…...

研究型AI vs 工程型AI:两种截然不同的职业发展路径

在人工智能(AI)技术席卷全球的浪潮中,软件测试从业者正面临前所未有的职业转型机遇。AI不仅重塑了测试工具和方法,还开辟了全新的职业赛道:研究型AI与工程型AI。这两种路径虽同属AI领域,却在核心目标、技能…...

终极指南:如何在不破坏系统的情况下迁移C盘大文件到其他分区

终极指南:如何在不破坏系统的情况下迁移C盘大文件到其他分区 【免费下载链接】FreeMove Move directories without breaking shortcuts or installations 项目地址: https://gitcode.com/gh_mirrors/fr/FreeMove 你是否曾为C盘空间不足而烦恼?每次…...

5分钟搞定Switch手柄PC适配:BetterJoy终极指南

5分钟搞定Switch手柄PC适配:BetterJoy终极指南 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcode.com/gh_mirr…...

Spring Boot 专家级面试题库

格式:知识点原理 → 面试表达模板 → 追问应对一、自动配置原理(高频必考) Q1. Spring Boot 自动配置的原理是什么? 知识点讲解: 自动配置的核心链路分四步: SpringBootApplication└── EnableAutoConfig…...

Flash游戏重生指南:CefFlashBrowser让你的经典游戏永不消失

Flash游戏重生指南:CefFlashBrowser让你的经典游戏永不消失 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 在Flash技术正式退役后,无数经典网页游戏和互动内容面临…...

Windows Defender Remover:彻底掌控Windows安全组件的终极指南

Windows Defender Remover:彻底掌控Windows安全组件的终极指南 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mir…...

BetterJoy完整指南:轻松解决Switch控制器PC连接问题

BetterJoy完整指南:轻松解决Switch控制器PC连接问题 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcode.com/gh…...

软注意力(softmax attention)机制

软注意力(softmax attention)机制是深度学习中注意力机制的核心主流形式,本质是模拟人类选择性认知的能力,通过计算输入信息的概率权重分布,对所有输入进行加权求和,实现“软性”聚焦——即不绝对抛弃任何输…...

微信数据提取工具的法律边界:为什么开源项目需要合规审查

微信数据提取工具的法律边界:为什么开源项目需要合规审查 【免费下载链接】PyWxDump 删库 项目地址: https://gitcode.com/GitHub_Trending/py/PyWxDump 在数字时代,个人数据安全与隐私保护已成为技术开发不可忽视的重要议题。最近,一…...

输入法词库自由迁徙:深蓝词库转换的技术突破与实践指南

输入法词库自由迁徙:深蓝词库转换的技术突破与实践指南 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 在数字化输入时代,输入法已成为我们与…...

别再被FileExistsError坑了!Python os.mkdir() 创建文件夹的3个实用技巧(附YOLO数据转换实战)

别再被FileExistsError坑了!Python os.mkdir() 创建文件夹的3个实用技巧(附YOLO数据转换实战) 在计算机视觉项目的开发过程中,数据预处理环节往往占据大量时间。特别是当我们需要将标注数据从Labelme格式转换为YOLO格式时&#x…...

多智能体任务编排框架:从原理到实践,构建复杂AI工作流

1. 项目概述:一个面向复杂任务编排的多智能体管理器最近在折腾AI智能体应用开发的朋友,可能都遇到过类似的困境:单个智能体(Agent)能力有限,处理稍微复杂一点的业务流程,比如一个完整的客户服务…...

真空度多少最合适?真空脱泡搅拌机参数解析

真空脱泡搅拌机真空度:核心参数与工艺应用全解析在电子封装、新能源材料、精密化工、复合材料等高端制造领域,壹壹真空脱泡搅拌机已成为物料均质混合与气泡去除的核心设备。而真空度作为设备的核心技术指标,直接决定脱泡彻底性、物料处理质量…...

NVIDIA Nemotron Nano V2 VL架构与4bit量化技术解析

1. NVIDIA Nemotron Nano V2 VL架构解析NVIDIA Nemotron Nano V2 VL作为当前最先进的视觉语言模型之一,其架构设计体现了多模态融合的前沿思想。该模型基于12B参数的Nemotron-Nano-V2 LLM构建,通过创新的跨模态注意力机制实现视觉与语言特征的深度融合。…...

别再让服务器‘卡脖子’了!手把手教你用numactl优化NUMA架构下的应用性能

别再让服务器“卡脖子”!NUMA架构性能调优实战指南 凌晨三点,数据库突然响应延迟飙升到800毫秒,监控大屏一片血红——这可能是每个运维工程师的噩梦。当你的应用在高配服务器上表现反常时,NUMA架构的内存访问问题很可能是罪魁祸首…...

3分钟掌握Blender MMD Tools:从零开始导入MMD模型的终极指南

3分钟掌握Blender MMD Tools:从零开始导入MMD模型的终极指南 【免费下载链接】blender_mmd_tools MMD Tools is a blender addon for importing/exporting Models and Motions of MikuMikuDance. 项目地址: https://gitcode.com/gh_mirrors/bl/blender_mmd_tools …...

中国DevOps平台选型全景报告:技术适配与效能跃升的关键抉择

随着数字化转型进入深水区,中国企业DevOps平台选型正面临前所未有的复杂性挑战。2026年的技术环境中,基础功能完备性已不再是唯一考量,本土化适配深度、安全可控能力与行业特性匹配度正成为企业技术决策的关键维度。这份报告通过深入分析主流…...

别再让PlatformNotSupportedException搞垮你的跨平台.NET应用:5个实战避坑技巧

别再让PlatformNotSupportedException搞垮你的跨平台.NET应用:5个实战避坑技巧 当你的.NET应用在Linux服务器上突然崩溃,或者在macOS开发机上抛出神秘异常时,PlatformNotSupportedException往往是最令人头疼的"刺客"。这个看似简单…...

如何5分钟实现GitHub界面完整汉化:开发者必备的高效本地化方案

如何5分钟实现GitHub界面完整汉化:开发者必备的高效本地化方案 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 对于中文开…...

掌握本地化AI视频字幕提取:隐私安全与高效并重的终极解决方案

掌握本地化AI视频字幕提取:隐私安全与高效并重的终极解决方案 【免费下载链接】video-subtitle-extractor 视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含字幕区域检测、…...

嵌入式人脸识别:Person Sensor模块开发实战

1. 项目概述在嵌入式开发中集成人脸识别功能一直是个令人头疼的问题。传统方案要么需要昂贵的专用硬件,要么得从零开始训练机器学习模型,对开发者门槛要求较高。最近我在一个智能门铃项目中尝试了Useful Sensors公司推出的Person Sensor模块,…...

扩散模型优化:GAS框架提升生成质量与效率

1. 项目背景与核心价值在生成式模型的迭代优化过程中,扩散模型因其出色的生成质量成为当前研究热点。传统扩散模型通过模拟连续时间域中的随机微分方程(SDE)或常微分方程(ODE)来实现数据分布转换,但面临两个…...

ADE-CoT图像编辑优化:细节增强与上下文感知技术解析

1. 图像编辑优化策略概述在数字图像处理领域,编辑优化一直是核心挑战。传统方法往往面临效率与质量难以兼顾的困境,要么处理速度慢,要么输出效果不理想。ADE-CoT(Adaptive Detail Enhancement with Context-aware Optimization&am…...

Modbus RTU通信避坑指南:从零封装你的CRC校验函数(附可直接调用的C代码)

Modbus RTU通信避坑指南:从零封装你的CRC校验函数(附可直接调用的C代码) 当RS-485硬件调试完成后,真正的挑战才刚刚开始。我曾在一个工业自动化项目中,花了整整三天时间排查为什么Modbus RTU通信总是失败——硬件线路正…...

解析之C++的列表初始化语法

聚合初始化先从std::array的内部实现说起。为了让std::array表现得像原生数组,C中的std::array与其他STL容器有很大区别——std::array没有定义任何构造函数,而且所有内部数据成员都是public的。这使得std::array成为一个聚合(aggregate&…...

FakeLocation:Android应用级虚拟定位完全指南

FakeLocation:Android应用级虚拟定位完全指南 【免费下载链接】FakeLocation Xposed module to mock locations per app. 项目地址: https://gitcode.com/gh_mirrors/fak/FakeLocation 在Android开发测试和隐私保护领域,精准的位置模拟一直是一个…...

Fast-GitHub终极指南:一键解决国内GitHub访问慢的免费浏览器插件

Fast-GitHub终极指南:一键解决国内GitHub访问慢的免费浏览器插件 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 对于国…...

Hermes Agent 源代码解析(一):根目录探秘,看懂 AI 代理的「公司级」架构设计

目录 Hermes Agent 源代码解析(一):根目录探秘,看懂 AI 代理的「公司级」架构设计 一、先搞懂:Hermes Agent 到底是什么? 二、可视化总览:Hermes Agent 公司架构图 三、根目录全解析&#x…...