Ruby + Go lang: как заставить работать вместе и есть ли в этом смысл?

Дата публикации:

Язык программирования Ruby набирает популярность день ото дня. Его главное преимущество заключается в скорости разработки. В среднем она на 30-40% выше, чем при использовании других языков программирования и базирующихся на них фреймворков.

Увеличение скорости разработки достигается за счет наличия обширного набора штатных инструментов. Кроме того, активное сообщество программистов постоянно пополняет базу готовых решений (ruby gems), вследствие чего различные этапы разработки существенно облегчаются.

Впрочем, случаи, когда сервисы с Rails переписываются на других языках, весьма распространены. Так twitter был переписан на Scala, iron.io на Go и т.д. В этой связи, у нас возник один интересный вопрос. Обязательно ли переписывать все приложение? Ведь, по сути, не всегда именно скорость языка становится тем самым “бутылочным горлышком”. В этой роли может выступать, например, база данных или что-то еще.

Итак, мы задались вопросом: а можно ли выделить в приложении такие места, где скорость работы упирается в производительность Ruby и переписать только их, используя высокопроизводительный язык Go? При этом за исключением выбранных мест, код должен оставаться в оригинальном виде. Итак, на повестке дня Ruby и Go Lang.

Реальный пример

Чтобы продемонстрировать преимущества Go на реальном примере, мы будем использовать построение «матрешки» ключевых слов. Это метод позволяет преобразовывать логические связи в многословные низкочастотные запросы из отдельного набора высокочастотных (а значит, более конкурентных) слов. Как известно, низкочастотники требуют меньших усилий для продвижения в поисковых системах. Перед вами пример построения ключа-матрешки:

матрешка

Какие же результаты мы получили после добавления Go вставки:

  • 7000 слов: Ruby — 60 ms, Go – 150 ms;
  • 17000 слов: Ruby – 6 min, Go – 3 min 43 sec;
  • 64000 слов: Ruby – 15 min, Gо – 7 min.

Очевидно, что колоссальный выигрыш в производительности становится заметен при большом объеме данных. Однако глядя на первый пример, становится понятным, что преобразование входных и выходных данных с использованием Go наоборот заняло больше времени. Дело в том, что поставленная перед нами задача не поддается “распараллеливанию”. Если бы данные обрабатывались параллельно, то разница между языками была не столь существенной. Напрашивается вывод: использование выбранного нами метода зависит от конкретно поставленной задачи.

Техническая сторона вопроса

Связать RoR и Go оказалось довольно просто. Для этого нам понадобился гем quartz, который устанавливается в качестве гема в Ruby, а в Go – в качестве плагина. Для обмена данными они используют UNIX сокет, передавая их в JSON формате.

Теперь же перейдем к технической стороне описываемого метода вплотную:

Настройка в Go:

go get github.com/DavidHuie/quartz/go/quartz

Добавляем его в вызываемый скрипт:

import («github.com/DavidHuie/quartz/go/quartz»)

Настройка в Ruby:

gem install quartz

require ‘quartz’

Реализация RPC-сервера на Go

Так как Go вызывается из Ruby, нам нужен способ обмена данными. Quartz позволяет реализовать RPC-сервер для обработки сообщений из Ruby.

Для этого нам необходимо определить следующие объекты:

  • resolver;
  • arguments;
  • response.
  1. Resolver — объект, содержащий методы, которые будут выполняться извне
  2. Arguments — описывает входящие аргументы;
  3. Response — описывает полученный результат.

Программа на Go будет выглядеть примерно следующим образом:

Вызываем удаленные процедуры из Ruby:

Пример кода на Go для построения матрешки ключевых слов:


Код на Ruby – это закоментированный код. То есть реализация Go-алгоритма:

В заключение отметим, что предложенный вашему вниманию метод может значительно повысить производительность работы приложения и увеличить скорость обработки данных без необходимости полного переписывания существующего проекта. Согласитесь, перспектива весьма приятная и, что гораздо важнее — полезная.

Мы Крым Диджитал

С 2015 года мы предоставляем полный цикл услуг мобильной и веб-разработки клиентам из различных отраслей и разных стран.

Подпишись
на наши новости

Контакты пресс-службы

+ 7 (926) 118-80-32

WhatsApp, Viber, Telegram

