Когда UK Government Digital Service (Служба Электронного Правительства Великобритании) взялась за GOV.UK код был в основном написан на Ruby. С тех пор мы попробовали в деле несколько языков включая Java, Clojure, Scala, Python и Javascript. В последнее время мы переключились на Go для ряда проектов.
Ниже короткий отчет о полученном опыте. Как мы использовали Go и что на наш взгляд полезно знать другим разработчикам помышляющим о внедрении языка в своем окружении. Если вас интересуют подробности, то более детальную информацию мы публиковали в блоге — router (мой перевод), crawler и CDN acceptance test.
Мы коллективно осознаем, что изучение и экспериментирование с новыми технологиями знакомит нас с новыми подходами и расширяет наше видение. Языки программирования нового поколения предлагают новые методы решения задач.
Мы слышали о Go много лестного. Успешный опыт применения языка в инфраструктуре Google и понимание уровня команды стоящей за этим придавало немало оптимизма, все же решающими факторами для эксперимента стали многопоточность, скорость исполнения и нетребовательность к ресурсам. Другие используемые нами языки просто не могли нам этого предложить.
Язык определен достаточно простой и ясной спецификацией. Это облегчает задачу вызвать начальный интерес у коллег для разбора кода, а потом и участия в разработке. Однако мы ни разу не чувствовали себя ограниченными этой простотой. Когда вам нужна выразительность для построения собственных моделей, абстракция интерфейса и композиционность предоставляют достаточный и надежный арсенал средств.
Хваленая стандартная библиотека языка на поверку таковой и оказалась. Она покрывает широкий спектр обиходных задач включая, например, доступ к файловой системе, постройку HTTP сервисов, консольных утилит, работу с JSON данными и календарными представлениями. Стандартная библиотека имеет достаточную глубину и хорошо продуманную архитектуру. Насколько возможно библиотека построена на RFC стандартах, в качестве основополагающего материала.
Библиотека написана качественным, идиоматичным кодом и прекрасно документирована так, что может служить учебным пособием даже для опытных разработчиков. Кроме того предлагаются курс молодого бойца и утилита стандартного форматирования кода.
За последнии несколько лет мы изучили разные модели развертывания Ruby (вроде Unicorn workers) и построили свои средства. Мы культивируем регулярные и частые релизы. Технологии облегчающие развертывание чрезвычайно востребованы в наших обстоятельствах и здесь Go показал себя с лучшей стороны.
У языка нет специальных требований к системе для поддержки среды исполнения. Программа статически компилируется в один бинарник, который и устанавливается на машине, где будет исполняться. Нет никаких зависимостей времени исполнения (вроде bundle install для Ruby) необходимых на целевой машине. И рестарт сервиса на порядок быстрее и проще, чем в Ruby.
Обычно команда решает, какой язык годится. Это решение командное, а не персональное. Go за последний год завоевал широкое признание у нашей команды. Попробуем объяснить почему.
Им легко заразить людей, от сисадмина который притворялся, что не умеет программировать, до разработчика попробовавшего Go в качестве второго языка. Успешности языка немало способствует заботливое отношение его попечителей. В частности для нас очень важны гарантии обратной совместимости для 1.х релизов.
Утилиты go tool сильно упрощает жизнь при решении типовых задач цикла разработки проекта. Си-образный синтакс упрощает знакомство с языком перед освоением специфичных идиом.
Если вам близок девиз “Make it work. Make it right. Make it fast” («Добейся чтобы работало. Работало правильно. И работало быстро»), тогда можете быть уверены написанное на Go работает достаточно быстро с первой попытки. Скорость исполнения высока и уверенно растет с каждым релизом, а стандартная библиотека хорошо оснащена. Это означает, что мы можем сконцентрироваться на характеристиках нашего кода важных для команды: понятность и читабельность.
Нам в GDS, чтобы полностью перейти на Go, осталость разобраться с парой вопросов. Один из них — управление версиями зависимостей. Для ключевых узлов системы мы должны фиксировать версии кода и версии его зависимостей, и обеспечить воспроизводимую сборку. Попечители языка публично одобрили вендоринг. Нас привлекает использование gom и godep в качестве возможных решений более дружелюбных к разработчику.
Смело можно сказать, что мы намерены наращивать свой массив кода на языке Go.
Ниже короткий отчет о полученном опыте. Как мы использовали Go и что на наш взгляд полезно знать другим разработчикам помышляющим о внедрении языка в своем окружении. Если вас интересуют подробности, то более детальную информацию мы публиковали в блоге — router (мой перевод), crawler и CDN acceptance test.
Почему вообще Go?
Мы коллективно осознаем, что изучение и экспериментирование с новыми технологиями знакомит нас с новыми подходами и расширяет наше видение. Языки программирования нового поколения предлагают новые методы решения задач.
Мы слышали о Go много лестного. Успешный опыт применения языка в инфраструктуре Google и понимание уровня команды стоящей за этим придавало немало оптимизма, все же решающими факторами для эксперимента стали многопоточность, скорость исполнения и нетребовательность к ресурсам. Другие используемые нами языки просто не могли нам этого предложить.
Легкость для понимания
Язык определен достаточно простой и ясной спецификацией. Это облегчает задачу вызвать начальный интерес у коллег для разбора кода, а потом и участия в разработке. Однако мы ни разу не чувствовали себя ограниченными этой простотой. Когда вам нужна выразительность для построения собственных моделей, абстракция интерфейса и композиционность предоставляют достаточный и надежный арсенал средств.
Хваленая стандартная библиотека языка на поверку таковой и оказалась. Она покрывает широкий спектр обиходных задач включая, например, доступ к файловой системе, постройку HTTP сервисов, консольных утилит, работу с JSON данными и календарными представлениями. Стандартная библиотека имеет достаточную глубину и хорошо продуманную архитектуру. Насколько возможно библиотека построена на RFC стандартах, в качестве основополагающего материала.
Библиотека написана качественным, идиоматичным кодом и прекрасно документирована так, что может служить учебным пособием даже для опытных разработчиков. Кроме того предлагаются курс молодого бойца и утилита стандартного форматирования кода.
Легкость в развертывании
За последнии несколько лет мы изучили разные модели развертывания Ruby (вроде Unicorn workers) и построили свои средства. Мы культивируем регулярные и частые релизы. Технологии облегчающие развертывание чрезвычайно востребованы в наших обстоятельствах и здесь Go показал себя с лучшей стороны.
У языка нет специальных требований к системе для поддержки среды исполнения. Программа статически компилируется в один бинарник, который и устанавливается на машине, где будет исполняться. Нет никаких зависимостей времени исполнения (вроде bundle install для Ruby) необходимых на целевой машине. И рестарт сервиса на порядок быстрее и проще, чем в Ruby.
Легкость в применении
Обычно команда решает, какой язык годится. Это решение командное, а не персональное. Go за последний год завоевал широкое признание у нашей команды. Попробуем объяснить почему.
Им легко заразить людей, от сисадмина который притворялся, что не умеет программировать, до разработчика попробовавшего Go в качестве второго языка. Успешности языка немало способствует заботливое отношение его попечителей. В частности для нас очень важны гарантии обратной совместимости для 1.х релизов.
Утилиты go tool сильно упрощает жизнь при решении типовых задач цикла разработки проекта. Си-образный синтакс упрощает знакомство с языком перед освоением специфичных идиом.
Если вам близок девиз “Make it work. Make it right. Make it fast” («Добейся чтобы работало. Работало правильно. И работало быстро»), тогда можете быть уверены написанное на Go работает достаточно быстро с первой попытки. Скорость исполнения высока и уверенно растет с каждым релизом, а стандартная библиотека хорошо оснащена. Это означает, что мы можем сконцентрироваться на характеристиках нашего кода важных для команды: понятность и читабельность.
Что дальше
Нам в GDS, чтобы полностью перейти на Go, осталость разобраться с парой вопросов. Один из них — управление версиями зависимостей. Для ключевых узлов системы мы должны фиксировать версии кода и версии его зависимостей, и обеспечить воспроизводимую сборку. Попечители языка публично одобрили вендоринг. Нас привлекает использование gom и godep в качестве возможных решений более дружелюбных к разработчику.
Смело можно сказать, что мы намерены наращивать свой массив кода на языке Go.
[прим. пер.] Из сторонних Go библиотек GDS активно использует gor для зеркалирования трафика и vegeta для нагрузочного тестирования о чем написано в блоге.
This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.
Комментариев нет:
Отправить комментарий