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

Как 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, которое поддерживает язык и продолжает его эволюцию, учитывая опыт таких крупных проектов.

Автоматическая торговля на криптовалютных биржах Покупайте и продавайте криптовалюты по лучшим курсам Privatejetfinder.com (RU)

Далее
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 Как кактус без крючков из Колорадо покинул список исчезающих видов и начал процветать

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