Export this record: EndNote BibTex

Please use this identifier to cite or link to this item: https://tede2.pucrs.br/tede2/handle/tede/10783
Document type: Dissertação
Title: Simplifying self-adaptive distributed stream processing in C++
Other Titles: Simplificando o processamento distribuido de stream auto-adaptativo em C++
Author: Löff, Júnior Henrique 
Advisor: Fernandes, Luiz Gustavo Leão
Abstract (native): Data sources such as IoT sensors, user activity logs, health surveillance, and video streaming are becoming ubiquitous worldwide. Often, these sources produce big amounts of raw data, which traditional computing systems based on a store-first and compute-later batch paradigm struggle to handle. Stream processing is an effective solution that can manage these massive workloads while meeting low-latency and highthroughput requirements. However, developing a streaming system from scratch is a challenging endeavor. Distributed stream processing systems (DSPS) like Apache Flink and Apache Storm already provide many abstractions for transparent fault-tolerance, scheduling, communication protocols, and many other mechanisms that assist programmers in writing distributed parallel code. These tools are mostly written in higher-level programming languages like Java and Scala. Nevertheless, C/C++ distributed computing systems are preferred for high-performance computing (HPC), but in this domain, programmers lack high-level programming abstraction options. Consequently, C++ programmers usually rely on low-level MPI for coordinating distributed applications. Also, when using MPI, programmers often employ a static programming model to write their distributed applications, opposite to stream processing which dynamically deals with irregular workloads that vary in content, format, size, and input rate. Streaming systems should allow reconfiguration to self-adapt in response to data flow spikes, slowdowns, and load-balancing issues. This work aims to address these challenges by investigating the adaptability aspects of distributed streaming systems. For that, we introduce a new C++ framework called MPR (Message Passing Runtime), which simplifies the implementation of distributed stream processing applications. The framework relies on MPI’s message-passing communication and implements many programming abstractions, including data transfer, serialization, load balancing, and back pressure. Moreover, we design a novel runtime system that supports MPR’s adaptability capabilities. The runtime system implements algorithms to handle dynamic process creation and includes a synchronization protocol for distributed process coordination. The experimental analysis reveals that MPR’s dynamic runtime system can achieve performance comparable to a static MPI implementation. In addition, we also conduct experiments to evaluate and characterize MPR’s adaptability capabilities. The characterization experiments show that MPR can readily self-configure itself in response to workload variations. Thanks to this work, MPR’s runtime system on top of MPI is now a valuable tool that can be used to test and evaluate other self-adaptive algorithms for distributed stream processing.
Abstract (english): Fontes de dados como sensores IoT, logs de usuários, monitoramento de sinais vitais e streaming de vídeo estão cada vez mais presentes na sociedade. Muitas vezes, essas fontes produzem uma massiva quantidade de dados que os sistemas de computação tradicionais têm dificuldade para lidar. O processamento de stream é uma abordagem computacional que consegue lidar com essas cargas de trabalho massivas, atendendo aos requisitos de baixa latência e alta vazão. No entanto, desenvolver um sistema de streaming é uma tarefa desafiadora. Soluções como o Apache Flink e Apache Storm fornecem diversas abstrações de programação para tolerância a falhas, escalonamento, protocolos de comunicação e muitos outros mecanismos que ajudam os programadores a implementar códigos paralelos e distribuídos. Essas ferramentas são principalmente escritas em linguagens de programação de alto nível como Java e Scala. No entanto, no domínio de computação de alto desempenho, os programadores têm poucas opções de abstração de programação de alto nível quando se trata de sistemas de computação distribuídos escritos em linguagens de sistema como C/C++. Consequentemente, esses programadores muitas vezes dependem de ferramentas de mais baixo nível como o MPI para implementar aplicações distribuídas. Além disso, com MPI é comum empregar-se um modelo de programação estática para implementar aplicações distribuídas, opondo-se ao processamento de stream que lida dinamicamente com cargas de trabalho irregulares que variam em conteúdo, formato, tamanho e taxa de entrada. Os sistemas de processamento de stream devem permitir reconfigurações para se auto-adaptarem a picos no fluxo de dados, desacelerações e problemas de balanceamento de carga. Este trabalho tem como objetivo abordar esses desafios investigando os aspectos de adaptabilidade de sistemas distribuídos de processamento de stream. Para isso, introduziu-se uma nova ferramenta em C++ chamada MPR (Message Passing Runtime), que simplifica a implementação de aplicações distribuídas de processamento de stream. Além disso, criou-se uma nova estratégia que suporta as funcionalidades auto-adaptativas do MPR. A estratégia implementa algoritmos para lidar com a criação dinâmica de processos e inclui um protocolo de sincronização para coordenação de processos distribuídos. Experimentos mostraram que o MPR consegue alcançar desempenho comparável a uma implementação MPI. Além disso, foram realizados experimentos para avaliar e caracterizar a auto-adaptatividade do MPR. Os experimentos de caracterização revelaram que o MPR é capaz de se autoconfigurar em resposta a variações na carga de trabalho. Com este trabalho, o MPR torna-se uma nova opção para implementar, testar e analisar algoritmos auto-adaptativos para processamento distribuído de stream.
Keywords: Stream Processing
Distributed Systems
Parallel Programming
Programming Abstractions
Stream Parallelism
Self-Adaptive
C++
Processamento de Stream
Sistemas Distribuídos
Programação Paralela
Abstrações de Programação
Paralelismo de Stream
Auto-Adaptativo
C++
CNPQ Knowledge Areas: CIENCIA DA COMPUTACAO::TEORIA DA COMPUTACAO
Language: eng
Country: Brasil
Publisher: Pontifícia Universidade Católica do Rio Grande do Sul
Institution Acronym: PUCRS
Department: Escola Politécnica
Program: Programa de Pós-Graduação em Ciência da Computação
Access type: Acesso Aberto
Fulltext access restriction: Trabalho não apresenta restrição para publicação
URI: https://tede2.pucrs.br/tede2/handle/tede/10783
Issue Date: 30-Mar-2023
Appears in Collections:Programa de Pós-Graduação em Ciência da Computação

Files in This Item:
File Description SizeFormat 
JÚNIOR HENRIQUE LÖFF_DIS.pdfJÚNIOR_HENRIQUE_LÖFf_DIS2.5 MBAdobe PDFThumbnail

Download/Open Preview


Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.