Создание для крупных систем и долгосрочных фоновых задач. Фото: Ilias Chebbi на Unsplash Несколько месяцев назад я принял роль, требующую создания инфрастСоздание для крупных систем и долгосрочных фоновых задач. Фото: Ilias Chebbi на Unsplash Несколько месяцев назад я принял роль, требующую создания инфраст

Создание Spotify для проповедей.

2025/12/11 21:15

Создание систем для крупномасштабных и длительных фоновых задач.

Автор: Ilias Chebbi на Unsplash

Несколько месяцев назад я взял на себя роль, требующую создания инфраструктуры для потоковой передачи медиа (аудио). Но помимо предоставления аудио в виде потоковых фрагментов, существовали длительные задачи обработки медиа и обширный конвейер RAG, обеспечивающий транскрипцию, перекодирование, встраивание и последовательные обновления медиа. Создание MVP с производственным мышлением заставило нас повторять процесс, пока мы не достигли безупречной системы. Наш подход заключался в интеграции функций и базового стека приоритетов.

Основные проблемы:

В процессе создания каждая итерация была ответом на немедленную и часто "всеобъемлющую" потребность. Первоначальной проблемой была очередь задач, с которой легко справлялся Redis; мы просто запускали и забывали. Bull MQ в фреймворке NEST JS дал нам еще лучший контроль над повторными попытками, отставаниями и очередью недоставленных писем. Локально и с несколькими полезными нагрузками в производстве мы правильно настроили поток медиа. Вскоре мы столкнулись с проблемой наблюдаемости:
Логи → Запись задач (запросы, ответы, ошибки).
Метрики → Сколько / как часто эти задачи выполняются, не выполняются, завершаются и т.д.
Трассировки → Путь, который задача прошла через сервисы (функции/методы, вызываемые в пути потока).

Некоторые из этих проблем можно решить, разрабатывая API и создавая пользовательскую панель управления для их подключения, но проблема масштабируемости останется. И на самом деле, мы разработали API.

Создание для наблюдаемости

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

Например, событие Transcription.request запустит функцию TranscribeAudio. Эта функция может содержать пошаговые выполнения для: fetch_audio_metadata, deepgram_transcribe, parse_save_trasncription и notify_user.

Деконструкция рабочего процесса: функция Inngest и пошаговые выполнения

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

  • Атомарная логика: Функция выполняет вашу бизнес-логику шаг за шагом. Если шаг не выполняется, состояние всего запуска сохраняется, и запуск может быть повторен. Это перезапускает функцию с начала. Отдельные шаги или пошаговые выполнения не могут быть повторены изолированно.
  • Сериализация ответа: Пошаговое выполнение определяется его ответом. Этот ответ автоматически сериализуется, что необходимо для сохранения сложных или строго типизированных структур данных через границы выполнения. Последующие пошаговые выполнения могут надежно анализировать этот сериализованный ответ, или логика может быть объединена в один шаг для эффективности.
  • Разделение и планирование: В рамках функции мы можем условно ставить в очередь или планировать новые, зависимые события, обеспечивая сложные шаблоны разветвления/слияния и долгосрочное планирование до года. Ошибки и успехи в любой точке могут быть перехвачены, разветвлены и обработаны далее в рабочем процессе.

Абстракция функции Inngest:

import { inngest } from 'inngest-client';

export const createMyFunction = (dependencies) => {
return inngest.createFunction(
{
id: 'my-function',
name: 'My Example Function',
retries: 3, // retry the entire run on failure
concurrency: { limit: 5 },
onFailure: async ({ event, error, step }) => {
// handle errors here
await step.run('handle-error', async () => {
console.error('Error processing event:', error);
});
},
},
{ event: 'my/event.triggered' },
async ({ event, step }) => {
const { payload } = event.data;

// Step 1: Define first step
const step1Result = await step.run('step-1', async () => {
// logic for step 1
return `Processed ${payload}`;
});

// Step 2: Define second step
const step2Result = await step.run('step-2', async () => {
// logic for step 2
return step1Result + ' -> step 2';
});

// Step N: Continue as needed
await step.run('final-step', async () => {
// finalization logic
console.log('Finished processing:', step2Result);
});

return { success: true };
},
);
};

