![Page 1: Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов](https://reader034.vdocuments.mx/reader034/viewer/2022051514/54b6fcd64a795930278b462d/html5/thumbnails/1.jpg)
![Page 2: Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов](https://reader034.vdocuments.mx/reader034/viewer/2022051514/54b6fcd64a795930278b462d/html5/thumbnails/2.jpg)
Go в продакшене Яндекса
Слава Бахмутов - старший разработчик
Я.Субботник в Минске, 30.08.2014
![Page 3: Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов](https://reader034.vdocuments.mx/reader034/viewer/2022051514/54b6fcd64a795930278b462d/html5/thumbnails/3.jpg)
Структура доклада
1. История Go
2. Краткое описание языка
3. Особенности нашей разработки
4. Выбор и внедрение Go
5. Выводы
3
![Page 4: Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов](https://reader034.vdocuments.mx/reader034/viewer/2022051514/54b6fcd64a795930278b462d/html5/thumbnails/4.jpg)
История Go. Начало.Разработан и поддерживается Google
2007 — начало разработки
2009 — публичный релиз
2012 — go 1.0
2014 — go 1.3. ОС: Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, Plan 9 и Microsoft Windows. Платформы: i386, amd64 и ARM
2015 — go 1.4 поддержка Android?*
4* http://bit.ly/go-android
Роб ПайкКен То́мпсон
![Page 5: Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов](https://reader034.vdocuments.mx/reader034/viewer/2022051514/54b6fcd64a795930278b462d/html5/thumbnails/5.jpg)
История Go. Развитие.
5
https://www.openhub.net/languages/compare
![Page 6: Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов](https://reader034.vdocuments.mx/reader034/viewer/2022051514/54b6fcd64a795930278b462d/html5/thumbnails/6.jpg)
История Go. Развитие.
6
https://www.openhub.net/languages/compare
![Page 7: Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов](https://reader034.vdocuments.mx/reader034/viewer/2022051514/54b6fcd64a795930278b462d/html5/thumbnails/7.jpg)
История Go. Проекты.
7
Gogs
Github репозитории, написанные на Go
![Page 8: Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов](https://reader034.vdocuments.mx/reader034/viewer/2022051514/54b6fcd64a795930278b462d/html5/thumbnails/8.jpg)
История Go. Сообщество.
8
Группа Golang Russian
![Page 9: Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов](https://reader034.vdocuments.mx/reader034/viewer/2022051514/54b6fcd64a795930278b462d/html5/thumbnails/9.jpg)
История Go. Бизнес.
9
Список компаний
![Page 10: Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов](https://reader034.vdocuments.mx/reader034/viewer/2022051514/54b6fcd64a795930278b462d/html5/thumbnails/10.jpg)
Описание языка. Кратко.
1. Очень простой.
2. Компилируемый, со строгой типизаций (и с выводом типов).
3. Со сборкой мусора. (гибридный, остановка мира не больше 10ms)
4. Лёгкие процессы - горутины.
5. Нет дженериков, наследования, переопределения методов, pointer arithmetic.
6. Богатая стандартная библиотека.
7. Большой набор инструментов для разработки (запуск тестов с [покрытием], форматирование кода, кросскомпиляция, отладка, поиск гонок, профилирование и т.д.)
10
![Page 11: Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов](https://reader034.vdocuments.mx/reader034/viewer/2022051514/54b6fcd64a795930278b462d/html5/thumbnails/11.jpg)
Описание языка. Горутины.
1. Очень лёгкие (8кб на создание)
2. Автоматически распределяются по процессорам
3. Непрерывный стэк (до 1.3 был сегментированный)
11
![Page 12: Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов](https://reader034.vdocuments.mx/reader034/viewer/2022051514/54b6fcd64a795930278b462d/html5/thumbnails/12.jpg)
Описание языка. Код.
12
![Page 13: Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов](https://reader034.vdocuments.mx/reader034/viewer/2022051514/54b6fcd64a795930278b462d/html5/thumbnails/13.jpg)
Особенности нашей разработки.
13
Python
C++
~500 RPS
>5000 RPS
![Page 14: Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов](https://reader034.vdocuments.mx/reader034/viewer/2022051514/54b6fcd64a795930278b462d/html5/thumbnails/14.jpg)
Проблемы.
14
С++
медленная разработка
трудно писать юнит тесты
лапша калбеков
Python
медленная работа
жадный до ресурсов
юнит тесты для типов
зависимости
![Page 15: Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов](https://reader034.vdocuments.mx/reader034/viewer/2022051514/54b6fcd64a795930278b462d/html5/thumbnails/15.jpg)
В поисках нового.
15
![Page 16: Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов](https://reader034.vdocuments.mx/reader034/viewer/2022051514/54b6fcd64a795930278b462d/html5/thumbnails/16.jpg)
Внедрение Go в Cocaine.
16* http://bit.ly/cocaine-go
Приложения в облаке — обычные HttpHandler
Приложения запускаются и без Cocaine
Написали фреймворк за выходные*
![Page 17: Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов](https://reader034.vdocuments.mx/reader034/viewer/2022051514/54b6fcd64a795930278b462d/html5/thumbnails/17.jpg)
Выводы. Плюсы.
17
Простота языка
Горутины
Тесты
Мало потребляет, много обрабатывает
Исследование проблем, улов утечек
Питонщики с радостью переходят на Go
Нет зависимостей
Быстрая компиляция
![Page 18: Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов](https://reader034.vdocuments.mx/reader034/viewer/2022051514/54b6fcd64a795930278b462d/html5/thumbnails/18.jpg)
Выводы. Минусы.
18
Отсутствие идеальной IDE (для меня)
Generics - но не так критично
Работа с ошибками
Неочевидность некоторых вещей
Проблемы в библиотеках
Часть вещей приходится писать самим
Плюсовики переходят на Go с трудом
![Page 19: Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов](https://reader034.vdocuments.mx/reader034/viewer/2022051514/54b6fcd64a795930278b462d/html5/thumbnails/19.jpg)
Выводы. Результаты.
19
В 2 раза медленнее C++ и в 8-15 раз быстрее python*
В ~30 раз меньше потребление памяти*
* на наших задачах
Нагрузка на кластер уменьшилась на 70 %
Ручки работают уже год и не единого разрыва