Американский онлайновый видеопрокат Netflix всегда приводят в пример в качестве первопроходца технологий «больших данных». Netflix отслеживает всё, что делают его пользователи, и пытается выдавать самые точные рекомендации. Чем больше человек будет смотреть фильмов и сериалов, тем с большей вероятностью он продлит подписку. Можно считать, что большие данные — важнейшая часть Netflix.
Трафик Netflix — это тоже особый разговор: по последним данным, Netflix отвечает более чем за треть всего входящего трафика в США, оставляя позади YouTube, веб и торренты. Не удивительно, что компания нуждается в мощнейших серверах. У Netflix был собственный датацентр, но в какой-то момент стало ясно — он не выдерживает скачков нагрузки, происходящих к тому же почти непредсказуемо. Хоть Netflix и умеет предсказывать популярность, этого, видимо, оказалось недостаточно, чтобы предсказать, когда пользователи решат одновременно пойти смотреть сериал.
Выход из положения был выбран традиционный — отказаться от собственных мощностей и перенести все данные в Amazon Elastic Cloud. «Облако» Amazon позволяет подключать мощности по мере необходимости и платить только за то, что в действительности используешь. Но сервис Amazon предоставляет только необходимый минимум — виртуальные серверы по запросу. Чтобы объединить их в кластер и запустить на нём распределённое приложение, нужно предпринимать отдельные усилия.
Netflix требовалось срочное решение проблемы высокой нагрузки, и было решено обратиться за поддержкой в фирму Pivotal: разработка приложений для работы с «большими данными» считался её сильной стороной (позднее Pivotal приобретёт корпорация EMC). В Pivotal к тому же готовы были работать с теми инструментами, которые уже использовались в Netflix.
Поскольку в Netflix используют преимущественно Java, в Pivotal для веб-разработки решили использовать фреймворк Grails — аналог Ruby on Rails, но с языком Groovy вместо Ruby (собственно, Grails — это сокращение от Groovy on Rails). Groovy хорошо подошёл к остальной инфраструктуре Netflix, так как исполняется на Java Virtual Machine и может обращаться к тем же программным интерфейсам, что и приложения на Java.
Вот как ведущий разработчик проекта Джо Сондоу описывает преимущества Grails: «Он даёт возможность делать быстрые итерации системы. Как только появляется идея, достаточно написать немного кода, и вот уже появляется новая функциональность. Здесь нужно куда меньше обвязочного кода, чем в Java и некоторых других веб-фреймворках».
Поскольку Groovy — это надстройка над Java, считается, что программисты, знающие Java, могут освоить новый синтаксис и новые возможности за считаные дни. Это подтверждает и опыт Netflix: любовь к Groovy распространилась по компании подобно лесному пожару. При этом старые наработки сохраняли полную совместимость с новым кодом, да и наличие в Netflix специалистов по JVM оказалось как нельзя кстати.
Главным результатом работы стала утилита под названием Asgard, код которой в Netflix решили опубликовать под свободной лицензией Apache. Asgard — это интерфейс для развёртывания и управления приложениями, использующими Amazon Web Services.
В первую очередь в Netflix нуждались в системе разграничения доступа к аккаунту Amazon EC2. Большинство сетей и баз данных имеет такую возможность, и логично было внедрить её и в EC2 (давать сотням кодеров доступ к основному аккаунту могло грозить проблемами). Но в то же время разработчикам нужен был способ запускать свои приложения (такие как система регистрации, рейтинги, поиск, автодополнение и т.п.) и управлять ими. Эти задачи в числе прочего решает Asgard.
Кроме того Asgard предоставляет автоматизированный процесс развёртывания приложений с возможностью моментально откатывать изменения обратно, если что-то пойдёт не так, как планировалось. «Нам нужно было простое единое поведение, на которое могли бы рассчитывать разные группы, одновременно отправляющие код», — говорит Сондоу.
С тех пор Asgard получил распространение и используется в IBM, eBay, TRUSTe и применялся на сайтах президентской кампании Барака Обамы.