Проектирование и реализация асинхронной микросервисной архитектуры с использованием Python
Проектирование и реализация асинхронной микросервисной архитектуры с использованием Python

Архитектура микросервисов стала основной тенденцией в современной разработке программного обеспечения, которая разделяет большое приложение на ряд небольших независимых сервисов, каждый из которых имеет свою собственную специфическую функциональность. Асинхронная микросервисная архитектура идет еще дальше и повышает производительность и масштабируемость системы за счет асинхронной связи. В этой статье рассказывается, как использовать Python для создания асинхронной микросервисной архитектуры, и приводятся примеры кода для демонстрации.

Выбор технологии

При построении асинхронной микросервисной архитектуры нам необходимо выбрать подходящий стек технологий. Язык Python — идеальный выбор благодаря своей простоте и гибкости, а также сильной поддержке асинхронного программирования. Вот ключевые технологии, которые мы выбрали:

  1. Python 3.7+: Выберите Python 3.7и выше, чтобы воспользоваться преимуществами встроенногоasyncioБиблиотека для реализации асинхронного программирования。
  2. FastAPI: В качестве веб-фреймворка FastAPI предоставляет высокопроизводительный асинхронный HTTP-сервер с простым и легким в использовании дизайном API и автоматическим созданием документов.
  3. Celery: Используется для реализации асинхронных очередей задач и функций поддержки, таких как планирование задач и распределенное выполнение.
  4. Redis: Являясь брокером сообщений и сервером хранения результатов Celery, он обеспечивает быстрый и надежный механизм доставки и хранения сообщений.

Архитектурный дизайн

При проектировании асинхронной микросервисной архитектуры необходимо учитывать следующие основные компоненты:

  1. Сервисный шлюз (API-шлюз):Отвечает за получение внешних запросов и их перенаправление на правильный адрес.микросервисы。
  2. микросервисы:Независимо работающее сервисное подразделение,Каждая служба отвечает за обработку определенной бизнес-логики.
  3. очередь сообщений:Для планирования и обработки асинхронных задач。
  4. база данных:Хранение данных, разделяемых между службами。

Ниже мы будем использовать Python и вышеупомянутые технологии для проектирования и реализации простой асинхронной микросервисной архитектуры.

Реализация кода

1. Установите зависимости

Язык кода:bash
копировать
pip install fastapi uvicorn celery redis

2. Написание микросервисов

Язык кода:python
кодКоличество запусков:0
копировать
# service.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/hello/{name}")
async def hello(name: str):
    return {"message": f"Hello, {name}!"}

3. Запустите службу

Язык кода:bash
копировать
uvicorn service:app --host 0.0.0.0 --port 8000 --reload

4. Настройте Сельдерей

Язык кода:python
кодКоличество запусков:0
копировать
# tasks.py

from celery import Celery

celery_app = Celery("tasks", broker="redis://localhost:6379/0")

@celery_app.task
def add(x, y):
    return x + y

5. Запустите Celery Worker.

Язык кода:bash
копировать
celery -A tasks worker --loglevel=info

6. Используйте очередь сообщений для вызова задач

Язык кода:python
кодКоличество запусков:0
копировать
# main.py

from tasks import add

result = add.delay(4, 4)
print(result.get())

7. Маршрутизация с использованием API-шлюза

Язык кода:python
кодКоличество запусков:0
копировать
# gateway.py

from fastapi import FastAPI, HTTPException
import httpx

app = FastAPI()

SERVICE_URL = "http://localhost:8000"

@app.get("/api/{service}/{endpoint}")
async def route_request(service: str, endpoint: str):
    url = f"{SERVICE_URL}/{service}/{endpoint}"
    async with httpx.AsyncClient() as client:
        response = await client.get(url)
        if response.status_code == 200:
            return response.json()
        else:
            raise HTTPException(status_code=response.status_code, detail="Service Error")

8. Запустите API-шлюз.

Язык кода:bash
копировать
uvicorn gateway:app --host 0.0.0.0 --port 8080 --reload

Пройдите вышеуказанные шаги,Мы реализовали простой API-шлюз,Он может маршрутизировать внешние запросы к соответствующим микросервисам.,и вернуть результат. в практическом применении,Мы можем еще больше расширить функциональность шлюза,Например, добавьте аутентификацию, запросите регистрацию и т. д.

9. Интеграция базы данных

В реальной микросервисной архитектуре база данных является незаменимым компонентом. Мы можем использовать асинхронный клиент базы данных для взаимодействия с базой данных и поддержания асинхронного характера всей системы.

Язык кода:python
кодКоличество запусков:0
копировать
# database.py

import asyncpg

async def connect_to_database():
    return await asyncpg.connect(user='user', password='password', database='mydatabase', host='localhost')

async def execute_query(query, *args):
    conn = await connect_to_database()
    try:
        result = await conn.execute(query, *args)
        return result
    finally:
        await conn.close()

10. Использование баз данных в микросервисах

Язык кода:python
кодКоличество запусков:0
копировать
# service.py

from fastapi import FastAPI
from database import execute_query

app = FastAPI()

@app.get("/users/{user_id}")
async def get_user(user_id: int):
    query = "SELECT * FROM users WHERE id = $1"
    result = await execute_query(query, user_id)
    return result

Выполнив описанные выше шаги, мы интегрировали базу данных в микросервис, чтобы она могла обрабатывать запросы к базе данных асинхронно. В практических приложениях мы можем дополнительно оптимизировать производительность доступа к базе данных, например, используя пул соединений, кэширование и другие технологии для повышения пропускной способности системы и скорости ответа.

11. Добавьте поддержку контейнеризации

