Мы начали формироваться пять лет назад, когда встретились в отделе транспортной разработки финтех компании IQ Option (сейчас Quadcode). Множество интеграционных точек, инфраструктурный уровень и гибкость настройки разрабатываемой транспортной инфраструктуры ставили перед нами задачи не только по поиску нестандартных решений в разработке, но и средств воспроизведения проблем (как функциональных, так и связанных с высокой нагрузкой). Все эти задачи приводили к большому объёму совместной работы разработчиков и тестировщиков, результатом которой явился внутренний командный рабочий процесс, в основе которого лежит равнозначное стремление участников к качеству разрабатываемого продукта.
Самоорганизация, заинтересованность, опыт и личное понимание каждого члена команды о том, каким должен быть конечный продукт, помогают постоянно контролировать процесс разработки, давать чёткое представление о состояние продукта в любой момент времени, а также определять самые ранние этапы подключения тестирования к разработке. Мы можем как вести разработку, где качество является наивысшим приоритетом, так и со строгим балансом качество-сроки, давая полное понимание об уровне готовности продукта и рисках перед выпуском.
* Сведение микросервисов в монолит. Задачей было, не касаясь бизнес логики работы сервисов, добиться их сборки в один бинарник (с сохранением всех принципов обмена данными, исключив при этом сетевой слой). Для этого была разработана общая платформа, на которую потом был переведён процесс инициализации микросервисов и принцип их сборки. Среди прочих задачь была постановка процесса оценки качества и производительности того, что получилось.
* Катастрофоустойчивость. В рамках данной задачи необходимо подвести существующую архитектуру проекта под возможность репликации данных между дата центрами. Среди прочего разрабытвалось решение сквозной транзакции MongoDB для множества микросервисов, с целью повышения уровня консистентности данных в аварийных случаях.
* В рамках тестирования был организован процесс формирования нагрузочной модели на всю систему Mailion и его реализация на k6, с написанием дополнительных плагинов на языке Go.
О команде
Мы начали формироваться в 2017 году, когда встретились в отделе транспортной разработки финтех компании IQ Option (сейчас Quadcode). Множество интеграционных точек, инфраструктурный уровень и гибкость настройки разрабатываемой транспортной инфраструктуры ставили перед нами задачи не только по поиску нестандартных решений в разработке, но и средств воспроизведения проблем (как функциональных, так и связанных с высокой нагрузкой). Все эти задачи приводили к большому объёму совместной работы разработчиков и тестировщиков, результатом которой явился внутренний командный рабочий процесс, в основе которого лежит равнозначное стремление участников к качеству разрабатываемого продукта.
Самоорганизация, заинтересованность, опыт и личное понимание каждого члена команды о том, каким должен быть конечный продукт, помогают постоянно контролировать процесс разработки, давать чёткое представление о состояние продукта в любой момент времени, а также определять самые ранние этапы подключения тестирования к разработе. Мы можем как вести разработку, где качество является наивысшим приоритетом, так и со строгим балансом качество-сроки, давая полное понимание об уровне готовности продукта и рисках перед выпуском.
Интересующая область задач: инфраструктурные, низкоуровневые разработки, исследования.
Наш опыт
Вместе всех членов команды свела работа над первым продуктом – собственным транспортом (шина данных), предназначенным для общения микросервисов компании Quadcode, который писался на C++, с использованием boost, protobuf, gtest и сторонних сервисов Consul, RabbitMQ, Pulsar. Из интересных особенностей можно отметить: конфигурации транспорта на лету, поддержка связи с узлами из kubernetes, находящимися в другом адресном пространстве, огромное количество соединений между инстансами шин, реализованные publisher-subscriber и request-response принципы общения, поддержка гарантии доставки, в совокупности с поддерживаемым рейтом до 260 000 rps между узлами, а также время передачи сообщения меньше 1 ms – все это и многие другие условия ставили высокую планку для разрабатываемого продукта. С формированием команды также появились и задачи по расширению объёма и принципам автотестирования, формированию подхода к процессу оценки качества выпускаемой версии, его контроля, а также разработки принципов тестирования производительности.
Все эти наработки и принципы были использованы и для следующего проекта, частью команды которого мы являлись - websocket’а. Он представляет из себя шлюз между конечным клиентом трейдинговой платформы и транспортной инфраструктуры, основывается на технологии Websocket и написан также на C++.
Затем три года совместного опыта работы было посвящено разработке, которая является тем, что большая часть опишет как service discovery. SD, который, по сути, оркестрирует всем, что происходит в рамках транспортной инфраструктуры: конфигурация того или иного инстанса шины, оценка кто, как и к кому должен подключаться, контроль роутинга сообщений между шинами данных, агрегация состояний клиентов шин и т.д. Написанный на Go, отказоустойчивый, с кластерной архитектурой. Из сторонних сервисов использовались Consul (для интеграции с другими продуктами и хранения настроек), Redis (как временное хранилище на случай сбоев), Graylog (хранение структурированных логов) Prometheus\Grafana. В качестве транспорта использовался gRPC.
Кроме этого, мы приняли на поддержку или участвовали в разработке множества мелких микросервисов, всё больше относящихся к инфраструктурной конфигурации или решающих внутренние задачи. Написаны также на Golang.
Команда
Никифоров Алексей - старший инженер-программист
Более 18 лет опыта в разработке
О себе: “Увлекся программированием еще в далеком детстве, которое переросло в профессию.
Основным язык всегда был С++. Основной рост произошёл лет 10 назад в компании “Код Безопасности”, где пришлось реверсить протокол управления виртуальной инфраструктурой.
Там я познакомился со всеми современными трендами в разработке от стиля написания кода до деплоя, изучил bash, powershell, python. Постоянно интересуюсь как работает та или иная система изнутри, не боюсь опускаться до самого нижнего уровня. Последние 3 года совмещаю разработку на С++ и Go, очень плотно пришлось заниматься проблемами многопоточного кода, отладкой и профилированием.”
Квашнин Владимир - старший инженер-программист
Более 16 лет опыта в разработке
О себе: “Большую часть карьеры разрабатывал на C++, последние 3 года переключился на Golang, в качестве дополнительного языка часто использую Python. Люблю заниматься проектированием архитектуры приложения, автоматизировать процессы разработки, много занимался задачами связанными с многопоточностью, профилированием, оптимизацией и тестированием кода. При разработке учитываю как мой код повлиет на остальную систему, насколько он читабельный, расширяемый. Увлеченный разработчик, постоянно изучаю новые технологии, слежу за тенденциями и новостями в сфере IT.”
Ершов Дмитрий – старший инженер по автоматизации тестирования
18 лет опыта в тестировании, последние три года – в автоматизации тестирования
О себе: “В тестировании с 2005 года. В основном занимался web и все что с ним связано. Начинал с ручного, дорос в этом качестве до ведущего специалиста. На предыдущем месте возглавлял процесс тестирования для своего направления. После перехода в текущую команду начал обучаться автоматизации – прошел курсы Go разработчика в Otus (с успешной защитой дипломной работы) и последние три года занимаюсь автоматизацией тестирования. Также, в качестве отвественного за эксплуатацию всех наших сервисом на всех окружениях, успешно применяю богатый опыт ручного и авто тестирования для поиска\воспроизведения нетривиальных проблем, найденных на различных окружениях.”
Терехов Дмитрий – старший инженер по автоматизации тестирования
17 лет опыта как в разработке, так и в автоматизации тестирования
О себе: “Начинал как C++ разработчик, пока не открыл для себя область тестирования, после чего решил развиваться в ней находя там лучшее себе применение и принося с собой инженерную экспертизу. Первоначальные навыки разработки помогли получить быстрый старт в процессах автоматизации и всю карьеру служат хорошим фундаментом для понимания принципов написания и внутреннего устройства приложений. В числе прочего это позволяет находить наиболее ранний точки внедрения контроля качества, что в свою очередь служит главному делу контроля - снижению стоимости разработки. Есть опыт управления смешанной QA командой, от ручного до автоматизированного тестирования, постановка процесса качества в продуктах, найм и сопровождение сотрудников. В последние годы посвятил себя тестированию производительности и нагрузочному тестированию со всеми производными типами и процессами. В разное время использовал: C++, Java, python, go”
Технологии и навыки
General
Go
C++17
Тестирование
Разное