SEMrush выделяется в ряду спонсоров Joker сразу по нескольким причинам. Во-первых, направлением деятельности: компания разрабатывает платформу для маркетологов. Во-вторых, при участии компании в Java-конференции её CTO Олег Краснов известен любовью к C. В-третьих, для неё этот Joker станет первым.

Из-за всего этого только интереснее было расспросить и о том, как в компании обстоят дела с Java, и о подходе к разработке в целом, и об ожиданиях от конференции. Вот с кем мы пообщались:

  • Елена Даниленко, HR generalist
  • Олег Краснов, CTO
  • Анатолий Чичиков, старший Java-разработчик

Елена Даниленко (HR generalist)


— SEMrush впервые становится спонсором Joker — чего компания ждёт от первого опыта?

— В нашей компании большинство рабочих вопросов решается личным общением. Поэтому одна из наших целей — познакомиться, рассказать о себе и пообщаться с Java-разработчиками на интересующие нас темы. Помимо этого, нам очень приятно иметь возможность поучаствовать в поддержке такого значимого события, как конференция Joker. Мы за то, чтобы было больше нетворкинга, хорошего и разного :)

— Порой IT-специалисты недолюбливают понятие «маркетинг» — их не отпугивает то, что вы делаете маркетинговую платформу?

— Отпугивает, скорей всего, не само понятие «маркетинг», а то, что не очень понятно, что именно стоит за этим словом. Но мы ведь не маркетинговая, а IT-компания. Сами мы занимаемся не маркетингом, а разработкой высокотехнологичной онлайн-платформы для людей, которые являются профессионалами в этой сфере или хотят понять своё положение на рынке.

И для нас важна не продуктовая сфера, из которой придёт к нам потенциальный коллега, а то, согласен ли он с нашим подходом к работе. Мы стараемся дать командам разработки максимум свободы в принятии решений — и нам хорошо работается с теми людьми, которые готовы полностью нести ответственность за свой продукт и за процесс его разработки, работая над улучшением качества и того, и другого. Мы стараемся максимально прояснять эту позицию при общении с кандидатами.

— У SEMrush офисы в четырёх странах, а где находятся разработчики (в первую очередь интересует Java)?

— Разработка у нас ведётся в СПб, Праге (Чехия) и Лимассоле (Кипр). Больше всего Java-команд у нас в Санкт-Петербурге: сейчас их семь. На будущий год планируем увеличить это количество хотя бы вдвое. Также Java-девелоперы работают в нашем офисе в Лимассоле.

Олег Краснов (CTO)



— Когда CTO компании специализируется на C, у выбирающего место работы Java-разработчика может возникнуть опасение, что в такой компании он окажется на вспомогательных ролях. Что у вас с этим?

— Специфика SEMrush не в том или ином языке, а в следующем: мы считаем, что команда разработки — это самодостаточный развивающийся организм. И команда может сама выбирать, что ей использовать — включая язык разработки.

Это добавляет свободы, это добавляет ответственности, но и делает процесс управления ситуацией более сложным делом. Управление из сбора отчётов и использования «кнута» превращается в убеждение и мотивацию. Общение равных — это мне по душе.

Добавлю, что отношение к Java у нас как к хорошему языку программирования с большим комьюнити и развивающейся экосистемой. Проекты, написанные на Java, у нас прекрасно существуют и развиваются, что вселяет в нас уверенность в том, что мы хотим, чтобы их количество росло.

— В 2014-м вы выступали с докладом «Когда стоит писать свою базу данных». И в связи с этим интересно: а какой в SEMrush подход к вопросу «брать готовое или делать собственное»?

Такой же, как и с выбором языка: ребята сами решают, какого пути придерживаться, делать что-то своё или использовать стандартное решение. Если же говорить исторически, то в ряде продуктов произошёл переход от стандартных решений к самописным, ведь, как известно, хорошо написанное частное решение работает лучше стандартного.

Если говорить про мой личный опыт, представленный в докладе, то на момент разработки не было ни стабильного работающего Hadoop, ни Mongo, так что я действовал по обстоятельствам :)

