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, попробуйте прямо сегодня!
Комментарии (24)
Mox
01.09.2015 13:35+1Вот бы эти чуваки что-то типа Rails сделали для Go.
Leshrac
01.09.2015 15:02mukizu
01.09.2015 16:18Gin не видел, а Мартини (его не забросили?) и Revel это как-то совсем не RoR
Alexeyco
01.09.2015 17:58Revel — как раз и есть попытка сделать RoR на Go. Это-то и печально, т.к. большая часть всего, что нужно среднестатистическому приложению — уже есть внутри Go. Достаточно все это только обернуть во что-то, более удобное (gorm, gin), и будет счастье.
Если не секрет, чего такого вам не хватает в gorm + gin, без чего никак не обойтись? Автомиграции? Есть в gorm… Шаблонизатор? Есть сразу, из коробки. Библиотека для работы с http — сразу и внутри. Юниттесты? Даже, блин, xml/html парсинг — и тот вкрячили. Управление зависимостями? Есть. Даже китайских хипстеров уже завезли.mukizu
01.09.2015 21:45+1>никак не обойтись
Плюс рельс не в том, что там есть что-то, чего ни у кого больше нет, а в т.н. «магии». Минимум манипуляций и вот этого «оборачивания» итп — максимум результата.Alexeyco
02.09.2015 10:12То есть, как всегда — ничего конкретного. «Не нравится, и все»… и все.
mukizu
02.09.2015 11:52Какой конкретики вам хочется услышать? Я выразился предельно понятно, как мне кажется — плюс или особенность рельс, если хотите, не в том, что они позволяют делать что-то особенное, а в том как они позволяют это делать*. Если вы с ними знакомы, то я не думаю, что мне надо объяснять о чем идет речь.
* — минимум кода при максимуме результата.
olebedev
11.09.2015 09:33Revel — попытка сделать Play Framework.
А вот Beego что то вроде Django/RoR.
googol
01.09.2015 16:45+1Если уж им нужна производительность чего они тот же Crystal не пробуют? github.com/manastech/crystal
Рубишный синтаксис и скорость бинарников выше чем у того же Go. По мне так идеальный компаньон для Руби.matiouchkine
01.09.2015 16:51Им нужна скорость разработки, а не производительность. Они не с руби на го уходят, насколько я понял, а с шелла.
googol
01.09.2015 20:19-1И даже в таком случае логично использовать Ruby-подобный язык. Тем более Crystal отлично подходит для написания утилит.
matiouchkine
01.09.2015 20:21> логично использовать Ruby-подобный язык
Если честно, я не вижу здесь ничего логичного (как и нелогичного.) Совершенно ортогональные области. И да, я умею и люблю кристал.
Alexeyco
01.09.2015 17:52+3Можете дать какую-то ссылку на бенчмарк crystal vs go?
googol
01.09.2015 20:18Навскидку вот github.com/kostya/benchmarks
На некоторых тестах Crystal делает Go по скорости в несколько раз.
googol
03.09.2015 20:18Вот еще одно сравнение www.stefanwille.com/2015/05/redis-clients-crystal-vs-ruby-vs-c-vs-go
nwalker
01.09.2015 18:57Мне не нравится цитировать самого себя, но:
«Я не уверен, что стоит писать на языке, автор которого считает, что вызывать сторонние программы в компайл-тайме — норма.»
M0sTH8
01.09.2015 20:25+1Crystal Status: The project is in alpha stage.
Кажется это исчерпывающий ответ на ваш вопрос.
sergeylanz
03.09.2015 19:21crystal быстрый, но если он так же просто в паралленой работе или как 10 лет назад работать одним тредом?
googol
03.09.2015 20:14Насколько я знаю они активно пилят свою библиотеку в сторону использования coroutines. Так что по сути тоже самое что и в Go. Насчет деталей лучше расспросить в рассылке проекта groups.google.com/forum/?fromgroups#!forum/crystal-lang
estum
02.09.2015 10:49И при всем при этом бейскамп до сих пор тормозит как сука и не умеет слать пуши.
chuikoffru
Мне уже во сне этот гоу мерещится, пиарят его так, хочется попробовать, но сажусь после nodejs, смотрю на синтаксис, смотрю на обилие возможностей, и откладываю, не знаю как подобраться, сделать чего полезного.