Перевод статьи из официального блога компании Basecamp (создателей Ruby on Rails) о том, как Go используется в их компании.
Basecamp это компания, полностью завязанная на Ruby. Все наши клиентские приложения написаны на Ruby on Rails, мы используем Ruby для автоматизации с помощью Chef, мы деплоим с помощью Ruby через Capistrano, и для почти любой задачи вы найдете у нас Ruby скрипт, который делает эту работу.
В тоже время, всё больше и больше, язык Go занял место среди наших бекенд-сервисов и инфраструктуры различными способами.
При этом есть еще множество экспериментов на Go, которые ещё не попали в продакшн: поддержка нескольких memcached инстансов в синхронизации из дампов пакетов (?), отдача Campfire через вебсокеты, упаковка наших Rails приложений в докер-контейнеры и другие. Мы также очень активно используем сторонние Go приложения (etcd и sentinel), которые обеспечивают нам фейловер между датацентрами.
Наше использование Go очень естественно. Мы не сели в один прекрасный день и не решили — давайте его использовать. Люди просто брали и начинали писать новые вещи на Go.
Лично мне Go нравится благодаря семантике каналов и горутин, которые очень удобны для программ, обрабатывающих данные, а присущая Go программам производительность означает, что мне не нужно переживать, что мой парсер нагрузит сильно сервер. На самом же языке очень приятно писать код — простой синтаксис, отличная стандартная библиотека, легко рефакторить. Я спросил нескольких наших людей, почему им нравится Go:
Конечно, вы вряд ли когда либо увидите полностью переписанный на Go вариант Basecamp, но Go абсолютно точно занял прочное место в нашей инфраструктуре, и вряд ли его покинет.
Если вы никогда не пробовали 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, попробуйте прямо сегодня!