— В нашем недавнем материале про холивор Java vs C++ вы упоминали продукт с более чем 150 серверами, и хочется понять: а какой вообще у SEMrush масштаб? Какие ещё есть крупные продукты, сколько суммарно серверов?

— Давайте начнём с «железа». Сейчас у нас около 440 реальных серверов, а также порядка 250 виртуальных машин. Технологический стек разработки, если говорить о языках — от ANSI C до Node.js и, конечно же, Java.

Самые крупные наши проекты — это «Backlinks», «Domain & Phrase Analytics» и «Tracking». «Backlinks» — наиболее крупный и нагруженный из них, более 150 «машин», его смысл в построении базы обратных ссылок всех страниц интернета, эдакий собственный Google. «Domain & Phrase Analytics» — самый старый продукт компании, более 60 серверов, аналитика поисковой выдачи по более чем 30 локальным базам. «Tracking» — один из самых динамично развивающихся продуктов, 28 серверов, динамика позиций сайтов в поисковой выдаче.

Эти три продукта со стороны бэкенда написаны на C/C++, но успешных продуктов на Java у нас тоже хватает — таких, как «SEO Ideas» и «Site Audit», более подробно о них вы можете прочитать на нашем сайте.

Анатолий Чичиков (старший разработчик)



— Какие технологии/инструменты используются в случае с Java (и лично вами, и в SEMrush в целом)?

— Мы приветствуем всё, что облегчает поставку ценности пользователю при минимальных затратах времени. Также всегда стараемся идти в ногу со временем и использовать последние стабильные версии языков и библиотек.

Если говорить о проекте, к которому причастен я, то из Java-фреймворков это, конечно же, Spring (Boot, Web, Data, AMQP). Для анализа текстов используем Lucene. В повседневности широко используем Lombok, Guava и стримы Java 8. Что касается внешних средств хранения данных, то это MongoDB, Redis и RabbitMQ.

В других Java-командах технологии могут варьироваться в зависимости от задач, но зачастую ядро — это Spring и Java 8. Кто-то хранит большие объёмы информации в HDFS и использует Hadoop для обработки. Кому-то важны сложные запросы и транзакции — их выбор PostgreSQL. Есть команды, которые за компромиссы между скоростью вставки и сложностью запросов — используют, как и мы, MongoDB.

Сборка и деплой — Maven, Gradle, Fabric, Ansible. Многие команды используют Docker в продакшене.

Инструменты — Intellij IDEA, TeamCity, YouTrack, GitLab. Из интересного: наша команда достаточно успешно использует XRebel. А на уровне компании сейчас внедряем межкомандное код ревью, пробуем Upsource.

— Есть ли какая-либо недавняя масштабная задача, о которой хотелось бы рассказать?

— Думаю такой масштабной задачей я могу назвать «SEO Ideas»: проект, который начала и пишет уже чуть больше года наша команда. Его цель — превратить кучу непонятных рядовому маркетологу метрик и данных по конкурентам в конкретные рекомендации к действию. Люди любят простоту, поэтому пока стабильно растём.

Это распределённая система потоковой обработки данных. Там есть concurrency, задачи по обработке текстов, работа с внешними API и балансировка нагрузки на них. Серверная бизнес логика полностью на Java, клиентская часть написана на JavaScript. На мой взгляд Java как язык и как платформа уверенно держит удар новых хайповых технологий (NodeJS, Go и т.д.) как по производительности, так и по удобству использования. Соблазна или потребности сменить её у нас не возникало.

— В SEMrush многое сделано на C/C++ — а у вас как Java-разработчика не возникает ощущения «с Java было бы лучше»? :)

— Использование C/C++ — это необходимость в некоторых проектах, так как перед этими командами стоят очень требовательные к ресурсам задачи. Один из самых ярких примеров — составление графа ссылок и ранжирование доменов всего интернета. Использование Java нам бы дорого тут обошлось, и решение использовать C позволило высвободить побольше ресурсов для других, не менее нужных продуктов.

— Хорошо ли Java сочетается с подходом «самоорганизующихся команд»?

— Да, вполне. В нашем случае команда полностью берёт на себя ответственность за свои эксперименты и стабильность продукта, а тут Java и её зрелые библиотеки показывают себя с лучшей стороны: ноги себе простреливаем редко.

