Конференция разработчиков
высоконагруженных систем
Хочу быть в курсе событий!
Главная → 2013 → Архитектуры
Масштабирование скомпилированных приложений
Когда мы слышим слово «масштабирование», мы обычно думаем о сервисах back-end, базах данных и даже о центрах обработки данных. Но что происходит, когда вам приходится масштабировать скомпилированное приложение в гетерогенной среде с тысячами узлов, которые невозможно контролировать? Как отладить приложение, запущенное на машине, к которой у вас нет доступа, и использующее различные версии библиотек с кастомными патчами, которых у вас нет?
Возможно, вы будете удивлены, узнав, что ошибки в libpcap мешают вам эффективно перехватывать пакеты из сетевого интерфейса, но это еще не все. В драйверах NIC тоже полно ошибок, которые исчезают и вновь появляются в различных версиях ядра в рамках одного и того же релиза крупной операционной системы. Объединение Ethernet-каналов (Ethernet bonding) также имеет собственный «набор» багов при использовании NIC с поддержкой аппаратного VLAN-тегирования.
Я сталкивался с интересными проблемами везде: начиная от компиляторов, ядер, компоновщиков и загрузчиков и заканчивая багами в автоматизированных инструментах, системах автоматизации и даже «острыми углами» в самих упаковочных системах.
У инженеров есть четко определенный набор инструментов, которыми они могут воспользоваться при построении и масштабировании сервисов. Цель моего выступления – определить такой набор инструментов для масштабирования скомпилированных приложений, предложить передовой опыт, предупредить о том, чего стоит остерегаться, и выработать стратегии работы в случае неудачи.