Стэк технологий в WiseAdvice.Tech
Олег Филиппов, СТО WiseAdvice.Tech, рассказал, как эволюционировал стэк технологий в компании.
- Описание
- Подробнее
Описание
Я пришел в компанию в 2018 году. На тот момент стэк был «классический», плотно основанный на 1C (что логично) и Windows. И, кстати, работало все тоже неплохо, видели и хуже. Зачем же тогда мы встали на путь перемен?
Да все просто. IT – без прикрас, самая развивающаяся отрасль в мире.
«Если хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее» – крылатое выражение из книги «Алиса в стране чудес» прекрасно описывает темп. Нельзя останавливаться ни на секунду, встал = проиграл. Именно поэтому в WiseAdvice.Tech мы постоянно растем, меняемся и улучшаемся. Это позволяет нам быть востребованными на рынке. В том числе, как работодатель.
Расскажу, как менялся наш стэк технологий.
Команда
Быстрый рост сопровождался быстрыми темпами непрерывных инноваций и изменений внутри компании и команды. Сейчас в WiseAdvice.Tech работает более 70 человек. Они разбиты на 5-7 человек. Это позволяет быть эффективными и не распыляться.
Команды существуют двух типов – продуктовая и инфраструктурная. Продуктовая состоит из продакт-менеджера, разработчиков, чаще всего в командах есть аналитик и QA. Инфраструктурная команда делится на две части: инженеры и саппорт. У нас нет тимлидов, так как мы стремимся к плоской структуре, однако спросить «что, как» в команде можно у продакт-менеджера.
Начальный стэк
Основой стэка были технологии 1С, ОС – Windows. СУБД – MS SQL. Хранение – Ceph.
Основой Web-стэка был Bitrix, для управления репозиториями кода использовался GitLab. Тикет-система была RedMine. Документация была не систематизирована и представляла из себя хранилище doc и pdf файлов в общем ресурсе.
Текущий стэк
ОС
В большинстве своем – это Windows, в силу большого количества зависимостей от сервисов криптографии, которые работают только под управлением этой ОС + ограничения продиктованные 1С и MS SQL. Но уже порядка 30% сервисов у нас под управлением Ubuntu.От распределенной ФС пришлось отказаться в пользу дисковых полок и SAN, в силу того что основной профиль нагрузки — OLTP (финансовые данные), Latency Ceph были неприемлемы.
СУБД
- PostgreSQL
- Elasticsearch
- MS SQL
- Redis
- BigQuery
- ClickHouse
В качестве RDBMS мы предпочитаем PostgreSQL, хотя большая часть нагруженных реляционных систем у нас пока на MS SQL. Часть сервисов выносим в Яндекс.Cloud. Конечно каждый элемент стэка, включая СУБД, у нас оброс некоторым количеством вспомогательных библиотек, что естественно за годы эксплуатации. ElasticSearch используется для корпоративного и клиентского поиска, а также частично для хранения логов. Хотя большинство логов переезжает в ClickHouse – мы коммерческая компания, и пытаемся экономить ресурсы, а для ElasticSearch их нужно немало.
Backend
- 1С
- Node.js
- .NET
Поскольку основные задачи, с которыми мы сталкиваемся, так или иначе связаны с учетом, а что-то «костылить своими руками» мы не любим, то основой стэка продолжает быть 1С. 1С обеспечивает большинство функций хранения, бэкенда, и бэкофиса. Из 1С мы выносим сервисы, которые требуют нереляционных систем хранения, либо к которым предъявляются повышенные требования по скорости ответа или отказоустойчивости. Также для большинства клиентских сервисов мы пишем свой фронт.
Код
- GitLab
Gitlab в компании используется активно и как удобный интерфейс к хранилищу кода, и как Gitlab CI для автоматизации процессов сборки и развертывания приложений (как в классических стэках, так и 1С). Практически весь код, да и не только код, а также скрипты администрирования и большинство настроек, у нас хранится в GitLab. Почти в каждом репозитории настроен CI. Он пока не статичен, конечно, ещё есть над чем поработать, но уже экономит нам сотни трудочасов ежемесячно.
Frontend
- Angular
- PrimeNG
- Storybook
- Material
- NgXs
- WebStorm
Необходимо создавать продукт, который близок пользователю, однако в то же время поддерживает сложные процессы. Не стоит забывать и о разработчиках – каждый член команды должен быть обеспечен лучшими и самыми современными инструментами. За последние три года стэк WiseAdvice.Tech претерпел громадные изменения.
Angular – Основной фреймворк разработки фронта. Все приложения, разрабатываемые в рамках WiseAdvice.tech являются достаточно сложными и нагруженными различной логикой, поэтому мы на старте закладываем определенные архитектурные паттерны. Angular позволяет нам изначально корректно организовывать код фронтенда для масштабирования приложений. Естественно мы используем только TypeScript. Мы также используем state manager NGXS для управления состоянием в наших приложениях.
PrimeNG – UiKit, который мы используем в основе наших приложений. Компоненты PrimeNG достаточно гибкие и покрывают большую часть потребностей, а также позволяют сэкономить время и избежать множества ошибок.
Storybook — мы придерживаемся компонентного подхода для разработки Web приложений. В идеале уложить приложение в UiKit, и для этого у нас есть PrimeNG. Но если мы пишем свой компонент с какой-то более-менее сложной логикой, то мы сразу описываем и тестируем поведение компонента отдельно. Для того, чтобы упростить разработку, уменьшить количество багов и дать возможность переиспользовать реализованный компонент в других наших Web-проектах.
WebStorm – мы используем единую IDE, чтобы проще было обучать новых членов команды, делиться какими-либо настройками, рекомендованными плагинами. Мы выбрали WebStorm от компании JetBrains. Всем разработчикам мы конечно предоставляем лицензии на WebStorm.
Middleware
- Mule ESB
- RabbitMQ
Скорее всего, еще появится ещё GrahpQL, но пока его нет. Mule ESB мы используем как некоторую «прослойку» между интернетом с cloud-сервисами и Incorporate 1С, в простонародии API Gateway. Впрочем, MuleESB существенно гибче, чем классические API Gateway решения, поэтому при необходимости мы используем и её функционал и для решения задач классической ESB, и для ETL задач.
RabbitMQ – позволяет нам организовывать асинхронные обмены как с внешними так и с внутренними сервисами. Протокол AMQP оборачивается в http в нашем случае, соответственно мы не используем все преимущества RabbitMQ. Но в большинстве сервисов хотя бы не «костылим» свои реализации очередей сообщений на таблицах реляционных БД.
API
- Postman
- OpenAPI
Все наши API мы описываем, Mock-аем и тестируем с использованием Postman. Большая часть наших API уже описана в формате OpenAPI 3. Postman очень удобен для тестирования API. Собственно, об этом, пожалуй, знают все. Но мы пошли дальше – тестирование API прогоняется как часть CI процесса с использованием утилиты Newman. Более того, часть тестов регистрируется как регулярные и добавляется в Postman мониторинг. Использование Mock-серверов позволяет не привязывать жестко разработку фронта к разработке бэка.
Тестирование
- Postman
- Katalon Studio
- Vanessa Behavior
Юнит-тестов у нас нет и не планируется. Мы, к счастью, не банк, и можем себе позволить иногда (но очень редко) ошибиться, не тратя миллионы трудочасов разработчиков на покрытие тестами каждой строчки кода. Хотя и те, кто тратят, как показывает практика, тоже ошибаются. Katalon – отличный стэк для автоматизированного тестирования, который позволяет «ручного» QA превратить в «автоматизированного» за пару дней, абсолютно для него незаметно. Тесты Katalon, конечно, тоже интегрированы в CI на некоторых проектах. Ну а про Postman я уже кратко рассказал выше.
BI
- Google Data Studio
- Google Big Query
Основа нашего BI стэка – продукты Google. Это обеспечивает нам достаточно низкую стоимость владения и очень неплохую интеграцию с маркетинговой аналитикой.
Мониторинг
- Zabbix
- Prometheus
Мы используем оба продукта. Prometheus оброс достаточно большим числом коннекторов, позволяет собирать некоторые метрики, которые не может Zabbix.
Zabbix считают несколько устаревшим продуктом, однако и в нем есть свои плюсы. Например, законченность и визуализаци из коробки, которые снижают стоимость вложения, по крайней мере на начальном этапе.
Орг. среда
- Jira
- Confluence
- Slack
- Telegram
- Zoom
- Miro
Jira и Confluence – основа орг. среды, контроля задач и база знаний. Slack мы используем не во всех командах, а вот Telegram, Zoom и Miro – гигиенический набор. В какой-то момент мы четко поняли, что для ретроспективы необходим Miro, где каждый участник команды может разместить свой стикер. Все делают по стандартизированному формату. Что хорошо, что плохо идеи, предложения – каждый сотрудник накидывает стикеры, и мы их дружно обсуждаем.
Заключение
Надеюсь, эта статья пролила свет на то, как работает WiseAdvice.Tech изнутри и что «под капотом». Конечно, это неоконченная история – по мере развития технологий, роста компании и требований к продуктам будет развиваться и наш технологический стэк. Каждый член команды может вносить что-то новое – и это тоже важная часть развития. У нас не надо согласовывать миллион лет идеи: если что-то нужно – обсуждаем. И кажется, это крайне важно для роста сотрудников и компании в целом.
Присоединяйтесь к нам!