Netflix TechBlog | Medium на русском
Подписаться
Однопользовательский Titus: изоляция на уровне виртуальных машин на многопользовательской платформе контейнеров
Netflix использует Titus, платформу на базе Kubernetes, для размещения миллионов контейнеров еженедельно в многочисленных регионах AWS. Titus предлагает управляемый опыт работы с контейнерами, беря на себя обслуживание хостов, кластеров и ядра. Он разработан для многопользовательского режима, эффективно разделяя хосты между множеством контейнеров из разных команд. Однако эта модель общего ядра создает проблемы для требовательных систем реального времени из-за конкуренции за аппаратные ресурсы.Эти проблемы возникают потому, что контейнеры совместно используют физические ресурсы, такие как кэши последнего уровня и пропускная способность памяти, которые cgroups не могут полностью изолировать. "Шумные соседи" могут исчерпать эти общие ресурсы, что приведет к снижению производительности и увеличению задержек. Пропускная способность сети и обработка пакетов, IOPS хранилища и различные операции на уровне ядра также способствуют помехам. Stateful-потоковые задания с высокой пропускной способностью особенно уязвимы к этим периодическим помехам, которые могут вызвать значительные простои.Для решения этой проблемы Netflix исследовал несколько стратегий изоляции, включая дальнейшую настройку общего ядра, микроВМ, gVisor и запуск контейнеров непосредственно на EC2. Настройка общего ядра дает постепенные улучшения, но не решает полностью структурную проблему общего оборудования. МикроВМ и gVisor обеспечивали более сильную изоляцию, но сопровождались накладными расходами на производительность, операционной сложностью и аппаратными ограничениями, что делало их менее привлекательными. Запуск контейнеров непосредственно на EC2 переложил бы операционную нагрузку обратно на команды приложений, сводя на нет преимущества Titus.В конечном итоге Netflix решил интегрировать однопользовательский Titus, предлагающий выделенные ВМ для конкретных рабочих нагрузок, в существующую платформу Titus. Этот подход обеспечивает полную изоляцию ВМ, сохраняя при этом знакомый API Titus и управляемый опыт. Команда Compute/Platform по-прежнему владеет и обновляет базовый экземпляр EC2, обеспечивая согласованную операционную модель. Это решение обеспечивает необходимую изоляцию ресурсов и производительности без навязывания ненужных функций безопасности или значительных операционных накладных расходов.