Виртуальная реальность

Как Khan Academy перешла на Go: полмиллиона строк кода и новый уровень производительности

Виртуальная реальность
Half a Million Lines of Go

История масштабного перехода Khan Academy с Python на Go, преимущества и вызовы, опыт инженеров и влияние на производительность и разработку систем.

В декабре 2019 года команда Khan Academy начала масштабный проект под названием Goliath, целью которого стала постепенная миграция бэкенда с монолита на Python 2 на сервисы, написанные с использованием языка программирования Go. Этот проект стал не только техническим вызовом, но и своеобразной революцией в подходах к разработке, организации процессов и поддержке масштабируемости. По истечении некоторого времени Khan Academy перешагнула рубеж в полмиллиона строк кода на Go, что позволило команде поделиться своим опытом и взглядами на этот язык с широкой аудиторией. Рассмотрим ключевые аспекты этого перехода, преимущества Go, а также мнение инженеров, которые участвовали в трансформации системы. Первое, что стоит отметить, это стремление команды подходить к миграции максимально поэтапно.

Вместо агрессивного переписывания всей системы за короткий срок, инженеры сконцентрировались на постепенном внедрении сервисов на Go наряду с уже существующими компонентами на Python. Такой подход снизил риски и позволил получать быстрые результаты по мере роста нового кода. Интересно, что на старте проекта никто из команды не владел Go глубоко — только экспериментальный опыт и базовые знания, полученные до начала проекта, позволили решиться на использование нового инструмента. Сегодня же все бэкенд и full-stack инженеры компании пишут на Go, что отражает уровень адаптации и зрелости владения языком. Преимущества Go очевидны для разработчиков.

Совместная обратная связь от инженеров говорит о том, что язык прост в чтении и написании, но при этом обеспечивает высокую производительность. Один из переходивших с .NET инженеров отметил уникальный стиль обработки ошибок: Go не использует исключения, а возвращает ошибки как значения функций. Это позволяет лучше контролировать успешность выполнения операций и минимизировать неожиданные сбои, что сказывается на надежности системы. Документация стандартной библиотеки Go также заслужила похвалу за удобство и доступность, например, через встроенные инструменты, которые работают без необходимости подключения к интернету, что упрощает процесс обучения и быстрого получения информации во время разработки.

 

В дополнение к языковым особенностям команда высоко оценила инструментарий Go. Быстрый компилятор, автоматическое форматирование кода и относительно стабильное управление зависимостями через Go Modules упростили процесс разработки и поддержки большого кода. В случае Khan Academy удачно применяются и внешние библиотеки, такие как gqlgen, которые облегчают взаимодействие с GraphQL и позволяют создавать гибкие API. Собственный талисман языка — Gopher, разработанный Рене Френч, также добавил неформальный и позитивный оттенок в восприятие сообщества, делая язык более привлекательным. Однако, несмотря на положительные стороны, есть и критика.

 

Наиболее частое замечание — отсутствие поддержки обобщённых (generic) типов, которые могут значительно упростить написание некоторых библиотечных компонентов и работу с коллекциями данных. Эта особенность делала код на Go более многословным и требовательным к повторяющейся логике, особенно при переносе функционала с более выразительных языков, таких как Python. К счастью, команда Go активно работает над внедрением generics, и в Khan Academy с интересом ожидают эту новацию, рассчитывая на повышение компактности и качества кода. Переход с Python на Go требует компромиссов в плане объема написанного кода. В одном из случаев части системы пришлось написать на Go почти в три раза больше кода, чем было в Python.

 

Это связано не только с языковыми различиями, но и с архитектурными изменениями, например, заменой вызовов функций на межсервисные запросы, что повышает уровень модульности и масштабируемости, но добавляет оберток в реализации. Со временем инженеры надеются за счет улучшений в языке и новых библиотечных возможностей сократить объёмы кода и повысить его выразительность. Производительность в ходе миграции показала себя с лучшей стороны. Go выиграл борьбу с Python в скорости выполнения практически во всех сравнительных сценариях. Быстродействие обработки больших массивов данных и параллельных операций действительно впечатляет.

