Термины и сокращения 3
Введение 5
Обзор существующих решений 7
Постановка задачи 9
Глава 1. Subordination: отказоустойчивость из «коробки» . . 10
1.1. Ключевые особенности 10
1.2. Основные компоненты и принцип работы 10
1.3. Возможность обработки сбоев 12
Глава 2. SBN-Python: реализация и использование 14
2.1. Исполнение Python кода 14
2.2. Python/C API и принцип использования 15
2.3. Получившийся интерфейс 15
2.4. Обсуждение 19
Глава 3. SBN-Python: тестирование 21
3.1. Программа 21
3.2. Замеры производительности 23
3.3. Обсуждение 25
Глава 4. SBN-Python: применение на реальном кейсе компании 26
4.1. Задача 26
4.2. Разбор текущего решения 26
4.3. Построение новой архитектуры решения 27
4.4. Реализация и развёртка получившегося решения 28
4.5. Замер производительности 30
Заключение 31
Список литературы 32
Приложение А. Схема работы SBN-Python Hello программы 35
Экосистема языка программирования Python включает в себя множество инструментов для обработки и анализа данных, за счёт чего он становится всё больше востребован в области научных вычислений. Но сегодня реальность такова, что всё чаще появляются задачи, когда вычислительных ресурсов одного компьютера не хватает. В таком случае прибегают к распределенным вычислениям, т.е. вычислениями, производимым на распределенной вычислительной системе.
Любая распределённая вычислительная система представляет из себя множество индивидуальных сущностей (узлов) (см. рис. 1), для связи которых используются различные специализированные программные интерфейсы.
Для такого рода систем создание универсального интерфейса, который бы позволял программировать их без непосредственной привязки к количеству узлов, их физическим характеристикам, количеству параллельных процессов, сетевым адресам и т.п., упирается в свойственную им ненадежность. Действительно, при рассмотрении единственного вычислительного узла, его выход из строя является критической ситуацией, которую нельзя разрешить на уровне программного обеспечения, из-за чего все программы, предназначенные для запуска на одном узле, написаны в предположении, что этот узел абсолютно надежен. Для распределенной системой достаточно большого размера ситуация обстоит совершенно иначе. Выход из строя одного из узлов в данном случае является нормальной ситуацией, поэтому данный интерфейс в таком случае должен предоставлять механизмы для сохранения работоспособности системы в целом. На текущий день в распределенных системах используются достаточно примитивные механизмы обеспечения отказоустойчивости: контрольные точки, дампы памяти и другие интенсивные операции ввода-вывода.
Таким образом, текущие программные интерфейсы, как в целом, так и в Python, либо слишком узкоспециализированные, либо не дают полной отказоустойчивости.
В данной дипломной работе мной был разработан высокоуровневый интерфейс на языке Python для нового фреймворка отказоустойчивых распределённых вычислений Subordination. Получившиеся решение, как и планировалось, соответствует тем же принципам построения распределенного приложения, что и в исходной системе.
Результаты проведения тестирования показали корректность работы интерфейса, прирост производительности при увеличении количества узлов в кластере, а также возможность обработки различных сценариев сбоя узлов за приемлемое время.
Помимо этого, новый интерфейс для отказоустойчивых распределенных вычислений SBN-Python, во-первых, был успешно применён на реальном кейсе компании ООО «Газпромнефть-ЦР», во-вторых, смог показать свои преимущества по сравнению с текущим решением.
В дальнейшем планируется, во-первых, лучше проработать текущее решение, во-вторых, продумать и реализовать возможность использования полученного интерфейса для построения распределенных веб-сервисов.