Также мы стараемся писать, насколько это возможно, простые и понятные плоские модули, предпочтение отдается горизонтальным связям и постоянной готовности к изменениям. И здесь нас Java тоже обычно не подводит: средства рефакторинга и разрешения зависимостей у нее отличные.

— C «разношёрстностью» команд, самостоятельно выбирающих языки и технологии, не возникают ли у вас сложности с interoperability?

— Нет, здесь никаких проблем. Весь SEMrush — это, по сути, набор микросервисов, и мы в качестве «lingua franca» между ними используем JSON и REST. В отдельных случаях, когда речь идет о большом объёме данных или запросов, возможны бинарные решения, но это скорее исключения, чем правила.

— У вас есть некоторый опыт в Groovy и Scala — а связан ли этот опыт с работой в SEMrush, и используют ли там в продакшене эти языки?

— Сам я в SEMrush практически не писал на этих языках. Но вообще в компании Groovy используется, пусть и менее активно, чем многое другое. Насколько я знаю, в основном его любят QA, они пишут красивые тесты на Spock. У меня самого к Groovy был интерес как к скриптовому языку. В целом он приятен и лаконичен, и я понимаю, за что его любят люди. Тем не менее, вышло так, что скрипты я пишу в основном на Python, и считаю его оптимальным инструментом, когда дело пахнет рутиной.

А Scala, насколько я знаю, у нас пока не прижилась. Сам я некоторое время назад вплотную изучал этот язык, и тоже не могу сказать, что мы с ним сошлись характерами. Язык непростой, требует много времени на изучение, и каждый программист пишет на нём очень по-разному. Просматривая GitHub на тему Scala, можно иногда почувствовать присутствие внеземного разума. На мой взгляд, в эпоху быстро меняющихся требований и однокнопочных интерфейсов это скорее минусы.

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

— Спасибо за ответы, будем ждать вас на Joker!
Поделиться с друзьями
-->

Комментарии (6)


  1. izebit
    06.10.2016 17:17

    Возможно оффтопик, но может кто то доходчиво объяснить, чем kotlin так хорош? Почему его так хвалят? Последнее время этот язык набирает все больше популярности, почему тот же groovy так не стреляет. Сложно поверить, что дело только в jetbrains.


    1. TheKnight
      07.10.2016 00:39
      +1

      По сути все дело в JetBrains:
      1) Выбор ниши языка: Better Java вместо Another JVM Language.
      2) Требование бесшовной интеграции с Java. Если смотреть на код IDEA — требование похоже на выполненное.
      3) Поддержка в IDE: Eclipse & IDEA. Тут ничего сказать не могу.
      4) Обещание обратной совместимости между версиями.
      5) Ну и всякие разные языковые фичи. Ими правда уже не удивить.
      6) Ну и разумеется котики! (Ой, котик пробежал...)

      Навскидку не припомню ни одного языка на JVM со всеми этими особенностями, ну хотя бы без котиков.

      P.S.: Возможно, это просто хайп. Посмотрим, что будет через несколько лет.


    1. dougrinch
      07.10.2016 16:10

      В groovy по дефолту динамическая типизация, этого достаточно чтобы он не выстрелил.


  1. ZOXEXIVO
    06.10.2016 21:55
    -1

    SEMrushBot и этим все сказано


  1. shishmakov
    07.10.2016 17:10

    Я люблю JUG.ru Group, но лучше когда «горшочек варит» на Хабре технические статьи, а не рекламные интервью с компаниями.


    1. phillennium
      07.10.2016 17:11
      +1

      Один и тот же текст можно воспринимать как рекламный, а можно — как познавательный. Конференция — это не только доклады, но и стенды компаний, и многим может быть интересно узнать, что внутри этих компаний. Мы исходим из реакции аудитории: раз у таких материалов положительный рейтинг и тысячи просмотров, значит, хабрасообществу они действительно интересны.

      А технических материалов при этом меньше не становится: только вчера было интервью с Чарльзом Наттером о JVM, позавчера — мнения специалистов о Docker.