Google представил технические детали своего внутреннего инструмента для передачи данных под названием Effingo, который ежедневно перемещает в среднем 1,2 эксабайта информации.
На конференции SIGCOMM 2024 в Сиднее был представлен доклад , в котором поясняется, что ограничения пропускной способности и постоянная скорость света вынуждают Google дублировать данные, чтобы они находились ближе к месту обработки или предоставления. Инструмент Effingo обеспечивает снижение сетевой задержки с сотен миллисекунд до десятков миллисекунд на континенте.
Обычные инструменты передачи данных либо оптимизируют время передачи, либо обрабатывают потоки данных точка-точка, но они не справляются с объёмами данных, которые Effingo перемещает ежедневно – 14 терабайт в секунду. Effingo учитывает важность задач, обеспечивая необходимые ресурсы для выполнения приоритетных задач, таких как восстановление после катастроф по сравнению с плановой миграцией данных.
Effingo оптимизирован для использования файловой системы Colossus, разработанной Google и развернутой в кластерах, состоящих из тысяч машин. В каждом кластере установлено программное обеспечение Effingo, состоящее из управляющей и транспортной плоскостей. Управляющая плоскость управляет жизненным циклом копирования, а транспортная плоскость передает данные и отслеживает статус. Транспортная плоскость потребляет 99% ЦП, но состоит из менее чем 7% строк кода.
Каждый кластер соединён с другими кластерами через сети с низкой задержкой и высокой пропускной способностью, или через WAN-соединения, использующие инфраструктуру Google и сторонних поставщиков. Инструмент Bandwidth Enforcer (BWe), также разработанный Google, распределяет пропускную способность в зависимости от приоритетов сервиса и ценности добавленной пропускной способности.
Когда пользователь инициирует передачу данных, Effingo запрашивает выделение трафика у BWe и начинает перенос данных максимально быстро. Это распределение может происходить на основе заранее определенных квот, используя метрики пропускной способности и доступных рабочих ресурсов Effingo, которые выполняют задачи по перемещению данных в виде “Borg”-задач (платформа контейнеризации Google, из которой была выделена Kubernetes).
Effingo может использовать ресурсы с лучшей попыткой для менее критичных задач и запрашивать квоты для задач, требующих определённой сетевой производительности. Квоты распределяются заранее на несколько месяцев вперёд, и Effingo является одним из многих ресурсов в центральной системе планирования. Неиспользованные квоты перераспределяются, но их можно быстро вернуть при необходимости.
Несмотря на все усилия по распределению ресурсов, средний глобальный размер очереди Effingo составляет 12 миллионов файлов, что эквивалентно около восьми петабайт. В пиковые моменты очереди увеличиваются на 12 петабайт и девять миллионов файлов, когда топ-10 пользователей инициируют новые передачи.
Google планирует улучшить интеграцию Effingo с системами управления ресурсами и оптимизировать использование ЦП при межкластерных передачах. Также запланированы улучшения, чтобы быстрее масштабировать передачи данных.