Событийно-ориентированная модель Inngest обеспечивает детальное представление о каждом выполнении рабочего процесса:

  • Комплексное отслеживание событий: Каждое выполнение функции в очереди регистрируется относительно его исходного события. Это обеспечивает четкий, высокоуровневый след всех действий, связанных с одним действием пользователя.
  • Подробные сведения о выполнении: Для каждого выполнения функции (как успешного, так и неудачного) Inngest предоставляет подробные логи через свои отчеты ack (подтверждение) и nack (отрицательное подтверждение). Эти логи включают трассировки стека ошибок, полные полезные нагрузки запросов и сериализованные полезные нагрузки ответов для каждого отдельного пошагового выполнения.
  • Операционные метрики: Помимо логов, мы получили критически важные метрики о работоспособности функций, включая показатели успеха, показатели сбоев и количество повторных попыток, что позволяет нам постоянно отслеживать надежность и задержку наших распределенных рабочих процессов.

Создание для устойчивости

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

Чтобы решить эту проблему и обеспечить строгую долговечность событий, мы внедрили специальную систему очередей в качестве буфера.

AWS Simple Queue System (SQS) была выбранной системой (хотя любая надежная система очередей подойдет), учитывая нашу существующую инфраструктуру на AWS. Мы спроектировали систему с двумя очередями: Основная очередь и Очередь недоставленных писем (DLQ).

Мы создали рабочую среду Elastic Beanstalk (EB), специально настроенную для потребления сообщений непосредственно из Основной очереди. Если сообщение в Основной очереди не удается обработать рабочим процессом EB определенное количество раз, Основная очередь автоматически перемещает неудачное сообщение в специальную DLQ. Это гарантирует, что ни одно событие не будет потеряно навсегда, если оно не сможет запуститься или быть подхваченным Inngest. Эта рабочая среда отличается от стандартной среды веб-сервера EB, поскольку ее единственная ответственность - потребление и обработка сообщений (в данном случае, пересылка потребляемого сообщения в конечную точку API Inngest).

ПОНИМАНИЕ ОГРАНИЧЕНИЙ И СПЕЦИФИКАЦИЙ

Недооцененной и довольно актуальной частью создания инфраструктуры корпоративного масштаба является то, что она потребляет ресурсы, и они долгосрочны. Архитектура микросервисов обеспечивает масштабируемость для каждого сервиса. В игру вступают хранилище, оперативная память и тайм-ауты ресурсов. Наша спецификация для типа экземпляра AWS, например, быстро перешла от t3.micro к t3.small, а сейчас зафиксирована на t3.medium. Для длительных, интенсивных по CPU фоновых задач горизонтальное масштабирование с крошечными экземплярами не работает, потому что узким местом является время, необходимое для обработки одной задачи, а не объем новых задач, поступающих в очередь.

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

В конечном итоге, эта расширенная архитектура, размещающая долговечность SQS и контролируемое выполнение рабочей среды EB непосредственно выше API Inngest, обеспечила необходимую устойчивость. Мы достигли строгого владения событиями, устранили условия гонки во время всплесков трафика и получили энергонезависимый механизм недоставленных писем. Мы использовали Inngest для его возможностей оркестрации рабочих процессов и отладки, полагаясь на примитивы AWS для максимальной пропускной способности сообщений и долговечности. Полученная система не только масштабируема, но и высоко проверяема, успешно преобразуя сложные, длительные задачи бэкенда в безопасные, наблюдаемые и отказоустойчивые микро-шаги.


Building Spotify for Sermons. была первоначально опубликована в Coinmonks на Medium, где люди продолжают обсуждение, выделяя и отвечая на эту историю.

