Instagram 2411460b

Как Instagram переносил данные 200 миллионов пользователей из облака Amazon в дата-центры Facebook

instagram_2411460b

Так же, как существует множество причин перевести приложения из внутренних центров обработки данных в облако, есть много причин перейти в другую сторону. Недавняя миграция всего бэкэнда Instagram из публичного облака Amazon Web Services в дата-центры Facebook — хороший пример последнего.

Инженеры Instagram встретили довольно много неожиданных препятствий и были вынуждены мыслить нестандартно и придумать несколько сложных обходных путей, чтобы заставить работать сервисы. Их история является хорошим напоминанием, что мобильность рабочих нагрузок в облаке остается непростым вызовом поставщикам облачных услуги и огромной экосистеме поставщиков решений для пользователей облачных инфраструктур еще только предстоит решить эту проблему.

Основатель и генеральный директор Facebook Марк Цукерберг отметил после приобретения социальной сети по обмену фото в 2012 году, что Instagram в конечном итоге будет пользоваться инженерными ресурсами и инфраструктурой Facebook.

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

Проект миграции не получился сходу, как можно было бы ожидать. «Миграция казалась достаточно простой на первый взгляд: настроить безопасное соединение между Amazon Elastic Compute Cloud (EC2) и центрами обработки данных Facebook и перемещать сервисы по частям» написали инженеры Instagram Рик Брэнсон, Педро Кахаути и Ник Шортвей в соответствующем блоге в четверг.

mOiQt

Но они быстро поняли, что это было совсем не так просто. Основной проблемой на этом первом этапе было то, что IP Facebook конфликтовали с IP EC2. Было принято решение переместить стек данных в Amazon Virtual Private Cloud (VPC), а затем перейти на Facebook с помощью Amazon Direct Connect.

Direct Connect является сервисом Amazon, предоставляемым в центрах обработки данных с colocation, который по существу является прямой частной сетью между серверами заказчика и его публичным облаком. Ориентированный в первую очередь на предприятия, он предназначен для обхода общественного доступа в интернет, чтобы избежать проблем производительности и безопасности.

«VPC предложил гибкость адресации, необходимую, чтобы избежать конфликтов с частной сетью Facebook»,- написали инженеры.

Но миграция приложений из общественной облачной инфраструктуру Amazon в частное облако тоже не так просто, как кажется. Instagram использовала множество серверов EC2 на постоянной основе. Чтобы свести к минимуму время простоя и упростить работу, команда хотела, чтобы EC2 и VPC работали в одной и той же сети — и в этом была проблема.

«AWS не обеспечивает возможность обмена информацией о групповой безопасности или  мостами между EC2 и VPC сетями», написали они. «Единственный способ связи между двумя частными сетями заключается в использовании публичного пространства адресов».

Они вышли на Python и Zookeeper, чтобы написать «демона манипуляции таблицей динамических IP», названного Neti, который содержал функциональность групп безопасности и давал один адрес каждому сервису, независимо от того, в какому облаке он был запущен.

neti_pot

Чайник Neti, используемый в йога-практиках для очистки носовых пазух

Примерно через три недели, миграция в частное облако была завершена, что три инженера назвали самой быстрой VPC-миграцией такого масштаба. Стек данных был готов к переезду в следующий пункт назначения: центры обработки данных Facebook.

Этот шаг процесса был более сложным, потому что команда Instagram хотел сохранить все инструменты управления, построенные для своих производственных систем во время работы на EC2. Это были такие вещи, как скрипты управления конфигурациями, инструменты резервирования и инструмент под названием Fabric, который делал все от развертывания приложений до управления базами данных.

Для портирования инструментов в крайне кастомизированную Linux-среду Facebook, команда заключила все инструменты в Linux Containers, которые сейчас работают на собственных серверах Facebook. «Инструменты резервирования Facebook используются для построения базовой системы, и специальное решение работает внутри контейнера для установки и настройки специфического ПО Instagram»

Проекты, подобные этому, учат команды многим вещам. Обретенная мудрость заключается в планировании, чтобы изменять как можно меньше в системе для поддержки новой среды; идти на «сумасшедшие» идеи, такие как Neti, потому что они могут просто работать; делать свои собственные инструменты, чтобы избежать неожиданностей; и повторно использовать знакомые концепции и рабочие процессы, чтобы уменьшить сложность до минимума.

comments powered by Disqus