Get Appointment

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’ соврСмСнном ΠΌΠΈΡ€Π΅ Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ микросСрвисная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° стала стандартом для создания ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΈ Π³ΠΈΠ±ΠΊΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. АсинхронныС микросСрвисы ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ систСмы, эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рСсурсы ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ врСмя ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ°. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ асинхронныС микросСрвисы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ FastAPI, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ с рСляционной Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… PostgreSQL ΠΈ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ in-memory систСмой Redis. Π’Π°ΠΊΠΎΠΉ стСк Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ позволяСт Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ быстрыС, Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹Π΅ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для бизнСса любого ΠΌΠ°ΡΡˆΡ‚Π°Π±Π°.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° асинхронных микросСрвисов

  • Высокая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ благодаря Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π²Π²ΠΎΠ΄Ρƒ-Π²Ρ‹Π²ΠΎΠ΄Ρƒ.
  • Гибкая ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ: ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ сСрвисы ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСзависимо Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°.
  • ΠžΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ: сбой ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСрвиса Π½Π΅ влияСт Π½Π° всю систСму.
  • Π›Ρ‘Π³ΠΊΠΎΡΡ‚ΡŒ обновлСния ΠΈ внСдрСния Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π±Π΅Π· остановки всСй систСмы.

FastAPI β€” соврСмСнный Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для асинхронных микросСрвисов

FastAPI β€” это соврСмСнный, быстрый (high-performance) web-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для Python, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π° созданиС API ΠΈ микросСрвисов. Благодаря ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ асинхронного программирования Ρ‡Π΅Ρ€Π΅Π· async/await, FastAPI идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π·Π°Π΄Π°Ρ‡ с высокой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ ΠΈ большим количСством ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… запросов.

FastAPI отличаСтся:

  • Высокой ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запросов (ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ сравним с Node.js ΠΈ Go).
  • Π˜Π½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятной Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ Π°Π²Ρ‚ΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Swagger/OpenAPI спСцификации.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° основС Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ Ρ‚ΠΈΠΏΠΎΠ² Python.
  • ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ с соврСмСнными Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ очСрСдями сообщСний.

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с PostgreSQL

PostgreSQL β€” ΠΎΠ΄Π½Π° ΠΈΠ· самых популярных ΠΈ Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹Ρ… рСляционных Π‘Π£Π‘Π”. Она обСспСчиваСт Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠ² структурированных Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ слоТныС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡŽ ΠΈ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ.

Для асинхронного взаимодСйствия с PostgreSQL Π² экосистСмС Python ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° asyncpg, Π° для Π±ΠΎΠ»Π΅Π΅ высокого уровня абстракции β€” SQLAlchemy с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ asyncio. Π­Ρ‚ΠΎ позволяСт микросСрвисам Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ запросы ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ основного ΠΏΠΎΡ‚ΠΎΠΊΠ°, сущСствСнно ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ прилоТСния.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ асинхронного запроса ΠΊ PostgreSQL:

import asyncpg

async def fetch_users():
    conn = await asyncpg.connect(user='user', password='password', database='db', host='127.0.0.1')
    rows = await conn.fetch('SELECT * FROM users')
    await conn.close()
    return rows

ИспользованиС Redis для ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями

Redis β€” Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ in-memory NoSQL Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π±Ρ€ΠΎΠΊΠ΅Ρ€ сообщСний. Она идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ часто Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, хранСния сСссий, ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ Π·Π°Π΄Π°Ρ‡, Π° Ρ‚Π°ΠΊΠΆΠ΅ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ pub/sub ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ микросСрвисами.

Асинхронная Ρ€Π°Π±ΠΎΡ‚Π° с Redis Π² Python осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ aioredis, Ρ‡Ρ‚ΠΎ позволяСт эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ возмоТности асинхронного программирования Π² микросСрвисах.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ асинхронной Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Redis:

import aioredis

async def cache_data():
    redis = await aioredis.create_redis_pool('redis://localhost')
    await redis.set('my_key', 'some_value')
    value = await redis.get('my_key')
    redis.close()
    await redis.wait_closed()
    return value

ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ микросСрвисами

ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ Ρ‡Π΅Ρ€Π΅Π· REST API (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ FastAPI), ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сообщСний (RabbitMQ, Redis, Kafka), Π° Ρ‚Π°ΠΊΠΆΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² событий. ИспользованиС асинхронных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² позволяСт ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ.

Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ асинхронных микросСрвисов особоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ удСляСтся вопросам бСзопасности, Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Ρƒ ΠΈ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ. FastAPI ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ с соврСмСнными инструмСнтами для отслСТивания ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ, логирования ошибок ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (Prometheus, Grafana, Sentry ΠΈ Π΄Ρ€.).

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ кСйсы использования

  • ВысоконагруТСнныС Π²Π΅Π±-прилоТСния ΠΈ API.
  • ЀинансовыС систСмы ΠΈ ΠΏΠ»Π°Ρ‚Ρ‘ΠΆΠ½Ρ‹Π΅ ΡˆΠ»ΡŽΠ·Ρ‹.
  • ΠœΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈ IoT ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.
  • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ°.

Π’Ρ‹Π²ΠΎΠ΄

АсинхронныС микросСрвисы Π½Π° Π±Π°Π·Π΅ FastAPI, PostgreSQL ΠΈ Redis β€” это соврСмСнноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для бизнСса, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ быстрыС, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΈ отказоустойчивыС систСмы. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ обСспСчиваСт Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, Π»Ρ‘Π³ΠΊΠΎΡΡ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ быстрый ΠΎΡ‚ΠΊΠ»ΠΈΠΊ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ высокой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅. Если Π²Ρ‹ заинтСрСсованы Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹Ρ… ΠΈ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… микросСрвисов, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ с Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ΠΌ β€” ΡΠ²ΡΠΆΠΈΡ‚Π΅ΡΡŒ с Π½Π°ΠΌΠΈ для бСсплатной ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Ρ†ΠΈΠΈ!

Avatar
Raman Sapezhka

CEO Plantago/CTO