Правильно ли мы понимаем, Сергей, что это не отдельная “коробка” ПО, а самая настоящая экосистема продуктов, кода и процессов?
Абсолютно верно. И процесс разработки на бирже требует необычного набора навыков, что снова возвращает нас к тематике HPС. Например, альпинист вверх ногами карабкается по отвесной скале. С одной стороны - он находится на пределе своих человеческих возможностей и условий использования окружающей его среды (порода скалы, наличие выступов), а с другой его задача обеспечить максимальную безопасность — упасть нельзя. Это похоже на то, чем мы занимаемся, потому что такой необычный набор “прав и обязанностей” сложно встретить в других областях разработки.
Об этом сложно говорить формализовано?
Со стороны может показаться, что это беспринципные люди, которые сделают что угодно, чтобы “работало быстрее”, но тем не менее, они придерживаются очень строгих принципов и правил.
Вокруг биржи возникает большое количество разнообразной деятельности. Например, нам тоже нужно тестировать код. В тестировании используется и Python, и кое-где Perl, хотя уже меньше, чем раньше. Используются и очень консервативные методики управления и проверки качества. По-английски всё перечисленное обобщается в Software Manufacturing: промышленный производственный процесс, а его главная характеристика — предсказуемый результат.
Личностный фактор исключается?
Его просто не должно быть, так как тогда производственный процесс перестает быть промышленным, если он завязан на какого-то конкретного человека.
Никакого Agile и Lean?
У нас есть места, где мы используем Agile-процессы, примерно 50% разработке используют SCRUM. Но в торгово-клиринговом комплексе этого нет. Отчасти потому, что мы привязаны к экосистеме финансовой отрасли, и не можем ей сказать: “Теперь у нас будут двухнедельные спринты”. Брокеры сойдут с ума. При этом у нас очень мощная команда — 350 человек. А если у стороннего разработчика до 50 человек, то он не сможет за нами угнаться при всем желании.
Поэтому мы работаем в релизном цикле: строим большой релиз, за 2 месяца сообщаем, какие в нём изменения, пишем документацию, создаём тестовые среды. На каждом рынке это происходит приблизительно 3 раза в год, и на самом деле это достаточно высокий темп изменений. По всей бирже выходит около 10 функциональных релизов за год. Плюс у нас есть гигантский пласт индустриального нагрузочного тестирования, когда все подключаются и пытаются нас «завалить». Именно в этот момент мы узнаём цифры нашей пиковой производительности.
Расскажите отдельно о тестировании, это очень интересно, и в связи с риском, и в связи с ответственностью.
Люди понимают под тестированием очень разные вещи. У меня когда-то работал программист, который компилируя программу и видя ошибки, несколько отстранённо смотрел на них, а после пытался скомпилировать код еще раз, видимо, ожидая, что ошибки начнут себя вести как-то иначе. Кто-то даже под этим понимает тестирование.
Все почему-то зациклились на тестировании, хотя тестирование – это самый дорогой способ выявления ошибок, как и проба супа после того как он уже сварен. Мы стараемся делать больший упор на процесс разработки, планирование и управление качеством в процессе, смотрим на ингредиенты еще до того, как они отправляются в кастрюлю. Один из примеров подобного подхода: сидит программист, написал часть кода, нажал “Я готов” и код отправляется другому программисту на ревью. Все изменения у нас проходят такой отбор. Дальше начинается “читка” кода. Когда человек знает, что его ждёт публичное ревью его работы, он вообще по-другому относится к своему делу. Мы начали массово использовать этот подход не так давно, месяца 3-4 назад.
Вы сказали про 350 человек и когда я думаю про “биржу”, мне не кажется данное количество разработчиков очень большим - как они делятся?
Написать программу не сложно, а вот написать индустриальную программу в одиночку невозможно в принципе. В армии на одного лётчика приходится 50 человек обслуживающего персонала, но высокая ответственность лежит на всех.
Разработка торгово-клиринговой системы: 100 человек, написанием кода занимается 40 человек. Все остальные находятся в системе Software Manufacturing - это люди, обеспечивающие остальные части процесса.
Те, кто не пишут непосредственно код программы, пишут другой код, например, для проверки. Если бы у меня была такая возможность, я бы платил людям за каждую найденную ошибку. Предположим, группа разработки и тестирования присылает программу, утверждая, что она работает безошибочно. Я даю это другой команде и отвожу месяц на то, чтобы “вытрясти” максимум ошибок из неё. Именно так я начинал в Bell labs, где все мы были гордыми программистами. Я отдавал своё “идеальное детище”, а через неделю мне приносили список найденных там ошибок. И эти люди были лучшими разработчиками, так как писали то, что “ломало” наши разработки.
Когда вы говорите с возможным кандидатом и спрашиваете, будет он разработчиком или тестировщиком, все смотрят на последнее с минимальным энтузиазмом. Я с этим категорически не согласен - это та же работа программиста, но с очень важной задачей.
Верно ли мы понимаем, что для того чтобы найти высококачественного сотрудника (намеренно не говорим “программиста или разработчика”), то мы говорим о смеси компетенций и желаний, а не о фактических навыках или знаниях?
Человек должен быть заинтересован в самой технологии и иметь интерес в этой бизнес-области.
Мне всегда было интересно работать с финансами, потому что мне интересны деньги, как объект реального мира и центральную модель взаимодействия. Кому-то интересно писать микрокод для холодильника, другим для носимых устройств, роботов и так далее. Мне всегда было интересно писать программы и код, которые ворочают миллиардами и триллионами денежных единиц. На мой взгляд, это гораздо более интересно, чем социальные сети, к примеру.
Как правило, человек, который заинтересован в создании или развитии социальной сети, к нам не пойдёт. Booking.com, к примеру, разрабатывает без тестирования, отправляя мгновенные изменения в продакшен. Для их бизнес-модели это совершенно легитимный подход, в котором проще откатить неудачные доработки. Никто на C или Assembler там не будет писать куски продукта — это долго и нудно. А видеть результаты своей работы сразу же — бесценно.
А на бирже?
Мы не можем такие результаты мгновенно “показать”. И для части разработчиков, которые привыкли видеть результат своей работы, это тяжело. Человеку будет скучно, нужен определённый склад характера.
HPС это узкая вещь?
Нет, вещь на самом деле очень распространённая, а занимается ею масса людей. Он просто невидим, потому что мы потребляем конечный продукт или услугу. Интернет-телевидение, стриминг — это сравнимая вещь. VoIP, где голос “упаковывается” в зависимости от ширины канала, с какой скоростью обрабатывают аналоговые источники в цифровые - это же фантастика. При этом мы просто говорим по телефону, вообще не понимая, что происходит. Декодинг аудио/видео на компьютере — это фантастические объемы операций на очень быстрых процессорах. А что такое процессор? Это микрокод, запаянный в железо.
У вас так же присутствуют программно-аппаратные комплексы в работе Московской биржи?
Мы всегда ищем места, которые можно повысить эффективность за счёт улучшения архитектуры, качества кода, инфраструктурных решений. Но стараемся не привязываться к железу, и в торгово-клиринговой части такой необходимости нет. Хотя в одном месте мы все же зависим от “аппаратуры”.
Это хранение данных — область, где мы вынуждены использовать чужие решения. 20 000 транзакций в секунду на каждом рынке из трёх, это 60 000 операций в секунду – всё это уходит на “вечное” хранение, к которому всегда должен быть доступ - это требования государства и рынка. Кроме того, данные анализируются и продаются как самостоятельный продукт.
Ни одна реляционная база данных на стандартном оборудовании не соответствует таким требованиям. Только колоночные СУБД и аппаратные ускорители Exadata, которые мы используем. Важно не только хранить, но и быстро извлекать.
На сетевом уровне мы переходим на коммуникационную схему InfiniBand. Мы “ныряем” под стандартный стэк TCP-IP и используем уровень ниже. HPP-комплексы дошли до состояния, когда передача информации занимает меньше времени, чем её обработка на процессоре.
В конечном итоге мы хотим прийти к тому, чтобы наше ПО “заводить” в программные ускорители различных типов. Например, протоколы мы хотим обрабатывать на FPGA-картах. Когда вы обсчитываете алгоритмы риска — это простое вычисление в большом количестве “мест”, участков. GPU отлично справляются с этой задачей. Риск-система немецкой биржи построена на рыночных и совершенно классических графических ускорителях. FPGA это настоящее программирование микроконтроллеров. Раньше себе могли позволить подобное только гиганты, вроде Intel. Сейчас для этого свой завод не нужен.
А новые веяния в будущем времени? Тот же blockchain?
Мы пока не видим непосредственного применения блокчейн в нашей области. У него масса привлекательных качеств, любая распределённая система интересна. Безусловно, в каких-то областях, в том числе в финансах, она будет работать. Но у неё есть ряд свойств, которые не удовлетворяет наши потребности. Для торгов получается медленно, а для объемов – неразумно гонять всю базу по всем узлам системы.
Кроме того, вопросы безопасности открыты, потому что в блокчейне целостность строится на консенсусе. Сейчас консенсус в биткойне - это китайские фармеры. Вы этому доверяете? Также, блокчейн ничего не шифрует – информация может быть непонятна, но открыта. Data-mining в блокчейне тяжел, массив так устроен, что копаться в нем очень затратно.
Что вы можете сказать о безопасности?
Для нас это менее животрепещущий вопрос чем, скажем, для интернет ритэйла или банков – мы не предоставляем свободного массового доступа через максимально открытые каналы. Участники подключаются через приватные линии, частные сети, шифрование и так далее — всё это используем уже очень давно.
Какие карьерные перспективы у разработчика в рамках Московской биржи?
Я считаю, что Московская биржа - отличное место для заинтересованного человека. Мы используем всё то, что использует большое предприятия, берём эффективное и применяем в своём поле деятельности. Мы резонируем с рынком. При этом мы занимаемся делом, несущим огромную ответственность, быть частью этого, для меня, значит быть частью чего-то большего. Имея опыт работы на бирже, вы сразу же становитесь мифическим и загадочным персонажем, на мой взгляд, это важно.
Если говорить про языки или навыки — мы используем всё, что есть на рынке. C, C++, Java - это классика, от этого не уйти. Exadata и графические карты, сетевой Infiniband — это то, что нельзя попробовать в большинстве компаний, здесь мы в мейнстриме.
Мы используем современные схемы интеграции —например, технологии DataGrid. Мы были первопроходцами в области архитектурной интеграции, использовали сервисные архитектуры, сервисные шины. Интеграция на уровне “человеческого реал-тайма”, на т.н. энтерпрайз-шинах, это то что мы используем на 100%, конкретных коммерческих решений здесь очень много. У нас сейчас собственный Grid, созданный нами, всё это очень круто для интересующегося специалиста. А конкурентов в России в данных областях, мне кажется, у нас пока нет.