[Перевод] Как Notion обрабатывает 200 миллиардов объектов данных

Картинки автора поста

Картинки автора поста

Переход от PosgreSQL-only решения к собственному DataLake для отделения read нагрузки под нужды аналитики и AI.

Вступление

Если вы использовали Notion, то знаете, что он позволяет вам делать практически всё — создавать заметки, планировать, составлять списки чтения и управлять проектами.

Notion является гибким инструментом. Вы можете настраивать пространство до тех пор, пока не почувствуете, что достигли желаемого.

Всё в Notion представляет собой блок — текст, изображения, списки, строки базы данных и даже страницы.

Эти динамические единицы могут быть преобразованы в блоки других типов или свободно перемещаться внутри Notion.

Блоки — это LEGO от Notion.

Postgres ruled them all.

2bee9b02e662c560f7fa1881c9d65d5b.png

Изначально Notion хранила все блоки в базе данных Postgres. В 2021 году их было более 20 миллиардов. Сейчас количество блоков выросло до 200 миллиардов.

До 2021 года всё помещалось в один инстанц Postgres.

Сейчас база данных разбита на 480 логических сегментов, которые распределены по 96 инстанцам Postgres, так что каждый отвечает за 5 сегментов.

Postgres обрабатывал всё — от онлайн-трафика пользователей до офлайн-аналитики и машинного обучения.

Осознавая большие запросы для аналитики и AI было решено создать под них собственную инфраструктуру.

Fivetrans и Snowflake

Сначала в 2021 году был создан простой ETL, который использовал Fivetran для передачи данных из Postgres в Snowflake. Использовались 480 коннекторов для записи 480 сегментов в необработанные таблицы Snowflake ежечасно.

b1cea678ccfdc02c953152cfb774fd75.png

Затем Notion объединяла эти таблицы в одну большую для анализа и машинного обучения.

Но у этого подхода возникли некоторые проблемы, когда объем данных Postgres вырос:

23cbcaf66ee7fcf2cc1131b089a14d17.png

Управление 480 коннекторами Fivetran оказалось кошмаром:

  • Пользователи Notion обновляют блоки чаще, чем добавляют новые. Этот паттерн интенсивного обновления замедляет и увеличивает стоимость обработки данных Snowflake.

  • Потребление данных становится все более сложным и тяжелым (рабочие нагрузки искусственного интеллекта)

Notion приступила к созданию собственного хранилища данных.

Озеро данных

Были поставлены следующие требования для системы:

  • Масштабируемое хранилище данных для хранения как необработанных, так и обработанных данных.

  • Быстрый и экономичный прием данных и вычисления для любой рабочей нагрузки. Особенно с часто обновляемыми данными.

В 2022 году была внедрена собственная архитектура DataLake, суть которой в передачи данных из Postgres в Kafka с помощью Debezium, с последующей передачей в Apache Hudi и S3.

Такое хранилище объектов выступает в качестве конечной точки для потребителей:

Для обработки получаемых миллиардов блоков и их обновлений используется Spark.

Благодаря созданию такой подсистемы получилось значительно сократить текущие расходы.

Ниже представлен основной пайплайн выгрузки данных:

40f3f1f2098cc15c02fb0e7e289462f6.png

1 коннектор Debeizum CDC на 1 инстанц Postgres.

  • Коннекторы деплоятся и управляются в Kubernetes на AWS (EKS)

  • Коннектор может обрабатывать изменения строк Postgres со скоростью десятки МБ/с.

  • Один топик Kafka на 1 Postgres таблицу.

  • Все коннекторы потребляют данные из 480 сегментов и записывают в соответствующий топик для данной таблицы.

  • Apache Hudi Deltastreamer используется для получения сообщений из Kafka и записи данных в S3.

  • Большинство заданий по обработке данных были написаны в PySpark.

  • Для более сложных заданий используется Scala Spark. Notion также использует многопоточность и параллельную обработку для ускорения обработки 480 сегментов.

Выигрыш

  • Выгрузка данных из Snowflake в S3 сэкономила Notion более миллиона долларов в 2022 году, с еще более значительной экономией в 2023 и 2024 годах.

  • Общее время по приёму и обработки данных с Postgres значительно сократилось: с более чем суток до нескольких минут для небольших таблиц и пары часов для больших.

  • Новая инфраструктура данных открывает дополнительные возможности по использованию аналитики. Она помогла успешно внедрить новый функционал искусственного интеллекта в 2023 и 2024 годах.

Вместо завершения

Больше распределенных отказоустойчивых систем, паттернов, архитектурных кат, System Design интервью в telegram сообществе system_design_world.

Habrahabr.ru прочитано 1564 раза