Sobes.tech
Back to questions
Middle
16

Реализуйте highload RPC ручку /weather с нагрузкой 10k RPS, где функция aiWeatherForecast() работает ~1 секунду

Companies where asked
СБК ПАРУС

Answer from AI

sobes.tech AI

Для реализации highload RPC ручки /weather с нагрузкой 10k RPS и функцией aiWeatherForecast(), которая работает около 1 секунды, нужно обеспечить масштабируемость и асинхронность, чтобы не блокировать обработку запросов.

Основные подходы:

  1. Асинхронная обработка запросов — использовать async/await или event loop, чтобы не блокировать поток во время ожидания результата.
  2. Кэширование — если прогнозы не меняются каждую секунду, можно кэшировать результаты, чтобы снизить нагрузку.
  3. Масштабирование — запускать несколько инстансов сервиса за балансировщиком нагрузки.
  4. Очереди и пул воркеров — если aiWeatherForecast() тяжёлая, можно обрабатывать запросы через очередь задач.

Пример на Python с использованием asyncio и aiohttp (упрощённо):

import asyncio
from aiohttp import web

async def aiWeatherForecast():
    await asyncio.sleep(1)  # имитация долгой работы
    return {"temp": 20, "condition": "sunny"}

async def handle_weather(request):
    forecast = await aiWeatherForecast()
    return web.json_response(forecast)

app = web.Application()
app.router.add_get('/weather', handle_weather)

if __name__ == '__main__':
    web.run_app(app, port=8080)

Для 10k RPS потребуется запускать несколько инстансов сервера, использовать балансировщик нагрузки (например, Nginx), и, возможно, оптимизировать aiWeatherForecast() или кэшировать результаты, чтобы не запускать тяжёлую функцию на каждый запрос.

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