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

《Python实战进阶》No 11:微服务架构设计与 Python 实现

第11集:微服务架构设计与 Python 实现

2025年3月3日更新了代码和微服务运行后的系统返回信息截图,所有代码在 python3.11.5虚拟环境下运行通过。

微服务架构通过将复杂应用拆分为独立部署的小型服务,显著提升了系统的可扩展性和维护性。本集将结合 Python 生态工具(如 Flask、Nameko 和 Docker),从架构设计到代码实现,完整演示如何构建一个微服务系统。


在这里插入图片描述

一、微服务核心概念与设计原则
  1. 核心思想

    • 单一职责:每个服务聚焦一个业务能力(如用户管理、订单处理)。
    • 独立部署:服务可独立开发、测试和部署,降低耦合性。
    • 轻量通信:通过 REST API 或消息队列(如 RabbitMQ)实现服务间通信。
  2. 设计挑战

    • 服务发现、分布式链路追踪、数据一致性等问题需通过工具解决。

二、架构图与组件说明

在这里插入图片描述

(架构图,包含以下组件)

  1. API 网关:统一入口,路由请求到对应服务(如使用 Flask 构建)。
  2. 服务注册中心:管理服务实例地址(如 Consul)。
  3. 用户服务:处理用户注册/登录(Flask + SQLAlchemy)。
  4. 订单服务:管理订单逻辑(Flask + Redis)。
  5. 异步任务队列:处理耗时操作(如 Celery)。

三、代码案例:用户服务与订单服务

1. 项目结构

microservices-demo/
├── user-service/        # 用户服务(Flask)
│   ├── app_user.py
│   └── requirements.txt
├── order-service/       # 订单服务(Flask)
│   ├── app_order.py
│   └── requirements.txt
└── docker-compose.yml   # 容器编排(测试微服务可以通过cmd直接测试,不一定要安装Docker,Docker主要用于自动化部署和服务编排比较方便)

运行 python app_user.py后,会在根目录下自动新建一个var文件夹,
里面存放自动生成的 users.db数据库。
具体目录为:

microservices-demo/
├── var/  
│   ├── /app_user-instance
│       └── users.db

2. 用户服务实现

# user-service/app_user.py
from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
db = SQLAlchemy(app)class User(db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(80), unique=True)password = db.Column(db.String(120))@app.route('/register', methods=['POST'])
def register():data = request.jsonif not data or 'username' not in data or 'password' not in data:return jsonify({"message": "Bad Request: Missing username or password"}), 400  # Handle missing data# Check if the username already existsexisting_user = User.query.filter_by(username=data['username']).first()if existing_user:return jsonify({"message": "Username already exists"}), 409  # Conflict erroruser = User(username=data['username'], password=data['password'])db.session.add(user)db.session.commit()return jsonify({"message": "User created"}), 201@app.route('/validate_user/<int:user_id>', methods=['GET'])
def validate_user(user_id):with db.session() as session:user = session.get(User, user_id)if user:return jsonify({"message": "User is valid"}), 200else:return jsonify({"error": "User not found"}), 404if __name__ == '__main__':with app.app_context():  # Create an application contextdb.create_all()  # Now this will work within the contextapp.run(port=5000)

在cmd运行 python app_user.py:

 * Serving Flask app 'app_user'* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.* Running on http://127.0.0.1:5000
Press CTRL+C to quit

新开一个cmd测试微服务是否运行:
(注意:以下是windows CMD环境,如果是linux或MacOS, -d参数的双引号不需要转义符)

curl -X POST -H "Content-Type: application/json" -d "{\"username\":\"alice\",\"password\":\"pass123\"}" http://localhost:5000/register

系统返回:

{"message":"User created"}

表明关于用户创建的微服务创建并运行成功响应。

3. 订单服务实现

# order-service/app_order.py
from flask import Flask, jsonify, request
import requestsapp = Flask(__name__)# 模拟订单存储
orders = []@app.route('/create_order', methods=['POST'])
def create_order():# 调用用户服务验证用户身份user_id = request.json['user_id']response = requests.get(f'http://localhost:5000/validate_user/{user_id}')   if response.status_code != 200:return jsonify({"error": "Invalid user"}), 401# 创建订单逻辑orders.append({"user_id": user_id, "items": request.json['items']})print(orders)return jsonify({"message": "Order created"}), 201if __name__ == '__main__':app.run(port=5001)

