megatrade
Для того чтобы стать «монстром рынка», компании Knight Capital потребовалось 17 лет. Ежедневный оборот торгов с ее участием к моменту «компьютерного инцидента» превышал $20 млрд в сутки, за это же время проводилось 3,3 млрд операций с ценными бумагами. Таким образом, в 2012 году Knight Capital считалась крупнейшим трейдером в США с долей 17—20% на Нью-Йоркской фондовой бирже (NYSE) и бирже NASDAQ.
Все изменилось 1 августа, когда NYSE запланировала запуск Retail Liquidity Program.
Новая система позволяла компаниям уровня Knight Capital предлагать своим клиентам цены на акции чуть интереснее, чем другим инвесторам. То есть RLP имитировала закрытые площадки для торговли крупными объемами ценных бумаг — так называемые дарк-пулы. Их иногда называют конкурентами официальных бирж, так как они уводят клиентов, желающих сэкономить на комиссии.
Упомянутая Knight Capital, как и положено продвинутой во всех отношениях компании, была готова к нововведению и владела подходящим инструментом (а также армией разработчиков из 100 человек) — SMARS. Это был «роутер» для подключения других модулей для торговли ценными бумагами.
Суть разработки заключалась в том, что большой заказ от торговой площадки (компонента компьютерной системы Knight Capital) разбивался на маленькие для поиска продавцов и покупателей, чьи условия отвечают желаемым. Чем больше «родительский» заказ, тем больше «дочерних» генерировала система. Одним из основных достоинств SMARS считалась чрезвычайно высокая скорость обработки заказов — до нескольких тысяч в секунду.
Планируемое обновление должно было заменить алгоритм Power Peg, которым в компании не пользовались к 2012 году как минимум восемь лет. При этом коды его вызова по-прежнему оставались в основной системе. Почему и зачем — никто не знал.
Еще один важный момент заключался в специфике Power Peg. Разработка представляла собой тестовую систему, которая действовала по алгоритму «покупай по самой высокой цене, продавай по самой низкой». На бирже принято действовать с точностью до наоборот.
Такая особенность Power Peg продиктована необходимостью проверки работы других программных алгоритмов в полностью контролируемой среде. На самом деле никто никогда не планировал, что это решение появится на продакшене.
Сыграла свою роль и спешка, в которой действовала Knight Capital, — регулятор предоставил всего месяц на развертывание и настройку системы, не давая до июня 2012 года разрешения на работу RLP. Ответственные за IT топ-менеджеры компании, в свою очередь, озвучили команду: «Надо успеть!»
Считается, что «мертвый код» не должен находиться в системе, однако подобная практика все же встречается в крупных программных продуктах, работающих на протяжении длительного времени. То есть как бы «все как у всех».
Стечением (вероятно) обстоятельств стало то, что для запуска нового алгоритма, «заточенного» под RLP, использовался тот же флаг, что и для запуска тестового Power Peg (а он, напомним, работал «задом наперед» с точки зрения торгов на бирже). Такой подход считают браком — особой выгоды он не несет, но может привести к появлению серьезных ошибок.
Инженеры Knight Capital не предусмотрели «аварийный выключатель» системы (хотя такая рекомендация со стороны бирж имеется). Не было и инструкции, которая описывала бы действия в подобной ситуации. К тому же работать им приходилось «по живому», на функционирующей биржевой платформе.
Специалисты решили действовать наверняка и приступили к откату кода на серверах. Поэтому спустя короткий промежуток времени вместо одного «зомби»-сервера появилось два. А потом три — удаляли-то «здоровый» код, освобождая дорогу Power Peg.
За 45 минут, которые потребовались на вывод системы из торгов, 212 «родительских» заказов из-за отсутствия ограничений превратились в тысячи «дочерних», было произведено 4 млн операций с 397 млн акций 154 компаний. Движение средств превышало $6,5 млрд, поэтому итоговая потеря $440—460 млн выглядит не так страшно, хотя и очень внушительно.
«превышал $20 млрд в сутки, за это же время проводилось 3,3 млрд операций с ценными бумагами.»
больше 6 млрд. за одну операцию в рынок вкидывали?
Я как раз торговал американские акции в этот момент и не понимал че происходит)
Как раз сегодня об этом написал.
Если мне не изменяет память, основная проблема возникла из-за того, что обновили 7 из 8 серверов, на последнем, действительно неправильно обрабатывались сообщения из-за повторного использования флага в сообщениях.
Стоит еще отменить, что с тех пор индустрия придумала много нового в управлении и развертывании ПО, CI/CD патерны, blue-green, canary, etc
Знаете о чём тогда я подумал? Какая же это мелочь на фоне моих предыдущих сливов =(
Это случилось в тяжкие для меня времена и я не мог радоваться ничему подобному. Наоборот, вдруг остро осознал всю четность усилий. Даже когда происходит редчайшее событие и система сломалась, даже когда деньги раздают за секунды, всё равно у меня нет шансов вернуть потерянное. А уж когда система эффективна и заточена на отжим моих денег… Остро осознал, что я донор этой системы =(
Сейчас писать это легко. Боль потерь почти полностью забылась, остались только факты и опыт, на нём и выруливаю. =)