Отказ от ответственности: Статьи, размещенные на этом веб-сайте, взяты из общедоступных источников и предоставляются исключительно в информационных целях. Они не обязательно отражают точку зрения MEXC. Все права принадлежат первоисточникам. Если вы считаете, что какой-либо контент нарушает права третьих лиц, пожалуйста, обратитесь по адресу service@support.mexc.com для его удаления. MEXC не дает никаких гарантий в отношении точности, полноты или своевременности контента и не несет ответственности за любые действия, предпринятые на основе предоставленной информации. Контент не является финансовой, юридической или иной профессиональной консультацией и не должен рассматриваться как рекомендация или одобрение со стороны MEXC.

Вам также может быть интересно

Binance обновит свою платформу спотовой торговли и проведет тестирование кодировки UTF-8.

Binance обновит свою платформу спотовой торговли и проведет тестирование кодировки UTF-8.

PANews сообщил 17 декабря, что Binance проведет обновление системы и тест кодировки UTF-8 на своей спотовой торговой платформе 17 декабря. Это обновление
Поделиться
PANews2025/12/17 12:50
Новограц предполагает рост Биткоина при сценарии с мягкой политикой председателя ФРС

Новограц предполагает рост Биткоина при сценарии с мягкой политикой председателя ФРС

Пост Novogratz предполагает рост Биктоина при сценарии с мягким председателем ФРС появился на BitcoinEthereumNews.com. Ключевые моменты: Novogratz прогнозирует рост Биктоина при смягчении политики Федерального резерва. Биктоин может достичь 200 000$ согласно сценарию Novogratz. Сценарий представляет потенциальные риски для экономической стабильности США. Генеральный директор Galaxy Digital Майк Novogratz предположил, что Биктоин может вырасти до 200 000$, если будет назначен мягкий председатель Федерального резерва, потенциально влияя на экономическую стабильность США. Этот сценарий может катализировать значительные рыночные сдвиги, усиливая напряженность между ростом криптовалют и экономическим ландшафтом Америки. Взгляд Novogratz на Биктоин в 200 000$ на фоне прогнозов ФРС Майк Novogratz, генеральный директор Galaxy Digital, предсказал потенциальный рост Биктоина, обусловленный мягким руководством Федерального резерва. Его комментарии сосредоточены на убеждении, что сценарий снижения ставок может повысить цену Биктоина. Этот прогноз является частью более широкого рыночного анализа Novogratz, связывающего денежно-кредитную политику с эффективностью криптовалют. Изменения, ожидаемые от такого мягкого поворота, значительны. В случае реализации, сценарий может повернуть Биктоин к исключительно высокой оценке. Институциональное участие, со спотовыми ETF от таких фирм, как BlackRock и Fidelity, может еще больше усилить эту тенденцию. "Если ФРС снизит ставки, когда они не должны их снижать, и вы назначите чрезвычайно мягкого председателя, это может привести к моменту 'окончательного взрывного роста' для Биктоина. Может ли Биктоин дойти до 200 000$? Конечно, может... потому что если этот сценарий произойдет, это будет совершенно новый нарратив." — Майк Novogratz Рыночный ландшафт Биктоина: исторические данные и анализ Знаете ли вы? Прошлые мягкие денежно-кредитные политики, такие как в период 2020-2021 годов, исторически приводили к достижению Биктоином новых ценовых максимумов, поскольку рисковые активы видели увеличение ликвидности. Биктоин (BTC) в настоящее время оценивается в 109 588,18$, с рыночной капитализацией в 2,18 триллиона$, доминируя на 57,74% рынка, согласно данным CoinMarketCap. За последние 24 часа цена упала на -1,53%, в то время как недельный обзор показывает снижение на -5,36%. Объем торгов уменьшился на -27,82%. Биктоин(BTC), дневной график, скриншот на CoinMarketCap...
Поделиться
BitcoinEthereumNews2025/09/27 15:31
Тернистый путь Bitcoin: неопределенности и потенциальные перспективы

Тернистый путь Bitcoin: неопределенности и потенциальные перспективы

Биткоин испытывает трудности с возвращением на значимые ценовые уровни, в частности на уровень 88 000 $, поскольку глобальные экономические изменения усиливают его волатильность. По мере роста ожиданий
Поделиться
Coinstats2025/12/17 10:46