Например, количество предупреждений о конкуренции в Google Cloud Datastore в версиях на Go почти свелось к нулю, в то время как на Python их насчитывалось около сотни в час. Кроме того, загрузка сложного объекта, включающего более тысячи студентов, сократилась с 28 до 4 секунд благодаря лучшей оптимизации и работе с асинхронностью. Касательно параллелизма и конкурентного программирования, Go предлагает разнообразные инструменты. Несмотря на широкую популярность каналов как одной из фишек языка, инженеры Khan Academy отдали предпочтение пакету sync, использующему примитивы синхронизации, что показало лучшую применимость в их рабочих сценариях. Это интересное наблюдение демонстрирует, что практическое использование возможностей языка не всегда совпадает с рекламируемыми концепциями, а зависит от конкретных задач и архитектуры.

Пятьсот тысяч строк кода на Go — это не просто достижение количественного характера, но и важная веха, демонстрирующая зрелость нового стека в реальной промышленной эксплуатации. Несмотря на то, что язык требует больше кода по сравнению с Python, команда отмечает удовольствие от работы, стабильность, быструю сборку и растущие возможности экосистемы. Учитывая разнообразие исходных языков, с которыми пришли инженеры, единое мнение о том, что Go справляется со своей ролью, является существенным свидетельством правильности выбора. Переход на Go в Khan Academy — это пример того, как крупные организации могут успешно обновлять свои технологические платформы постепенно, избегая крупных сбоев и сохраняя при этом развитие функционала. Основой успеха стала команда, открытая к обучению и новым инструментам, а также активное участие сообщества Go, которое поддерживает язык и продолжает его эволюцию, учитывая опыт таких крупных проектов.

Автоматическая торговля на криптовалютных биржах

Далее
Iran is fully disconnected for 48 hours
Суббота, 13 Сентябрь 2025 Иран остался без интернета на 48 часов: причины, последствия и реакции

Массовое отключение интернета в Иране вызвало широкий резонанс в обществе и за его пределами, став причиной серьезных проблем в различных сферах жизни. Разбираемся, почему произошел этот инцидент, какую роль сыграли государственные и социальные факторы и как это отразилось на гражданах и бизнесе.

Attack on Oxford City Council exposes 21 years of election worker data
Суббота, 13 Сентябрь 2025 Кибератака на Совет города Оксфорд: утечка данных за 21 год работы избирательных сотрудников

Кибератака на Совет города Оксфорд стала серьезным вызовом для безопасности и защиты персональных данных. В ходе инцидента злоумышленники получили доступ к информации, хранящейся в системах совета с 2001 по 2022 год, затронув данные работников избирательных комиссий.

What Is a Data Lakehouse?
Суббота, 13 Сентябрь 2025 Что такое Data Lakehouse и почему эта архитектура меняет подход к анализу данных

Подробное рассмотрение концепции Data Lakehouse, её ключевых преимуществ, технических особенностей и влияния на современные информационные системы в условиях растущих требований к обработке больших данных и аналитике.

The Power of Modifiable Things
Суббота, 13 Сентябрь 2025 Сила Изменяемых Вещей: Как Модифицируемое Влияет на Нашу Жизнь и Работу

Исследование значения изменяемых вещей в повседневной жизни и профессиональной деятельности, а также их влияние на развитие, творчество и адаптивность личности.

Mundi.ai is an open source, AI-native web GIS
Суббота, 13 Сентябрь 2025 Mundi.ai — революция в мире веб-GIS с искусственным интеллектом и открытым исходным кодом

Mundi. ai представляет собой уникальную платформу веб-GIS, которая интегрирует передовые технологии искусственного интеллекта и открытый исходный код, что делает её мощным инструментом для анализа, визуализации и управления пространственными данными.

Show HN: I built a minimal invoicing tool for freelancers and makers: Invoroo
Суббота, 13 Сентябрь 2025 Invoroo: Идеальный Минималистичный Инструмент для Выставления Счётов Фрилансерам и Стартапам

Обзор инновационного сервиса Invoroo — простого и мощного инструмента для создания и отправки профессиональных счетов, который помогает фрилансерам и SaaS-стартапам оптимизировать финансовые процессы и экономить время.

Colorado hookless cactus thrives, exits endangered species list
Суббота, 13 Сентябрь 2025 Как кактус без крючков из Колорадо покинул список исчезающих видов и начал процветать

История успеха колорадского кактуса без крючков, который благодаря активным мерам охраны природы и научным открытиям вышел из списка охраняемых видов и теперь стабильно растёт на своей родине в западной части Колорадо.