Термины и сокращения 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, во-первых, был успешно применён на реальном кейсе компании ООО «Газпромнефть-ЦР», во-вторых, смог показать свои преимущества по сравнению с текущим решением.
В дальнейшем планируется, во-первых, лучше проработать текущее решение, во-вторых, продумать и реализовать возможность использования полученного интерфейса для построения распределенных веб-сервисов.
[1] Parallel Processing and Multiprocessing in Python [Электронный ресурс] URL: https://wiki.python.org/moin/ParallelProcessing(дата обращения: 20.11.2020)
[2] A Gentle Introduction to Ray [Электронный ресурс] URL: https://docs.ray.io/en/master/ray-overview/index.html(дата обращения: 25.01.2021)
[3] Moritz P., Nishihara R., Wang S., Tumanov A., Liaw R., Liang E., Paul W., Michael I., Stoica I. Ray: A Distributed Framework for Emerging AI Applications //In 13th USENIX Symposium on Operating Systems Design and Implementation (OSDI ’18). 2018.
[4] John C., Mitchell. Concepts in programming languages // Cambridge University Press. 2003. P. 529.
[5] Ray 1.0 Architecture [Электронный ресурс]
URL: https://docs.google.com/document/d/1lAy0Owi-
vPz2jEqBSaHNQcy2IBSDEHyXNOQZlGuj93c/preview# (дата обращения: 27.11.2020)
[6] Babuji Y., Chard K., Foster I., Katz D. S., Wilde M., Woodard A., Wozniak J. Parsl: Scalable Parallel Scripting in Python //In 10th International Workshop on Science Gateways (IWSG ’18). CEUR-WS.org. 2018.
[7] Babuji Y., Woodard A., Li Z., Katz D. S., Clifford B., Kumar R., Lacinski L., Chard R., Wozniak J., Foster I., Wilde M., Chard K. Parsl: Pervasive Parallel Programming in Python // In 28th ACM International Symposium on HighPerformance Parallel and Distributed Computing (HPDC). 2019.
[8] Dean J., Ghemawat S. MapReduce: Simplified Data Processing on Large Clusters // In 6th USENIX Symposium on Operating Systems Design and Implementation (OSDI ’04). 2004. P. 137-150.
[9] Mundkur P., Tuulos V., Flatow J. Disco: a computing platform for large- scale data analytics // Erlang ’11: Proceedings of the 10th ACM SIGPLAN workshop on ErlangSeptember. 2011. P. 84-89.
[10] Гусейнов А., Бочкова И. Исследование распределенной обработки данных на примере системы Hadoop. 2016.
[11] Gankevich I., Tipikin Y., Gaiduchok V. Subordination: Cluster management without distributed consensus // In International Conference on High Performance Computing Simulation (HPCS). 2015. P. 639-642.
[12] Gankevich I., Tipikin Y., Korkhov V. Subordination: Providing resilience to simultaneous failure of multiple cluster nodes // In Proceedings of International Conference on High Performance Computing Simulation (HPCS’17). 2017. P. 832-838.
[13] Python Implementations [Электронный ресурс] // URL: https://wiki.python.org/moin/PythonImplementations(дата обращения 01.10.2020)
[14] cPython [Электронный ресурс] URL: https://github.com/python/cpython(дата обращения 17.10.2020)
[15] Python/C API Reference Manual [Электронный ресурс] URL: https://docs.python.org/3/c-api/index.html(дата обращения: 05.10.2020)
[16] Pickle - Python object serialization [Электронный ресурс] URL: https://docs.python.org/3/library/pickle.html(дата обращения: 11.10.2020)
[17] Python Global Interpreter Lock [Электронный ресурс] URL: https://tproger.ru/translations/global-interpreter-lock-guide/(дата обращения: 15.10.2021)
[18] Multiprocessing - process-based parallelism [Электронный ресурс] // URL: https://docs.python.org/3/library/multiprocessing.html(дата обращения 21.10.2020)
[19] Earle M. D. Nondirectional and Directional Wave Data Analysis Procedures // Louisiana: Neptune Sciences, Inc. 1996. P. 37.
[20] National Data Buoy Center [Электронный ресурс] URL: http://www.ndbc.noaa.gov/dwa.shtml(дата обращения: 07.12.2020)
[21] Геофизические методы исследований // Сейсморазведка [Электронный ресурс] URL:
https://www.geokniga.org/sites/geokniga/files/inbox/1209/chapter1.pdf(дата обращения: 10.03.2021)
[22] SEG-Y [Электронный ресурс] URL: https://ru.qaz.wiki/wiki/SEG-Y(дата обращения: 20.03.2021)
[23] NPY format [Электронный ресурс] URL:
https://numpy.org/devdocs/reference/generated/numpy.lib.format.html(дата обращения: 01.04.2021)
[24] Bulk Synchronous Parallel [Электронный ресурс] URL: https://ieeexplore.ieee.org/document/552669(дата обращения: 10.04.2021)
[25] Технология In-Memory Computing [Электронный ресурс] URL: https://www.crn.ru/news/detail.php?ID=124497(дата обращения: 13.04.2021)
[26] Введение в реактивное программирование [Электронный ресурс] URL: https://habr.com/ru/company/arcadia/blog/432004/(дата обращения: 17.04.2021)
[27] Invoking guix pack [Электронный ресурс] URL: https://guix.gnu.org/manual/en/html_node/Invoking-guix-pack.html(дата обращения: 20.04.2021)