Контейнеризация — популярный способ развертывания микросервисных архитектур и управления ими, предоставляющий такие преимущества, как изоляция среды, простота развертывания и расширения. Мы можем контейнеризировать наши микросервисы с помощью Docker и управлять несколькими контейнерами с помощью Docker Compose.

Dockerfile
Язык кода:Dockerfile
копировать
# Dockerfile

FROM python:3.8-slim

WORKDIR /app

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["uvicorn", "service:app", "--host", "0.0.0.0", "--port", "8000"]
Docker Создать файл
Язык кода:yaml
копировать
# docker-compose.yml

version: '3'

services:
  service:
    build: .
    ports:
      - "8000:8000"
    depends_on:
      - redis
  gateway:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - service
  redis:
    image: "redis:latest"

Выполнив описанные выше шаги, мы можем использовать Docker для контейнеризации микросервисов и связанных с ними компонентов, а также использовать Docker Compose для управления этими контейнерами. Это упрощает процесс развертывания и управления, а также повышает надежность и удобство обслуживания системы.

12. Мониторинг и протоколирование

в производственной среде,монитор и регистрация очень важны,Они могут помочь нам вовремя обнаружить и решить системные проблемы.,Обеспечить стабильность и надежность системы. Мы можем использовать различные инструменты мониторинга и платформы регистрации для реализации мониторинга и регистрации для архитектуры микросервисов.

Мониторинг Прометея
Язык кода:yaml
копировать
# prometheus.yml

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'service'
    static_configs:
      - targets: ['service:8000']
регистрация
Язык кода:python
кодКоличество запусков:0
копировать
# logging.py

import logging

def configure_logger():
    logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')

Пройдите вышеуказанные шаги,Мы можем интегрировать монитор и регистрацию в нашу архитектуру микросервисов.,Обеспечить стабильность и надежность системы. Монитор может помочь нам в режиме реального времени контролировать работу системы мониторинга.,Находить и решать проблемы, а регистрация помогает нам отслеживать и анализировать поведение системы;,Найдите источник проблемы.

13. Безопасность и контроль разрешений

В микросервисной архитектуре,Безопасность – важнейший аспект. Мы можем использовать различные механизмы безопасности для защиты нашей системы микросервисов.,Включает аутентификацию, контроль доступа、Шифрование данныхждать。

Аутентификация и контроль доступа
Язык кода:python
кодКоличество запусков:0
копировать
# security.py

from fastapi import Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

async def get_current_user(token: str = Depends(oauth2_scheme)):
    # В практических приложениях здесь должна быть проверена достоверность токена и получена текущая информация о пользователе на основе токена.
    if token != "fake_access_token":
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Invalid authentication credentials",
            headers={"WWW-Authenticate": "Bearer"},
        )
    return token
Шифрование данных
Язык кода:python
кодКоличество запусков:0
копировать
# cryptography.py

from cryptography.fernet import Fernet

def generate_key():
    return Fernet.generate_key()

def encrypt_message(message, key):
    f = Fernet(key)
    return f.encrypt(message.encode())

def decrypt_message(encrypted_message, key):
    f = Fernet(key)
    return f.decrypt(encrypted_message).decode()

Пройдите вышеуказанные шаги,Мы можем повысить безопасность нашей системы микросервисов.,Защитите пользовательские данные и ресурсы системы от несанкционированного доступа。безопасность этомикросервисы Архитектурный Важные соображения в дизайне, на которые всегда следует обращать внимание и усилить меры защиты системы.

Подвести итог

В этой статье мы подробно рассмотрим проектирование и реализацию построения асинхронной архитектуры микросервисов с использованием Python. Мы из Выбора технологии Запустите и выберите Python 3.7+ в качестве основного языка программирования и использует библиотеки и инструменты, такие как FastAPI, Celery и Redis, для создания асинхронной системы микросервисов. Затем мы разработали простую асинхронную микросервисную архитектуру, включая основные компоненты, такие как сервисные шлюзы, микросервисы, очереди сообщений и базы данных, и предоставили соответствующие примеры кода для демонстрации.

Мы начали с написания микросервисов и очередей задач, рассказали, как использовать FastAPI и Celery для создания асинхронных сервисов и асинхронных задач, а также использовали Redis в качестве брокера сообщений и серверной части хранилища результатов. Затем мы расширили архитектуру и реализовали шлюз API для обработки внешних запросов и их направления к нужным микросервисам. Затем мы интегрировали базу данных в микросервис, что позволило ей асинхронно обрабатывать запросы к базе данных. Впоследствии мы использовали технологию контейнеризации для контейнеризации микросервисов и связанных с ними компонентов с помощью Docker и использовали Docker. Compose для управления этими контейнерами. Наконец, мы обсудили монитор и регистрацию, Контроль. безопасности и разрешенийждатьаспект,Описывает, как интегрировать монитор и систему регистрации в нашу архитектуру микросервисов.,И как использовать различные механизмы безопасности для защиты нашей системы микросервисов.

В итоге,В этой статье подробно описан весь процесс построения архитектуры асинхронных микросервисов.,От технологии выбора к деталям реализации,Описано несколько ключевых аспектов. Асинхронная архитектура микросервисов обладает преимуществами высокой производительности, масштабируемости и гибкости.,Это важная тенденция в современной разработке программного обеспечения. С примерами кода и подробными пояснениями, представленными в этой статье.,Читатели смогут получить более глубокое понимание и освоить использование Python для построения асинхронной архитектуры микросервисов.,и применить эти знания в реальных проектах,Тем самым улучшаются производительность, надежность и ремонтопригодность системы.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose