[Перевод] Go в Basecamp (создатели RoR)
Перевод статьи из официального блога компании Basecamp (создателей Ruby on Rails) о том, как Go используется в их компании.
Basecamp это компания, полностью завязанная на Ruby. Все наши клиентские приложения написаны на Ruby on Rails, мы используем Ruby для автоматизации с помощью Chef, мы деплоим с помощью Ruby через Capistrano, и для почти любой задачи вы найдете у нас Ruby скрипт, который делает эту работу.
В тоже время, всё больше и больше, язык Go занял место среди наших бекенд-сервисов и инфраструктуры различными способами.
- Наш демон для получения и хранения данных был переписан с Ruby на Go в январе 2013
- Наши скрипты сборки Ruby собирают новые Ruby пакеты на наших серверах с помощью Docker
- Наша система разбора и хранения логов пишет в Kafka, HDFS и HBase с помощью набора Go программ
- Мы бэкапим наши DNS записи из Dynect утилитой, написанной на Go
- Мы держим мульти-мастер инсталляцию Nagios с помощью утилит на Go
- Мы поддерживаем наши GitHub пост-коммит хуки (post commit hooks) с помощью программы на Go
- Серверная часть нашей трекинговой системы, мониторящей пользователей и просмотры страниц в реальном времени, полностью написана на Go
- Мы регулярно скачиваем, расшифровываем и проверяем целостность наших бекапов баз данных с помощью программы на Go
При этом есть еще множество экспериментов на Go, которые ещё не попали в продакшн: поддержка нескольких memcached инстансов в синхронизации из дампов пакетов (?), отдача Campfire через вебсокеты, упаковка наших Rails приложений в докер-контейнеры и другие. Мы также очень активно используем сторонние Go приложения (etcd и sentinel), которые обеспечивают нам фейловер между датацентрами.
Наше использование Go очень естественно. Мы не сели в один прекрасный день и не решили — давайте его использовать. Люди просто брали и начинали писать новые вещи на Go.
Лично мне Go нравится благодаря семантике каналов и горутин, которые очень удобны для программ, обрабатывающих данные, а присущая Go программам производительность означает, что мне не нужно переживать, что мой парсер нагрузит сильно сервер. На самом же языке очень приятно писать код — простой синтаксис, отличная стандартная библиотека, легко рефакторить. Я спросил нескольких наших людей, почему им нравится Go:
Уилл: Go просто отличная находка для Ops задач. Обработка ошибок очень естественно вписалась в то, как я хочу писать системный софт, и при этом код эффективно умеет использовать многоядерность, и делает это всё лучше и лучше с каждым релизом. Также очень простой деплой, и там где раньше мне нужно было думать, как упаковать зависимости и сконфигурить версии Ruby, теперь я могу просто залить бинарник
Тейлор: Когда вы учите новый язык программирования, рано или поздно приходит момент, когда вы пытаетесь решить реальную проблему и тем самым углубить свои познания в языке и его сильных сторонах. Отличнейшая документация Go, простота тестирования и деплоя (скомпилировать раз и запускать где угодно один бинарник) позволяют даже новичку писать производительный и надежный софт практически с самого начала. Там где вы можете провести часы отлаживая баг многопоточности в вашей программе на Ruby, вы можете потратить минуты, переписав это на Go с помощью каналов, которые вот просто работают. И даже для простых скриптов, которым нужна конкурентность — это огромный выигрыш.
Конечно, вы вряд ли когда либо увидите полностью переписанный на Go вариант Basecamp, но Go абсолютно точно занял прочное место в нашей инфраструктуре, и вряд ли его покинет.
Если вы никогда не пробовали Go, попробуйте прямо сегодня!