Давайте обсудим Ваш проект

или свяжитесь с нами по почте projects@crimeadigital.ru

Нажимая кнопку «Отправить», вы даете согласие на обработку персональных данных

Заполните форму или свяжитесь
удобным для Вас способом

Контакты

г. Севастополь, ул. Руднева, д.41, 4 этаж технопарк ИТ-Крым +7 978 679-76-353 agro@crimeadigital.ru

Социальные сети

Нажимая на кнопку, вы даете согласие на обработку персональных данных и соглашаетесь c политикой конфиденциальности

Крым Диджитал приняла участие в стратегической сессии

Руководители Крым Диджитал приняли участие в стратегической сессии, которая прошла на базе СевГУ 10 июня. Вместе с Правительством Севастополя, Институтом информационных технологий и управления в технических системах СевГУ и приглашенными ИТ-компаниями города обсудили перспективу развития системы высшего образования в Севастополе.Представители бизнеса, власти и образовательной системы выступали со своим видением будущих потребностей региона в кадрах, поднимали насущные вопросы обучения студентов, прохождения практики и дальнейшего трудоустройства. Крым Диджитал является амбассадором идеи образования и взращивания молодых кадров, развивает образовательные проекты и на протяжении 5 последних лет ведет активную работу в направлении поддержки и развития молодых специалистов ИТ-отрасли Крыма.

Руководители Крым Диджитал приняли участие в стратегической сессии, которая прошла на базе СевГУ 10 июня.

Вместе с Правительством Севастополя, Институтом информационных технологий и управления в технических системах СевГУ и приглашенными ИТ-компаниями города обсудили перспективу развития системы высшего образования в Севастополе.
Представители бизнеса, власти и образовательной системы выступали со своим видением будущих потребностей региона в кадрах, поднимали насущные вопросы обучения студентов, прохождения практики и дальнейшего трудоустройства.

Крым Диджитал является амбассадором идеи образования и взращивания молодых кадров, развивает образовательные проекты и на протяжении 5 последних лет ведет активную работу в направлении поддержки и развития молодых специалистов ИТ-отрасли Крыма.

Выпуск курса Software Testing

Мы поздравляем выпускников нашего первого в этом году курса Крым Диджитал Академии по Software Testing! Всего курс успешно завершили 13 человек. В течение 2 месяцев несмотря на теплую погоду и манящее море ребята ответственно посещали занятия 2 раза в неделю, делали домашние задания и проверочные работы. Трое начинающих специалистов теперь стажеры нашей компании. Следующий курс намечен на август. Не пропусти анонс записи!

Мы поздравляем выпускников нашего первого в этом году курса Крым Диджитал Академии по Software Testing!

Всего курс успешно завершили 13 человек. В течение 2 месяцев несмотря на теплую погоду и манящее море ребята ответственно посещали занятия 2 раза в неделю, делали домашние задания и проверочные работы. Трое начинающих специалистов теперь стажеры нашей компании.

Следующий курс намечен на август. Не пропусти анонс записи!

Лицензия на образовательную деятельность

В 2022 году мы получили лицензию на образовательную деятельность по программам дополнительного профессионального образования! Теперь мы можем обучать специалистов по направлениям Ruby on Rails, ReactJS и Software Testing и выдавать удостоверения о повышении квалификации государственного образца.
В 2022 году мы получили лицензию на образовательную деятельность по программам дополнительного профессионального образования! Теперь мы можем обучать специалистов по направлениям Ruby on Rails, ReactJS и Software Testing и выдавать удостоверения о повышении квалификации государственного образца.

Мы вошли в Реестр эффективно и социально значимых предприятий.

По результатам ежегодной финансово-экономической аналитики Межотраслевой рейтинговой компании Крым Диджитал включена в Реестр эффективных и социально значимых предприятий. По итогу аналитики, в рамках отрасли (ОКВЭД 62.01) и региона Крым, CDG вошло в 4% лучших компаний страны, с результатом – 92 балла!
По результатам ежегодной финансово-экономической аналитики Межотраслевой рейтинговой компании Крым Диджитал включена в Реестр эффективных и социально значимых предприятий. По итогу аналитики, в рамках отрасли (ОКВЭД 62.01) и региона Крым, CDG вошло в 4% лучших компаний страны, с результатом – 92 балла!