**注意不要关闭 app_user.py 服务程序,因为 app_order.py 需要调用用户信息生成订单信息。
在新的 cmd 窗口运行 python app_order.py , 注意要先启动虚拟环境,同一个虚拟环境可以在多个cmd 窗口同时激活.

在cmd运行 python app_order.py:

 * Serving Flask app 'app_order'* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.* Running on http://127.0.0.1:5001
Press CTRL+C to quit

在测试用的 cmd 窗口 提交订单请求语句:

curl -X POST -H "Content-Type: application/json" -d "{\"user_id\":2,\"items\":[\"item1\"]}" http://localh
ost:5001/create_order

测试窗口返回:

{"message":"Order created"}

5001 端口服务返回打印的订单信息:

[{'user_id': 2, 'items': ['item1']}, {'user_id': 2, 'items': ['item1']}]

4. 服务通信与容器化(不通过Docker部署也可以实现微服务,但是Docker作为微服务的技术实现比较方便高效,推荐使用)

编写 Dockerfile
在每个服务目录中创建 Dockerfile:

# user-service/Dockerfile
FROM python:3.11-slim  # 使用轻量级 Python 镜像 <button class="citation-flag" data-index="4">
WORKDIR /app_user
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt  # 安装依赖 <button class="citation-flag" data-index="9">
COPY . .
CMD ["python", "app_user.py"]
# order-service/Dockerfile
FROM python:3.11-slim
WORKDIR /app_order
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt  # <button class="citation-flag" data-index="4"><button class="citation-flag" data-index="9">
COPY . .
CMD ["python", "app_order.py"]

通过 Docker Compose 编排服务(docker-compose.yml):

version: '3'
services:user-service:build: ./user-serviceports:- "5000:5000"networks:- microservices-netorder-service:build: ./order-serviceports:- "5001:5001"networks:- microservices-netdepends_on:- user-servicenetworks:microservices-net:driver: bridge

四、关键实现细节
  1. 服务发现与负载均衡
    使用 Consul 或 Kubernetes 实现动态服务发现。
  2. 异步任务处理
    通过 Celery + RabbitMQ 处理耗时操作(如发送邮件)。
  3. 日志与监控
    集成 ELK Stack(Elasticsearch, Logstash, Kibana)集中管理日志。

五、测试与验证
  1. 启动服务
    docker-compose up --build
    
  2. 测试用户注册
    curl -X POST -H "Content-Type: application/json" -d "{\"username\":\"alice\",\"password\":\"pass123\"}" http://localhost:5000/register
    
  3. 创建订单
    curl -X POST -H "Content-Type: application/json" -d "{\"user_id\":1,\"items\":[\"item1\"]}" http://localhost:5001/create_order
    

六、总结与最佳实践
  • 优势:独立部署、技术栈灵活、易扩展。
  • 挑战:分布式复杂性、数据一致性需额外设计。
  • 推荐工具链
    • 同步通信:Flask + Requests
    • 异步通信:Nameko + RabbitMQ
    • 容器化:Docker + Kubernetes

