Pull to refresh

Go в Basecamp (создатели RoR)

Reading time3 min
Views11K
Original author: Noah Lorang
Перевод статьи из официального блога компании 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, попробуйте прямо сегодня!
Tags:
Hubs:
Total votes 23: ↑17 and ↓6+11
Comments24

Articles