Infinitas Learning — один из крупнейших образовательных издателей в Европе, владеющий издательскими компаниями в Нидерландах, Бельгии, Португалии, Польше и Швеции. В 2025–2026 учебном году группа продала более 25 миллионов книг. Как выразился инженерный менеджер Жером ван ден Хейвел (Jerome van den Heuvel): «Если вы живете в Нидерландах и у вас есть дети школьного возраста, вы, скорее всего, найдете дома книги нашего нидерландского издательства Noordhoff»
Помимо книг, Infinitas Learning управляет цифровыми платформами, на которых учащиеся выполняют задания и сдают тесты онлайн. В прошлом учебном году 1,6 миллиона уникальных учащихся выполнили 324 миллиона заданий на этих платформах. Каждое задание генерирует события, которые необходимо записать, преобразовать в обновленную картину успеваемости каждого учащегося и вернуть в режиме реального времени.
На нашем выездном мероприятии Open House 2026 в Амстердаме Жером и инженер по работе с данными Ана Лакрус (Ana Lacruz) рассказали о том, как команда Results & Insights в Infinitas Learning использует ClickHouse Managed Postgres для приема и обработки миллиардов событий, и как поиски быстрой и стабильной аналитики привели их из ClickHouse Cloud к самостоятельному развертыванию и обратно.
Два года назад платформы начального и среднего образования Infinitas Learning управляли результатами заданий и базовой аналитикой каждая по отдельности, причем важная логика дублировалась в нескольких местах. «Мы поставили перед собой задачу объединить и собрать эти результаты учащихся в одно масштабируемое решение с сосредоточением доменных знаний в одной команде», — говорит Жером.
Они начали с того, что он называет «учебной реализацией», — отказоустойчивой системы на базе событий (event-sourced), построенной на Apache Kafka. Платформы отправляли данные через API в несколько топиков Kafka с использованием схем Avro, а Java и Apache Flink перемещали данные между топиками, пока они не попадали в базу данных Postgres, из которой читали команды платформ. «Технически это выглядело потрясающе, — говорит Жером, — но система была сложной и требовала значительных накладных расходов».
Команды образовательных платформ Infinitas Learning, вспоминает он, предъявили к системе три требования: «Можете сделать ее транзакционной? Можете сделать ее работающей в реальном времени? И можете ли сделать ее проще в использовании?» Первые два пункта давались особенно сложно в созданной ими системе с конечной согласованностью (eventual consistency).
Поэтому команда оставила то, что работало, и упростила все, что могла. «Благодаря этому мы стали гордыми участниками движения „Postgres для всего“», — говорит Жером.
В новой конфигурации события попадают в систему через публичные функции, определенные в Postgres с использованием PL/pgSQL, которые команды платформ вызывают напрямую. «Здесь нет уровня REST API, только база данных», — говорит Жером. Базовые таблицы и представления недоступны платформам, что предотвращает «губительные запросы» (doom queries), способные перегрузить базу данных. При каждом событии система вычисляет новое состояние задания, а также общий прогресс учащегося, который платформы используют для определения следующего задания и заполнения панелей мониторинга успеваемости.
Хотя такая схема оказалась идеальной для фиксации действий каждого учащегося, ей было трудно осмыслить все эти данные одновременно. «Мы очень быстро поняли, что Postgres не отвечает нашим требованиям к аналитике, — говорит Жером. — Именно поэтому мы также внедрили ClickHouse в наш стек» (подробнее об этом в следующих разделах).
Когда все оказалось на Postgres, команде потребовалось место для запуска. Они начали с управляемого сервиса Postgres от Azure, но он не мог удовлетворить их требования к производительности и времени безотказной работы. Поэтому в начале 2025 года они перешли на Neon. «Нам нравился Neon, — говорит Жером, — но мы столкнулись с некоторыми функциональными проблемами».
В частности, сложными оказались крупные обновления версий Postgres. Размер кэша был привязан к непредсказуемым вычислительным ресурсам, из-за чего «данные, которые легко можно было отдавать из кэша, внезапно потребовали больше ресурсов ЦП и памяти». Функции, которые команда хотела попробовать, такие как расширение pg_clickhouse, были недоступны. В конце концов, используемый ими регион Azure был признан устаревшим в Neon, что не оставило им выбора, кроме как найти новое решение.
Примерно в то же время ClickHouse представила ClickHouse Managed Postgres — унифицированный стек данных, объединяющий Postgres для транзакций и ClickHouse для аналитики. Команда оценила его, оценила увиденное по достоинству и решила мигрировать.
С этого момента все стало просто. Они создали окружение, вручную построили схему и настроили ClickPipes. Все 750 ГБ данных были скопированы в течение 16 часов. Переход, выполненный совместно с командами платформ начального и среднего образования Infinitas Learning за 20 минут, не потребовал времени простоя благодаря логической репликации между старыми и новыми серверами.
«Это было так же просто, как переключить эндпоинты. Миграция, которая раньше занимала у нас недели, теперь была выполнена за два дня на ClickHouse Managed Postgres». — Жером ван ден Хейвел, инженерный менеджер, Infinitas Learning
«Это было так же просто, как переключить эндпоинты. Миграция, которая раньше занимала у нас недели, теперь была выполнена за два дня на ClickHouse Managed Postgres».
— Жером ван ден Хейвел, инженерный менеджер, Infinitas Learning
Первое, что их впечатлило, — это производительность сервера. «Наша задержка P50 теперь измеряется двузначными числами в микросекундах вместо миллисекунд, а задержка P99 — двузначными числами в миллисекундах вместо секунд», — говорит Жером. Во время теста под высокой нагрузкой загрузка ЦП оставалась «практически на нулевой линии». Помимо чистой скорости, он также отмечает преимущество наличия «ClickHouse и Postgres под одной крышей», уровень интеграции между ними, а также инструменты и подробные метрики, поставляемые с сервисом.
Пока команда разбиралась с тем, где должен размещаться Postgres, сторона ClickHouse в стеке команды Results & Insights также обретала форму.
Аналитика, которую создает команда, работает в режиме реального времени и ориентирована на пользователей, предоставляясь напрямую учителям. «Никто не хочет ждать секунды загрузки страницы, и учителя не исключение, — говорит она. — Поэтому наша планка времени отклика высока, и это главный драйвер для нас — задержка».
Первые эксперименты Infinitas Learning с аналитикой для пользователей начались три года назад с того, что, по словам Аны, они «любя прозвали временным решением». Созданное до перехода на Postgres, оно изначально задумывалось как временное. Данные поступали из исходных систем через Airbyte в Snowflake, затем через Azure Data Factory в Azure SQL Server и, наконец, на панели мониторинга. Поскольку несколько инструментов были объединены в цепочку для копирования, трансформации и обогащения данных, это было «далеко от реального времени», а конвейер был создан для одного узкого сценария использования, который был одновременно дорогостоящим и сложным в расширении.
Как только Postgres стал системой записей (system of record) для результатов учащихся, они попытались использовать его и для аналитики. «Мы пришли к тому же выводу, к которому до нас приходили многие команды, — говорит Ана. — Postgres отлично подходит для транзакций, но он не масштабируется для той аналитики, которая нам нужна».
Они искали OLAP-базу данных в пару к Postgres и остановили свой выбор на ClickHouse Cloud. «Она обещала нужную нам производительность, — говорит Ана. — Нас поразило уже одно только сжатие». В одной таблице содержится почти 2 миллиарда строк: 300 ГБ в несжатом виде уменьшились в ClickHouse всего до 27 ГБ, то есть в 11 раз. «Кроме того, в ClickHouse есть отличные и простые в работе инструменты», — добавляет она, выделяя такие функции, как ClickPipes (собственный уровень загрузки данных в ClickHouse Cloud), материализованные представления, которые предварительно вычисляют результаты запросов по мере поступления данных, и словари, хранящие справочные данные в памяти для быстрого поиска без соединений (joins).
Но хотя команда думала, что всё сделала правильно — денормализовала все данные из Postgres в одну таблицу, загрузила все контекстные данные в словари и полностью исключила соединения, — хвостовая задержка оставалась проблемой. Запрос, который обычно занимал 200 миллисекунд, иногда подпрыгивал до нескольких секунд. При SLA для перцентиля P99 в 500 миллисекунд пиковые значения достигали 13 секунд. «Производительность была отличной большую часть времени, — говорит Ана. — Большинство времени — это недостаточно хорошо».
Они выяснили, что причиной были промахи кэша, усугубляемые первичным ключом таблицы — UUID с высокой степенью кардинальности из другой системы, которым команда не может управлять. Ана объясняет, что UUID плохо индексируются, и ClickHouse приходится проверять каждую часть таблицы на предмет совпадения, поскольку у него нет надежного способа узнать, где именно хранится данный UUID, а затем загружать все эти данные в кэш. «Всё это суммируется», — говорит она. Усугубляло ситуацию и то, что непрерывные вставки постоянно инвалидировали кэш, а каждый новый репликатор запускался с пустым кэшем, из-за чего команде пришлось даже отключить автомасштабирование. «Это работало, но производительность была нестабильной», — добавляет Ана.
Поскольку чтение из кэша происходило быстро, команда задумалась, не кроется ли проблема в разделении хранения и вычислений в ClickHouse Cloud. «Можем ли мы получить необходимую стабильность, если будем размещать ClickHouse самостоятельно?» — вспоминает вопрос Ана. — Ответ был утвердительным». С переходом на самостоятельное размещение P50 упал до 80 миллисекунд, а P99 — до 300 миллисекунд.
Однако самостоятельное размещение оказалось сложным в управлении. «Мы получили всё, что хотели, но по определенной цене, — говорит Ана. — Теперь мы также отвечали за всё подряд. Мы запускали единственный экземпляр реплики, которым было просто управлять, но у нас не было никакой подстраховки. Восстановление после любого сбоя происходило бы медленно. Мы переживали, что что-то пойдет не так, и это заставляло нас избегать обновлений. Мы работали в таком режиме месяцы, продолжая создавать дашборды и одновременно выискивая в каждом новом релизе ClickHouse способ вернуться в Cloud».
В конце концов они вернулись. «На этот раз мы были не одни, — говорит Ана. — Служба поддержки ClickHouse работала вместе с нами и вывела наши оптимизации на новый уровень». Вместе они проанализировали модель данных команды, запросы, сжатие и настройки таблиц. Они оптимизировали систему под чтение и увеличили частоту слияний, так как меньшее количество частей означает меньший объем для сканирования. Запросы, которые раньше достигали пика в 13 секунд, теперь укладывались примерно в две секунды. «Этого было достаточно, чтобы мы могли вернуться, зная, что у нас все еще есть козырь в рукаве», — говорит она.
Этим козырем стал распределенный кэш (distributed cache) — общий уровень кэширования, который поддерживает горячие данные доступными на всех репликах. ClickHouse включила Infinitas Learning в программу закрытого предварительного тестирования как раз перед тем, как команда запустилась к новому учебному году. «Вместо того чтобы принудительно запускать слияния для ускорения чтения, мы поступили иначе: включили абсолютно все настройки, которые предварительно прогревают кэш, — объясняет Ана. — Теперь мы полагаемся на распределенный кэш для получения данных, поэтому нам почти больше не нужно читать с диска».
В ходе тестов на нагрузку показатель P99 составил 410 миллисекунд, что ниже целевого показателя команды в 500 миллисекунд и близко к тому, чего они добились при самостоятельном размещении.
«Вернувшись с открытого ПО на ClickHouse Cloud, мы теперь очень довольны получаемой производительностью. Кроме того, нам не нужно заниматься управлением обновлениями, а все функции полностью управляемого сервиса, такие как автомасштабирование, значительно облегчают жизнь». — Ана Лакруз (Ana Lacruz), инженер по работе с данными, Infinitas Learning
«Вернувшись с открытого ПО на ClickHouse Cloud, мы теперь очень довольны получаемой производительностью. Кроме того, нам не нужно заниматься управлением обновлениями, а все функции полностью управляемого сервиса, такие как автомасштабирование, значительно облегчают жизнь».
— Ана Лакруз (Ana Lacruz), инженер по работе с данными, Infinitas Learning
Задержки P50 и P99 для Cloud v1, самостоятельно размещенного решения, оптимизированного Cloud и Cloud с распределенным кэшем.
Сегодня платформы начального и среднего образования Infinitas Learning взаимодействуют с двумя базами данных для работы с результатами учащихся: Postgres используется для транзакций, а ClickHouse — для аналитики. «Это два подключения, две модели данных, две системы, которые нужно синхронизировать», — говорит Ана.
«Наша цель — объединить их в одну, — продолжает она, поясняя, что планируется использовать расширение Postgres pg_clickhouse в качестве скрытой от глаз связующего звена между ними, перекладывая выполнение запросов на ClickHouse, так что транзакции и аналитика будут работать за единым сервисом. — Там же, где клиент записывает результаты теста, происходит и чтение прогресса всего класса за целый год, — говорит Ана. — Одно подключение, один источник правды, транзакции и аналитика, и всё это работает на базе ClickHouse Cloud».
Это объединение уже изменило скорость выпуска релизов командой. «В Infinitas Learning мы хотим быть смелыми и двигаться быстро, ничего не ломая, — говорит Ана. — Экосистема ClickHouse помогает нам делать именно это. Теперь мы можем перевести дашборд или виджет от концептуального прототипа (proof of concept) до готовности к продакшену с реальными данными всего за несколько часов». Она благодарит службу поддержки ClickHouse за «лучшую поддержку и уровень вовлеченности из всех, с какими мы сталкивались за многие годы работы в ИТ».
«Причина, по которой всё это имеет значение, вовсе не в технологиях, — добавляет она. — А в том, что теперь наша команда может тратить время на получение практически применимых выводов, помогая 1,6 миллиона учащихся полностью раскрыть свой потенциал и поддерживая учителей, которые направляют их на этом пути. Всё, что мы создали, напрямую связано с нашей миссией в Infinitas Learning: расширять возможности учителей и учащихся для роста».










