BlackRock — одна из крупнейших инвестиционных компаний мира и крупнейшая по размеру активов под управлением (5,7 трлн USD по состоянию на июль'17). Её также называют крупнейшим в мире «теневым банком». Имея 30-летнюю историю и такие впечатляющие показатели, компания не отстаёт от современных тенденций в ИТ-инфраструктуре. В минувшую пятницу в блоге организации CNCF появилась информация о том, что BlackRock удалось за 100 дней выкатить своё production-окружение на Kubernetes. Как они к этому пришли?

Предыстория


О потенциальном интересе BlackRock к Kubernetes стало публично известно в 2015—2016 годах, когда компания начала проводить у себя соответствующие тематические встречи. Например, в сентябре 2015 года на мероприятии, организованном в BlackRock, выступали представители Mesosphere и Calico, а в январе 2016 года — в офисе компании состоялся очередной CoreOS London Meetup.

Aladdin и Docker


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

Aladdin (расшифровывается как Asset Liability and Debt and Derivatives Investment Network) предлагает инвестиционным менеджерам аналитику рисков, совмещённую с управлением портфелем и инструментами для торговли.


Функциональные возможности Aladdin (подробнее см. на сайте продукта)

Изначально созданное для этого решения ядро — Aladdin Core Platform — представлялось «единым унифицированным технологическим стеком для всех приложений, который также называли Aladdin Operation System». Эту «операционную систему» запускали на каждом хосте, где работали приложения платформы. Выбранный подход обеспечивал доступность всех необходимых (общих для приложений) возможностей в хост-системе и не требовал прослойки виртуализации.

Однако со временем начали проявляться серьёзные проблемы, вызванные:

  • необходимостью запуска на тех же машинах сторонних утилит для анализа Big Data (Hadoop и Spark);
  • потребностью в простом масштабировании при всплеске числа запросов;
  • потребностью в простом деплое изолированных тестовых окружений для различных команд разработчиков.

Всё это привело инженеров компании к решению перейти на облачную архитектуру, подразумевающую возможность выделения общего пула ресурсов для любых рабочих нагрузок (как основных приложений, так и стороннего аналитического ПО) и запуска процессов на любых хостах (для горизонтального масштабирования приложений).


Схематичное сравнение архитектуры приложения по версии BlackRock

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

И вот в декабре прошлого года от компании Bitnami появляется информация о том, что BlackRock уже является пользователем Kubeless — serverless-фреймворка для Kubernetes. А позже в том же месяце по различным СМИ распространяются первые публичные подробности о применении K8s всё в той же платформе Aladdin. Наконец, они были дополнены историей успеха на сайте Kubernetes.

Aladdin и Kubernetes


В задачи нового веб-приложения для Aladdin, инфраструктура которого и была реализована с помощью Kubernetes, входило предоставление удобного интерфейса, предлагающего инвесторам доступ к нужным им аналитическим данным. Этот подход пришёл на смену сложным клиентским (т.е. устанавливаемым на пользовательские десктопы) инсталляциям с Python и R, взаимодействующим с серверами проекта, где запускались распределённые вычисления. Для его реализации была собрана команда из 20 человек из разных подразделений BlackRock (по разработке, эксплуатации инфраструктуры и продуктов, управлению проектами), которым и удалось добиться успешного результата за 100 дней.

Изначальный план по созданию облачного веб-приложения был предложен разработчиками компании и заключался в использовании Ansible для описания всей необходимой инфраструктуры. Однако специалисты по эксплуатации указали на плохие перспективы такого подхода (по их версии, он приведёт «к появлению совершенно иного продукта» и «окажется слишком дорогим») и начали поиски другого решения.

Уже имея опыт с «другими облачными окружениями» (какими именно — к сожалению, не уточняется), объединённая команда инженеров остановила свой выбор на Kubernetes. Две основные называемые причины — открытость исходного кода и уверенность в долгосрочных перспективах проекта. Как пояснил вице-президент по эксплуатации продуктов в BlackRock (Uri Morris), в компании обычно выбирают технологии, которые будут в том или ином виде актуальны ещё через 5-10 лет, и молодой Kubernetes уже выглядел достаточно убедительно. Отчасти тому способствовал тот факт, что количество людей не из Google, которые вносят изменения в кодовую базу K8s, превысило число коммиттеров из Google. В качестве дистрибутива Kubernetes была выбрана реализация от коммерческой компании — OpenShift от Red Hat.


Pull-запрос на добавление BlackRock в список пользователей OpenShift

Особенности и результаты внедрения


В процессе реализации архитектуры, основанной на Kubernetes, для платформы Aladdin не обошлось без вызовов. Главными из них стали:

  • корпоративные файрволлы, которые мешали установке различных пакетов по готовым инструкциям (в результате, некоторые улучшения были отправлены в кодовую базу проекта Minikube);
  • сложности с обнаружением сервисов, обусловленные использованием проприетарной шины сообщений для взаимодействия многочисленных сервисов Aladdin, предоставляющих API для быстрого создания приложений;
  • интеграция с существующими инструментами — например, с той же шиной сообщений, что было сделано с помощью отдельного шлюза, через который взаимодействует кластер Kubernetes и встроенные механизмы которого позволили контролировать и регулировать поступающие запросы.

Примечание: В основе BlackRock Messaging System (BMS) — парадигма запрос-ответ. Серверная часть — BmsServer — является многопоточным приложением на C++, а клиентские библиотеки доступны на Java, C++, Python, JavaScript, Perl, C# и Julia. Подробнее об этой системе читайте в блоге компании.


Иллюстрации устройства и работы BlackRock Messaging System

В целом новая инфраструктура для приложения, основанная на Kubernetes, была дополнена уже существующими и привычными для команды эксплуатации инструментами, что позволило сэкономить на персонале (минимизировало необходимость в найме новых людей для обслуживания проекта).

Процесс выкатывания инфраструктуры стал поэтапным и начался с окружения для разработки, за которым последовали тестовое и два production-окружения. На протяжении всего проекта в команде проводились еженедельные 1-часовые встречи со всеми участниками (распределёнными по разным странам), а также дополнительные более короткие обсуждения, посвящённые конкретным техническим моментам. Важной особенностью этого внедрения в целом представители BlackRock называют инициативность со стороны инженеров, которым доверили делать то, что они сами считают правильным.

Результатом проекта стал запуск платформы для внутренних пользователей через 100 дней с момента начала внедрения. Инфраструктура была рассчитана на 30 пользователей, которые появились за первые часы после запуска, поэтому оперативно было произведено масштабирование сервисов для обслуживания 150 человек. Успех реализованной инфраструктуры позволил в BlackRock говорить о намерении перевести на Kubernetes и другие приложения компании, но до принятия окончательного (и масштабного) решения по этому вопросу они хотят накопить опыт эксплуатации в production, на что, по их оценкам, потребуется от полугода до года. Кроме того, в уже упомянутом интервью подтверждается информация о том, что в компании начали работать с serverless-фреймворком для Kubernetes — Kubeless.

А вот используемый в BlackRock технологический стек, который перечислен в актуальной вакансии компании — Senior Big Data Engineer:

  • Java, Python, Greenplum (SQL, SP, Functions), Java, Cassandra, ESP (Complex Event Processing), Git, Maven, Linux;
  • разработка новых продуктов может включать в себя Docker, Kubernetes, Spark, Kafka и Kafka Streams (этот же список указан в требованиях к кандидату).

Среди обязанностей также значится пункт о «развёртывании, проектировании и масштабировании микросервисов».

Другие статьи из цикла


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