PhiFlow
Движок инкрементальных вычислений для реального времени на иерархических данных
Что такое PhiFlow?
PhiFlow — это промышленная .NET библиотека, созданная для задач, где небольшие изменения во входных данных должны мгновенно распространяться через многослойные вычислительные конвейеры с сохранением возможности реального времени отвечать на аналитические запросы. Будучи встраиваемым (in-process) движком, PhiFlow обеспечивает детерминированные инкрементальные вычисления с точным индексированием — никаких приближений, вероятностных структур данных или внешних зависимостей.
Проблема: Традиционные подходы пересчитывают всю иерархию при каждом изменении (O(Слои × Ширина)). Это становится неприемлемо дорого с ростом данных.
Решение PhiFlow: Отслеживание точного «конуса влияния» каждого обновления через кэш-эффективные интервалы, пересчёт только затронутых узлов и поддержка инкрементальных индексов для молниеносных запросов.
// Моделируйте ваш конвейер как слои var flow = new PhiFlowRuntime(width: 5000, layers: 60, domainSize: 1024); // Подключайте индексы для запросов в реальном времени flow.AttachIndex(queryLayer, new FenwickCountIndex(domainSize)); flow.AttachIndex(queryLayer, new HistogramTopKIndex(domainSize, width)); // Подавайте обновления - пересчитываются только затронутые узлы flow.ApplyInputUpdates(updates, kWork: 50); // Запросы выполняются по живым индексам long topKSum = flow.TopKSum(queryLayer, k: 50); long countGt = flow.CountGreater(queryLayer, threshold: 500);
Базовая технология и архитектура
Встраиваемый подход (Embedded Philosophy)
PhiFlow работает полностью внутри вашего процесса, устраняя сетевые задержки, накладные расходы на сериализацию и внешние зависимости. Это обеспечивает детерминированное выполнение, критически важное для систем реального времени, потоковой аналитики и симуляционных конвейеров.
Области применения
-
Системы потоковой обработки, требующие обновления агрегатов за субмиллисекунды
-
Игровые движки и симуляции со сложными каскадными механиками
-
Платформы финансового риска, нуждающиеся в пересчёте экспозиции в реальном времени
-
Наблюдаемость и мониторинг с иерархическими метриками
-
Промышленный интернет вещей, обрабатывающий потоки данных с сенсоров
Ключевые возможности
1. Движок инкрементальных вычислений
Базовый алгоритм: Отслеживание конуса влияния через интервалы
-
Интеллектуальное распространение: При изменении входных данных PhiFlow вычисляет минимальные затронутые интервалы для каждого слоя, используя циклическую интервальную арифметику
-
Кэш-эффективность: Интервалы обеспечивают последовательный доступ к памяти при пересчёте
-
Пакетные обновления: Обработка нескольких дельт одновременно со слиянием интервалов
// Одиночное или пакетное обновление - одинаково эффективно flow.ApplyInputUpdates(new[] { new InputUpdate(index: 10, value: 512), new InputUpdate(index: 123, value: 7), new InputUpdate(index: 2048, value: 999) }, kWork: 50);
2. Точные индексы запросов (без аппроксимаций)
PhiFlow работает с ограниченным дискретным доменом значений (0..DomainSize-1), что позволяет использовать точные структуры данных:
| Тип индекса | Поддерживаемые запросы | Стоимость обновления |
|---|---|---|
| Дерево Фенвика | CountGreater, RangeCount | O(log DomainSize) |
| Гистограмма | TopKSum | O(1) на обновление, O(DomainSize) на TopK |
| Суммарный индекс | Sum, Avg | O(1) |
Все индексы обновляются инкрементально во время ApplyInputUpdates — никакого перестроения с нуля.
// Подключаем индексы один раз при старте rt.AttachIndex(queryLayer, new FenwickCountIndex(domainSize)); rt.AttachIndex(queryLayer, new SumIndex(width)); rt.AttachIndex(queryLayer, new HistogramTopKIndex(domainSize, width)); // Позже: запросы автоматически используют индексы long count = rt.CountGreater(queryLayer, 500); // O(log DomainSize) long topK = rt.TopKSum(queryLayer, 50); // O(DomainSize) или O(k log n) с оптимизацией long sum = rt.Sum(queryLayer); // O(1)
3. Два режима обновлений
SetValue (Production/Бизнес-логика)
-
Прямое присваивание:
new InputUpdate(index: 10, value: 512) -
Предсказуемо, удобно для бизнес-логики
-
Рекомендуется для большинства production сценариев
Mutation (Симуляции/Тестирование)
-
Детерминированное преобразование:
Phi.MutateInputInDomain(oldValue, domainSize) -
Полезно для Монте-Карло, игровой механики, нагрузочного тестирования
-
Воспроизводимо от запуска к запуску
4. Движок запросов
| Тип запроса | Описание | Индексная поддержка |
|---|---|---|
CountGreater(threshold) |
Количество элементов > t | Fenwick |
RangeCount(lo, hi) |
Количество элементов в [lo, hi) | Fenwick |
Sum() |
Сумма всех элементов | Бегущая сумма |
Avg() |
Среднее арифметическое | Бегущая сумма |
TopKSum(k) |
Сумма k наибольших значений | Гистограмма |
Все запросы возвращают точные результаты — никаких вероятностных структур данных.
Характеристики производительности
Бенчмарки пропускной способности (Intel i5-11400F, .NET 8)
| Сценарий | Базовый (Полный пересчёт) | PhiFlow (Инкремент + Индексы) | Ускорение |
|---|---|---|---|
| DeltaCount=1, KWork=50 | 10,706 ms | 195 ms | 55× быстрее |
| DeltaCount=4, KWork=50 | 10,799 ms | 748 ms | 14× быстрее |
| DeltaCount=1, KWork=10 | 1,834 ms | 35 ms | 52× быстрее |
| DeltaCount=4, KWork=10 | 1,812 ms | 129 ms | 14× быстрее |
| TopK запросы (K=50) | 1,743 ms | 34 ms | 51× быстрее |
Особенности памяти
-
Zero-Allocation на горячих путях: Ядро распространения обновлений избегает аллокаций в куче
-
Пул интервалов: Внутренние наборы интервалов переиспользуют память между шагами
-
Предсказуемое GC давление: Подходит для 24/7 сервисов со строгими требованиями к задержкам
Масштабируемость
-
Линейное масштабирование: Производительность линейно зависит от размера дельты и KWork
-
Постоянный фактор: Накладные расходы не зависят от общего размера графа при малых дельтах
-
Кэш-эффективность: Интервальный доступ максимизирует использование кэша CPU
Технические спецификации
Целевой фреймворк
-
.NET 8.0+ (оптимизирован под последние возможности рантайма)
-
Платформы: Windows, Linux, macOS
-
Архитектуры: x64, ARM64
Требования к интеграции
-
Нет внешних зависимостей: Самостоятельное развёртывание
-
Не требует БД: Чисто in-memory вычисления
-
Нет сетевых вызовов: Полностью локальное выполнение
Опыт разработчика
-
Полный IntelliSense: Исчерпывающая XML документация
-
Source Link: Прямая отладка исходного кода библиотеки
-
Набор бенчмарков: Воспроизводимые тесты производительности
Сценарии использования (с конкретными примерами)
1. Финансовые технологии (приоритетный сегмент)
Управление рисками (VaR/экспозиция)
Слой 0: Цены инструментов, ставки, волатильности Слой 1: Риск-метрики на уровне инструментов (дельта/гамма) Слой 2: Агрегация по секторам Слой 3: Агрегация по портфелям Слой 4: Общебанковские лимиты риска
При поступлении рыночных тиков обновляются только затронутые ветки. CountGreater запросы питают алерты реального времени.
Алгоритмическая торговля
тик → свечи → признаки → сигнал → торговое решение
TopK запросы мгновенно выявляют наиболее активные инструменты.
Антифрод
транзакция → пользователь → счёт → кластер → флаг риска
RangeCount проверяет превышение порогов в реальном времени.
2. Игровая индустрия и симуляции
Экономические симуляторы (4X)
налог → доход провинции → счастье → продуктивность → мощь армии
«Что если изменить этот налог?» становится мгновенным пересчётом с быстрыми запросами для UI.
Баланс в MMO
действие игрока → статистика класса → глобальный баланс → предложения по тюнингу
TopK мгновенно показывает самые несбалансированные регионы/классы.
3. Промышленный интернет вещей и телеметрия
Предиктивное обслуживание
сенсор → станок → линия → цех → регион
Выброс одного сенсора обновляет только релевантные агрегаты.
Умные сети
потребитель → трансформатор → район → региональная нагрузка
CountGreater генерирует алерты при превышении порогов.
4. AdTech и маркетинг
Торги в реальном времени
показ → пользователь → сегмент → кампания → бюджет
Действия пользователя распространяются; пороговые запросы управляют темпом кампании.
Атрибуция
клик → визит → конверсия → воронка → ROI
Дашборды в реальном времени обновляются с каждой конверсией.
5. Наблюдаемость и DevOps
SLA мониторинг
запрос → инстанс → сервис → граф зависимостей → общий SLA
Всплеск задержки мгновенно обновляет затронутые агрегаты.
Метрики инфраструктуры
процесс → под → нода → кластер → регион
CountGreater эффективно управляет порогами алертов.
6. Научные вычисления
Сеточные методы
граничные условия → локальные ячейки → региональные агрегаты
Интервальное распространение естественно сочетается с локализованным влиянием.
Моделирование эпидемий
сущность → район → регион → страна → мир
Живой what-if анализ с мгновенными агрегатами.
Сравнение с конкурентами
Позиционирование
PhiFlow занимает уникальную нишу между:
| Категория | Примеры | Преимущество PhiFlow |
|---|---|---|
| Потоковые процессоры | Flink, Kafka Streams | Лёгкий, in-process, оптимизирован для иерархического пересчёта |
| OLAP базы данных | ClickHouse, Druid | Обновления на каждое событие, а не батчами |
| In-Memory кэши | Redis + Lua | Встроенные инкрементальные индексы, гарантированная точность |
| Самописный код | Триггеры с нуля | Проверенное ядро + индексы, ускорение разработки в 50-100 раз |
Конкурентные преимущества
| Аспект | Традиционный подход | PhiFlow | ||
|---|---|---|---|---|
| Сложность обновления | O(Слои × Ширина) | O( | Δ | × Слои × KWork) |
| Задержка запросов | Полное сканирование O(Ширина) | Индексировано: O(log Domain) или O(1) | ||
| Точность | Часто аппроксимации | 100% точность (дискретный домен) | ||
| Время выхода на рынок | 6-12 месяцев разработки | 1 неделя интеграции | ||
| Стоимость владения | $200k+/год (команда) | $15k-$75k/год |
Лицензирование и коммерческие предложения
Ознакомительное использование
Бесплатно для разработки: Неограниченное использование в непродакшн средах
Полный доступ к функциям: Никаких искусственных ограничений при оценке
Без ограничений по времени: Оценивайте в своём темпе
Коммерческие тарифы
| Тариф | Цена | Включено | Для кого |
|---|---|---|---|
| Startup | 500$/мес | 10k узлов, все запросы, email поддержка | MVP, растущие проекты |
| Business | 2,000$/мес | 100k узлов, приоритетная поддержка, SLA 99.9% | Средний бизнес, продакшн |
| Enterprise | от 7,000$/мес | Без лимитов, on-prem, 24/7 поддержка, обучение | Крупные институции |
OEM / Встраиваемое лицензирование
Для производителей ПО, встраивающих PhiFlow в свои продукты:
-
OEM Starter: $50,000 единоразово + опции роялти
-
OEM Enterprise: Индивидуальные условия для крупных вендоров
Enterprise возможности
-
On-Premise развёртывание: Поддержка изолированных сред
-
Индивидуальные контракты: Адаптированные SLA и compliance пакеты
-
Обучение команд: Архитектурные воркшопы (очно или удалённо)
-
Приоритетная поддержка: Прямая связь с командой разработки
Быстрый старт
Установка
dotnet add package PhiFlow --version 0.1.1
Полный пример
using PhiFlow; // Сконфигурируйте ваш конвейер var width = 5000; var layers = 60; var domainSize = 1024; var queryLayer = layers - 1; // Последний слой var rt = new PhiFlowRuntime(width, layers, domainSize); rt.Reserve(maxDeltaCount: 16); // Предварительное выделение буферов // Подключите индексы для быстрых запросов rt.AttachIndex(queryLayer, new FenwickCountIndex(domainSize)); rt.AttachIndex(queryLayer, new SumIndex(width)); rt.AttachIndex(queryLayer, new HistogramTopKIndex(domainSize, width)); // Инициализируйте входной слой var input = new int[width]; var rnd = new Random(42); for (int i = 0; i < width; i++) input[i] = rnd.Next(domainSize); rt.SetInput(input); rt.BuildAll(kWork: 50); // Полное построение один раз // Обработайте обновления var updates = new[] { new InputUpdate(index: 100, value: 512), new InputUpdate(index: 200, value: 256), new InputUpdate(index: 300, value: 128) }; rt.ApplyInputUpdates(updates, kWork: 50); // Получите результаты запросов - точные и мгновенные long count = rt.CountGreater(queryLayer, threshold: 400); long topK = rt.TopKSum(queryLayer, k: 50); long sum = rt.Sum(queryLayer); long avg = rt.Avg(queryLayer); long range = rt.RangeCount(queryLayer, lo: 100, hi: 500); Console.WriteLine($"Количество >400: {count}"); Console.WriteLine($"Сумма Top-50: {topK}"); Console.WriteLine($"Сумма: {sum}, Среднее: {avg}"); Console.WriteLine($"Элементов в [100,500): {range}");
Почему профессионалы выбирают PhiFlow
-
Для архитекторов: Проверенное ядро заменяет 12 месяцев кастомной разработки
-
Для тимлидов: Неделя интеграции вместо найма 3-5 разработчиков на полгода
-
Для бизнеса: Решения на основе данных в реальном времени вместо отчётов с минутной задержкой
-
Для разработчиков: Чистый API, отличная документация, предсказуемая производительность
Главный итог: PhiFlow превращает пересчёт, занимавший минуты, в инкрементальные обновления за миллисекунды — открывая путь новому классу приложений реального времени.
Ресурсы и экосистема
Официальные каналы
-
NuGet пакет: https://www.nuget.org/packages/PhiFlow
-
Исходный код: https://github.com/likeslines-maker/PhiFlow
Поддержка
-
Telegram: @vipvodu (прямая связь с разработчиками)
-
Документация: Полный API reference с примерами использования
-
Бенчмарки: Воспроизводимый набор тестов производительности
Коммерческие вопросы
Для запросов цен, enterprise соглашений или OEM лицензирования:
PhiFlow — Инкрементальные вычисления, аналитика реального времени, точные результаты.