七、扩展阅读
  • [Python 微服务通信机制设计 - CSDN
  • 容器化部署实践:Docker 与 Kubernetes
  • 微服务监控体系构建

下一集将深入讲解 Pandas 的高效数据清洗技巧,包括处理缺失值、多表合并与性能优化。

相关文章:

《Python实战进阶》No 11:微服务架构设计与 Python 实现

第11集&#xff1a;微服务架构设计与 Python 实现 2025年3月3日更新了代码和微服务运行后的系统返回信息截图&#xff0c;所有代码在 python3.11.5虚拟环境下运行通过。 微服务架构通过将复杂应用拆分为独立部署的小型服务&#xff0c;显著提升了系统的可扩展性和维护性。本集…...

电商平台项目需求文档(精简版)

以下是电商平台项目需求文档样例&#xff08;精简版&#xff09;&#xff0c;包含核心功能模块和技术实现要求&#xff1a; 电商平台项目需求文档 一、项目概述 项目名称&#xff1a;ECP-全栈电商平台&#xff08;ECP - E-Commerce Platform&#xff09; 技术定位&#xff1a…...

Android15 Camera HAL Android.bp中引用Android.mk编译的libB.so

背景描述 Android15 Camera HAL使用Android.bp脚本来构建系统。假设Camera HAL中引用了另外一个HAL实现的so &#xff08;例如VPU HAL&#xff09;&#xff0c; 恰巧被引用的这个VPU HAL so是用Android.mk构建的&#xff0c;那Camera HAL Android.bp在直接引用这个Android.mk编…...

P8720 [蓝桥杯 2020 省 B2] 平面切分--set、pair

P8720 [蓝桥杯 2020 省 B2] 平面切分--set、pair 题目 分析一、pair1.1pair与vector的区别1.2 两者使用场景两者组合使用 二、set2.1核心特点2.2set的基本操作2.3 set vs unordered_set示例&#xff1a;统计唯一单词数代码 题目 分析 大佬写的很明白&#xff0c;看这儿 我讲讲…...

postgresql源码学习(60)—— VFD的作用及机制

首先VFD是Virtual File Descriptor&#xff0c;即虚拟文件描述符&#xff0c;既然是虚拟的&#xff0c;一定先有物理的。 一、 物理文件描述符&#xff08;File Descriptor, FD&#xff09; 1. 什么是 FD 它是操作系统提供给用户程序访问和操作文件或其他 I/O 资源的抽象接口…...

【CSS—前端快速入门】CSS 选择器

CSS 1. CSS介绍 1.1 什么是CSS? CSS(Cascading Style Sheet)&#xff0c;层叠样式表&#xff0c;用于控制页面的样式&#xff1b; CSS 能够对网页中元素位置的排版进行像素级精确控制&#xff0c;实现美化页面的效果&#xff1b;能够做到页面的样式和 结构分离&#xff1b; 1…...

Linux安装jdk,node,mysql,redis

准备工作&#xff1a; 1.安装VMware软件&#xff0c;下载CentOs7镜像文件&#xff0c;在VMware安装CentOs7 2.宿主机安装Xshell用来操作linux 3. .宿主机安装Xftp用来在宿主机和虚拟机的linux传输文件 案例1&#xff1a;在 /home/soft文件夹解压缩jdk17&#xff0c;并配置环…...

深度求索(DeepSeek)的AI革命:NLP、CV与智能应用的技术跃迁

Deepseek官网&#xff1a;DeepSeek 引言&#xff1a;AI技术浪潮中的深度求索 近年来&#xff0c;人工智能技术以指数级速度重塑全球产业格局。在这场技术革命中&#xff0c;深度求索&#xff08;DeepSeek&#xff09;凭借其前沿的算法研究、高效的工程化能力以及对垂直场景的…...

Minio搭建并在SpringBoot中使用完成用户头像的上传

Minio使用搭建并上传用户头像到服务器操作,学习笔记 Minio介绍 minio官网 MinIO是一个开源的分布式对象存储服务器&#xff0c;支持S3协议并且可以在多节点上实现数据的高可用和容错。它采用Go语言开发&#xff0c;拥有轻量级、高性能、易部署等特点&#xff0c;并且可以自由…...

【鸿蒙Next】 测试包 签名、打包、安装 整体过程记录

签名打包记录&#xff1a; HarmonyOS应用签名、打Hap包、Hap调试包真机安装步骤 https://blog.csdn.net/qq_34462735/article/details/135226332 测试包真机安装方式二 DevEco Testing 鸿蒙应用示例&#xff1a;DevEco Testing 工具的常用功能及使用场景 https://blog.csd…...

阿里云 | 快速在网站上增加一个AI助手

创建智能体应用 如上所示&#xff0c;登录阿里云百炼人工智能业务控制台&#xff0c;创建智能体应用&#xff0c;智能体应用是一个agent&#xff0c;即提供个人或者企业的代理或中间件组件应用&#xff0c;对接阿里云大模型公共平台&#xff0c;为个人或者企业用户提供大模型应…...

Raspberry Pi边缘计算网关设计与LoRa通信实现

Raspberry Pi边缘计算网关设计与LoRa通信实现 摘要第一章 绪论1.1 研究背景1.2 研究现状1.3 论文结构 第二章 相关技术理论2.1 边缘计算体系架构2.2 LoRa通信技术2.3 Raspberry Pi硬件生态 第三章 系统架构设计3.1 硬件架构设计3.2 软件架构设计3.3 混合通信协议设计 第四章 硬…...

原型链与继承

#搞懂还是得自己动手# 原型链 function Person(name) { this.name name; } Person.prototype.sayName function() { console.log(this.name); };const p new Person("Alice"); 原型链关系图&#xff1a; 原型链&#xff1a;person->Person.prototype->O…...

动态规划 ─── 算法5

动态规划&#xff08;Dynamic Programming&#xff0c;简称 DP&#xff09;是一种用于解决复杂问题的算法设计技术&#xff0c;特别适用于具有重叠子问题和最优子结构性质的问题。动态规划通过将问题分解为更小的子问题&#xff0c;并存储子问题的解来避免重复计算&#xff0c;…...

博客系统--测试报告

博客系统--测试报告 项目背景项目功能功能测试①登录功能测试②发布博客功能测试③删除文章功能测试④功能测试总结&#xff1a; 自动化测试自动化脚本执行界面&#xff1a; 性能测试 本博文主要针对个人实现的项目《博客系统》去进行功能测试、自动化测试、性能测试&#xff0…...

【博资考4】网安学院-硕转博考试内容

【博资考4】硕转博考试内容 - 网络安全与基础理论 写在最前面一. **21年硕转博面试内容回顾**网络、逆向、操作系统、攻防、漏洞1. **网络安全常见攻击方式及其防范措施**1.1 **DDoS攻击&#xff08;分布式拒绝服务&#xff09;**1.2 **SQL注入攻击**1.3 **XSS攻击&#xff08;…...

GPT-4.5 怎么样?如何升级使用ChatGPTPlus/Pro? GPT-4.5设计目标是成为一款非推理型模型的巅峰之作

GPT-4.5 怎么样&#xff1f;如何升级使用ChatGPTPlus/Pro? GPT-4.5设计目标是成为一款非推理型模型的巅峰之作 今天我们来说说上午发布的GPT-4.5&#xff0c;接下来我们说说GPT4.5到底如何&#xff0c;有哪些功能&#xff1f;有哪些性能提升&#xff1f;怎么快速使用到GPT-4.…...

git命令学习记录

1. git reset 参数说明 git reset 是用来回退版本的&#xff0c;它可以添加三个参数&#xff0c;常用的使用格式是这样的&#xff1a;git reset [--hard | --soft | --mixed] 版本号 一般使用git修改文件并提交需要三步&#xff0c;第一步在文本编辑器中编辑文件&#xff0c;也…...

【HTML学习笔记基础篇】

HTML学习笔记基础篇 一、HTML概述1.1 什么是HTML1.2 HTML文档的基本结构 二、HTML基础标签2.1 标题标签2.2 段落标签2.3 换行标签2.4 链接标签2.6 列表标签2.7 表格标签 三、HTML进阶知识3.1 行级元素与块级元素3.3 语义化标签 四、开发工具与技巧4.1 开发工具4.2 常用技巧 五、…...

DeepSeek 开源周:第五天 - Fire-Flyer 文件系统(3FS)

&#xff08;下面文字主要由 Grok 3 协助生成&#xff09; 概述 Deepseek 今天开源的 Fire-Flyer 文件系统&#xff08;3FS&#xff09;是一个高性能分布式文件系统&#xff0c;专门为 AI 训练和推理设计。研究表明&#xff0c;它解决了 AI 工作负载中处理海量数据的高效存储需…...

基于专利合作地址匹配的数据构建区域协同矩阵

文章目录 地区地址提取完成的处理代码 在专利合作申请表中&#xff0c;有多家公司合作申请。在专利权人地址中&#xff0c; 有多个公司的地址信息。故想利用这里多个地址。想用这里的地址来代表区域之间的专利合作情况代表区域之间的协同、协作情况。 下图是专利合作表的一部分…...

【AI+智造】在阿里云Ubuntu 24.04上部署DeepSeek R1 14B的完整方案

作者&#xff1a;Odoo技术开发/资深信息化负责人 日期&#xff1a;2025年2月28日 一、部署背景与目标 DeepSeek R1作为国产大语言模型的代表&#xff0c;凭借其强化学习驱动的推理能力&#xff0c;在复杂任务&#xff08;如数学问题、编程逻辑&#xff09;中表现优异。本地化部…...

0x02 js、Vue、Ajax

文章目录 js核心概念js脚本引入html的方式基础语法事件监听 Vuevue简介v-forv-bindv-if&v-showv-model&v-on Ajax js 核心概念 JavaScript&#xff1a;是一门跨平台、面向对象的脚本语言&#xff0c;用来控制网页行为实现交互效果&#xff0c;由ECMAScript、BOM、DOM…...

深入解析数据倾斜:原因、影响与优化方案

在分布式计算和大数据处理中&#xff0c;数据倾斜&#xff08;Data Skew&#xff09; 是一个常见且影响性能的难题。它可能导致某些计算节点负载过高&#xff0c;而其他节点资源浪费&#xff0c;从而影响整体吞吐量和任务执行时间。 在本文中&#xff0c;我们将深入分析 数据倾…...

Python Tornado 框架面试题及参考答案

目录 Tornado 框架的核心组件是什么?解释其作用。 Tornado 与其他 Python 框架(如 Django、Flask)的主要区别是什么? 为什么 Tornado 适合高并发场景?其设计哲学是什么? 解释 Tornado 的 Application 类和 RequestHandler 类的关系。 如何在 Tornado 中配置静态文件路…...

IDEA 使用codeGPT+deepseek

一、环境准备 1、IDEA 版本要求 安装之前确保 IDEA 处于 2023.x 及以上的较新版本。 2、Python 环境 安装 Python 3.8 或更高版本 为了确保 DeepSeek 助手能够顺利运行&#xff0c;您需要在操作系统中预先配置 Python 环境。具体来说&#xff0c;您需要安装 Python 3.8 或更高…...

Linux笔记---一切皆文件

1. 含义 “一切皆文件”是 Linux 对系统资源的高度抽象&#xff0c;通过文件接口屏蔽底层差异&#xff0c;提供了简洁、一致的操作方式。这种设计降低了系统复杂性&#xff0c;使得工具、脚本和应用程序能够以统一模式处理多样化资源&#xff0c;是 Linux 强大灵活性的重要基石…...

ubuntu22.04安装docker engine

在Ubuntu 22.04上安装Docker Engine可以通过以下步骤完成&#xff1a; 更新系统包索引&#xff1a; sudo apt update安装必要的依赖包&#xff1a; 这些包允许apt通过HTTPS使用仓库。 sudo apt install -y apt-transport-https ca-certificates curl software-properties-commo…...

DeepSeek开源周,第五弹再次来袭,3FS

Fire-Flyer 文件系统&#xff08;3FS&#xff09;总结&#xff1a; 一、核心特点 3FS 是一个专为 AI 训练和推理工作负载设计的高性能分布式文件系统&#xff0c;利用现代 SSD 和 RDMA 网络&#xff0c;提供共享存储层&#xff0c;简化分布式应用开发。其主要特点包括&#xf…...

RagFlow专题二、RagFlow 核心架构(数据检索、语义搜索与知识融合)

深入解析 RagFlow 核心架构:数据检索、语义搜索与知识融合 在前一篇文章中,我们对 RagFlow 的核心理念、与传统 RAG 的区别以及其适用场景进行了深入探讨。我们了解到,RagFlow 通过动态优化检索、增强生成质量以及实时知识管理,使得大模型在复杂任务中的表现更加稳定和高效…...