Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Языки программирования
  4. TypeScript
  5. Bun + Temporal API: надежные scheduler-приложения на TypeScript в 2026

Bun + Temporal API: надежные scheduler-приложения на TypeScript в 2026

Запланировано Прикреплена Закрыта Перенесена TypeScript
buntemporaltypescript
1 Сообщения 1 Постеры 0 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • kirilljsxK Не в сети
    kirilljsxK Не в сети
    kirilljsx
    js
    написал отредактировано
    #1

    Обложка: Как интегрировать Bun с Temporal API для создания надежных scheduler-приложений на TypeScript: гайд 2026

    Хочешь строить scheduler-приложения, которые не падают от сбоев? Bun с Temporal API - это комбо для TypeScript-проектов, где задачи выполняются надежно, даже если сервак перезагружается. Разберем, как их интегрировать шаг за шагом.

    Temporal API наконец-то в ES2026 - никаких больше мук с Date, который путает часовые пояса и летние переходы. А Bun уже экспериментально тянет эту фичу через JSC-флаг. Получится scheduler, который планирует задачи, retry-ит фейлы и держит состояние вечно.

    Почему Bun и Temporal - идеал для scheduler’ов

    Bun - это молниеносный рантайм на JavaScriptCore, который в 2026 уже обгоняет Node по скорости. Temporal API добавляет точную работу с датами: PlainDate, ZonedDateTime, Instant - все immutable и без багов. Вместе они решают типичные боли scheduler’ов: дедлайны в разных таймзонах, retry при сбоях, распределенные задачи.

    Представь: бот отправляет рассылки по расписанию. Без Temporal Date сломается на DST, без оркестрации типа Temporal задачи потеряются при рестарте. Bun дает скорость, Temporal - надежность. Тесты показывают: с флагом BUN_JSC_useTemporal тесты Temporal летают за 0.8с, против 228с на полифиллах.

    • Скорость: Bun запускает scheduler в разы быстрее Node, особенно с Temporal.
    • Надежность: Workflows Temporal держат состояние, детерминированы.
    • TypeScript-friendly: Полная типизация из коробки в Bun и Temporal SDK.
    • Экспериментальная фича: Включи BUN_JSC_useTemporal=1 - и Temporal работает нативно.
    Сравнение рантаймов для Temporal
    Рантайм Pass Rate Время тестов Примечание
    --------- ----------- -------------- ------------
    Bun (JSC) 40% 0.8с Блитц-скорость
    temporal-polyfill 88% 6с Медленнее
    @js-temporal/polyfill 84% 228с Тормозит

    Установка и базовый сетап в Bun

    Сначала ставим Bun - curl -fsSL https://bun.sh/install | bash. Temporal SDK для TypeScript тянется через bun add @temporalio/client @temporalio/worker. Не забудь флаг для Temporal API: экспортируй BUN_JSC_useTemporal=1 в .env или терминале. Это включает нативную поддержку в JSC, без полифиллов.

    Запускаем Temporal сервер локально - docker compose из их доков. В TypeScript пишем workflow: функция, которая детерминировано планирует задачи. Activity - реальная логика, типа отправки email. Bun компилит TS в runtime быстрее всех, так что dev-сервер летает.

    Вот базовый пример scheduler’а для ежедневных задач:

    import { defineWorkflow, defineActivity } from '@temporalio/workflow';
    
    const sendReport = defineActivity({
      async fn(date: Temporal.PlainDate) {
        // Логика отправки
        console.log(`Report for ${date.toString()}`);
      }
    });
    
    export const dailyScheduler = defineWorkflow({
      async fn(start: string) {
        const startDate = Temporal.PlainDate.from(start);
        while (true) {
          await sendReport(startDate);
          startDate.add({ days: 1 });
          await proxyActivities.sleep('1d');
        }
      }
    });
    
    • Workflow: Детерминированная логика, Temporal сам retry-ит.
    • Нюанс: Используй proxyActivities для таймаутов - не свои setTimeout.
    • Activity: Stateful код, прокидывай Temporal.PlainDate для дат.
    • Запуск: bun run workflow.ts с worker’ом.

    Интеграция с реальным проектом: пример scheduler’а

    Допустим, строим API для тасков с дедлайнами. Bun-сервер на Bun.serve, Temporal worker в фоне. Клиент SDK стартует workflow с Temporal.ZonedDateTime. При сбое сервера Temporal Cloud или self-hosted кластер подхватит выполнение - zero downtime.

    В Docker: multi-stage build с oven/bun:1-alpine. Проблема с protobufjs в alpine фиксится патчем или сменой на non-alpine. В 2026 Bun уже дошлифовал совместимость с Temporal client - коннект в контейнере без танцев.

    // bunfig.toml
    [env]
    BUN_JSC_useTemporal = "1"
    
    // server.ts
    import { Connection } from '@temporalio/client';
    const connection = await Connection.connect();
    
    Компоненты стека Роль
    Bun Runtime + сервер
    Temporal SDK Workflows/Activities
    Temporal.PlainDate Даты без багов
    TypeScript 6.0 Нативная поддержка Temporal
    • Масштаб: Worker’ы горизонтально, Temporal балансирует.
    • Внимание: Детерминизм - никаких random, Date.now() в workflows.
    • Мониторинг: Веб-UI Temporal показывает все executions.

    Продвинутые фичи: cron, retries и signals

    Temporal workflows тянут cron-стиль: schedule(cron('0 9 * * *')). С Temporal API cron вычисляется точно, с учетом зон. Retries настраиваются в activity options: backoff, max attempts. Signals позволяют менять workflow на лету - отменить задачу из API.

    Пример с retry и signal:

    const options = {
      retry: { maximumAttempts: 5, backoffCoefficient: 2 }
    };
    await proxyActivities(sendReport, options)(date);
    
    • Cron: Интеграция с Temporal scheduler API.
    • Signals/Queries: Изменяй состояние живого workflow.
    • Хак: Для сложных дат комбинируй Instant + ZonedDateTime.

    Scheduler в продакшене: что реально работает

    В 2026 Bun с Temporal - стандарт для надежных таскеров на TS. Масштабируй на кластер, добавь Nexus для cross-namespace. Остается докрутить интеграцию с date pickers - стандарт пока не доделан, но полифиллы рулят. Подумай над tracing через OpenTelemetry для дебагов в проде.

    1 ответ Последний ответ
    0

    Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.

    Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.

    С вашими комментариями этот пост мог бы стать ещё лучше 💗

    Зарегистрироваться Войти

    Категории

    • Главная
    • Новости
    • Фронтенд
    • Бекенд
    • Языки программирования

    Контакты

    • Сотрудничество
    • info@exlends.com

    © 2024 - 2026 ExLends, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Лента
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы