Simplifying self-adaptive distributed stream processing in C++

Detalhes bibliográficos
Autor(a) principal: Löff, Júnior Henrique
Data de Publicação: 2023
Tipo de documento: Dissertação
Idioma: eng
Título da fonte: Biblioteca Digital de Teses e Dissertações da PUC_RS
Texto Completo: https://tede2.pucrs.br/tede2/handle/tede/10783
Resumo: 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.
id P_RS_ecf9813902434ae743846d80bd138298
oai_identifier_str oai:tede2.pucrs.br:tede/10783
network_acronym_str P_RS
network_name_str Biblioteca Digital de Teses e Dissertações da PUC_RS
repository_id_str
spelling Fernandes, Luiz Gustavo Leãohttp://lattes.cnpq.br/5979862734558983http://lattes.cnpq.br/4303344091053043Löff, Júnior Henrique2023-05-25T18:30:54Z2023-03-30https://tede2.pucrs.br/tede2/handle/tede/10783Fontes 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.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.Submitted by PPG Ciência da Computação (ppgcc@pucrs.br) on 2023-05-11T17:30:14Z No. of bitstreams: 1 JÚNIOR HENRIQUE LÖFF_DIS.pdf: 2559367 bytes, checksum: 8d9ad86ba2451e7388f445a1db051b7d (MD5)Approved for entry into archive by Sarajane Pan (sarajane.pan@pucrs.br) on 2023-05-25T18:05:58Z (GMT) No. of bitstreams: 1 JÚNIOR HENRIQUE LÖFF_DIS.pdf: 2559367 bytes, checksum: 8d9ad86ba2451e7388f445a1db051b7d (MD5)Made available in DSpace on 2023-05-25T18:30:54Z (GMT). No. of bitstreams: 1 JÚNIOR HENRIQUE LÖFF_DIS.pdf: 2559367 bytes, checksum: 8d9ad86ba2451e7388f445a1db051b7d (MD5) Previous issue date: 2023-03-30Coordenação de Aperfeiçoamento de Pessoal de Nível Superior - CAPESapplication/pdfhttps://tede2.pucrs.br/tede2/retrieve/187597/J%c3%9aNIOR%20HENRIQUE%20L%c3%96FF_DIS.pdf.jpgengPontifícia Universidade Católica do Rio Grande do SulPrograma de Pós-Graduação em Ciência da ComputaçãoPUCRSBrasilEscola PolitécnicaStream ProcessingDistributed SystemsParallel ProgrammingProgramming AbstractionsStream ParallelismSelf-AdaptiveC++Processamento de StreamSistemas DistribuídosProgramação ParalelaAbstrações de ProgramaçãoParalelismo de StreamAuto-AdaptativoC++CIENCIA DA COMPUTACAO::TEORIA DA COMPUTACAOSimplifying self-adaptive distributed stream processing in C++Simplificando o processamento distribuido de stream auto-adaptativo em C++info:eu-repo/semantics/publishedVersioninfo:eu-repo/semantics/masterThesisTrabalho não apresenta restrição para publicação-4570527706994352458500500600-8620782570833253013590462550136975366info:eu-repo/semantics/openAccessreponame:Biblioteca Digital de Teses e Dissertações da PUC_RSinstname:Pontifícia Universidade Católica do Rio Grande do Sul (PUCRS)instacron:PUC_RSTHUMBNAILJÚNIOR HENRIQUE LÖFF_DIS.pdf.jpgJÚNIOR HENRIQUE LÖFF_DIS.pdf.jpgimage/jpeg5217https://tede2.pucrs.br/tede2/bitstream/tede/10783/3/J%C3%9ANIOR+HENRIQUE+L%C3%96FF_DIS.pdf.jpgefc9c056ece277359445ef3cefcd84d8MD53TEXTJÚNIOR HENRIQUE LÖFF_DIS.pdf.txtJÚNIOR HENRIQUE LÖFF_DIS.pdf.txttext/plain343001https://tede2.pucrs.br/tede2/bitstream/tede/10783/4/J%C3%9ANIOR+HENRIQUE+L%C3%96FF_DIS.pdf.txtce378411f781f267f195c8153e12f42bMD54ORIGINALJÚNIOR HENRIQUE LÖFF_DIS.pdfJÚNIOR HENRIQUE LÖFF_DIS.pdfapplication/pdf2559367https://tede2.pucrs.br/tede2/bitstream/tede/10783/2/J%C3%9ANIOR+HENRIQUE+L%C3%96FF_DIS.pdf8d9ad86ba2451e7388f445a1db051b7dMD52LICENSElicense.txtlicense.txttext/plain; charset=utf-8590https://tede2.pucrs.br/tede2/bitstream/tede/10783/1/license.txt220e11f2d3ba5354f917c7035aadef24MD51tede/107832023-05-26 12:00:26.334oai:tede2.pucrs.br:tede/10783QXV0b3JpemE/P28gcGFyYSBQdWJsaWNhPz9vIEVsZXRyP25pY2E6IENvbSBiYXNlIG5vIGRpc3Bvc3RvIG5hIExlaSBGZWRlcmFsIG4/OS42MTAsIGRlIDE5IGRlIGZldmVyZWlybyBkZSAxOTk4LCBvIGF1dG9yIEFVVE9SSVpBIGEgcHVibGljYT8/byBlbGV0cj9uaWNhIGRhIHByZXNlbnRlIG9icmEgbm8gYWNlcnZvIGRhIEJpYmxpb3RlY2EgRGlnaXRhbCBkYSBQb250aWY/Y2lhIFVuaXZlcnNpZGFkZSBDYXQ/bGljYSBkbyBSaW8gR3JhbmRlIGRvIFN1bCwgc2VkaWFkYSBhIEF2LiBJcGlyYW5nYSA2NjgxLCBQb3J0byBBbGVncmUsIFJpbyBHcmFuZGUgZG8gU3VsLCBjb20gcmVnaXN0cm8gZGUgQ05QSiA4ODYzMDQxMzAwMDItODEgYmVtIGNvbW8gZW0gb3V0cmFzIGJpYmxpb3RlY2FzIGRpZ2l0YWlzLCBuYWNpb25haXMgZSBpbnRlcm5hY2lvbmFpcywgY29ucz9yY2lvcyBlIHJlZGVzID9zIHF1YWlzIGEgYmlibGlvdGVjYSBkYSBQVUNSUyBwb3NzYSBhIHZpciBwYXJ0aWNpcGFyLCBzZW0gP251cyBhbHVzaXZvIGFvcyBkaXJlaXRvcyBhdXRvcmFpcywgYSB0P3R1bG8gZGUgZGl2dWxnYT8/byBkYSBwcm9kdT8/byBjaWVudD9maWNhLgo=Biblioteca Digital de Teses e Dissertaçõeshttp://tede2.pucrs.br/tede2/PRIhttps://tede2.pucrs.br/oai/requestbiblioteca.central@pucrs.br||opendoar:2023-05-26T15:00:26Biblioteca Digital de Teses e Dissertações da PUC_RS - Pontifícia Universidade Católica do Rio Grande do Sul (PUCRS)false
dc.title.por.fl_str_mv Simplifying self-adaptive distributed stream processing in C++
dc.title.alternative.por.fl_str_mv Simplificando o processamento distribuido de stream auto-adaptativo em C++
title Simplifying self-adaptive distributed stream processing in C++
spellingShingle Simplifying self-adaptive distributed stream processing in C++
Löff, Júnior Henrique
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++
CIENCIA DA COMPUTACAO::TEORIA DA COMPUTACAO
title_short Simplifying self-adaptive distributed stream processing in C++
title_full Simplifying self-adaptive distributed stream processing in C++
title_fullStr Simplifying self-adaptive distributed stream processing in C++
title_full_unstemmed Simplifying self-adaptive distributed stream processing in C++
title_sort Simplifying self-adaptive distributed stream processing in C++
author Löff, Júnior Henrique
author_facet Löff, Júnior Henrique
author_role author
dc.contributor.advisor1.fl_str_mv Fernandes, Luiz Gustavo Leão
dc.contributor.advisor1Lattes.fl_str_mv http://lattes.cnpq.br/5979862734558983
dc.contributor.authorLattes.fl_str_mv http://lattes.cnpq.br/4303344091053043
dc.contributor.author.fl_str_mv Löff, Júnior Henrique
contributor_str_mv Fernandes, Luiz Gustavo Leão
dc.subject.eng.fl_str_mv Stream Processing
Distributed Systems
Parallel Programming
Programming Abstractions
Stream Parallelism
Self-Adaptive
C++
topic 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++
CIENCIA DA COMPUTACAO::TEORIA DA COMPUTACAO
dc.subject.por.fl_str_mv Processamento de Stream
Sistemas Distribuídos
Programação Paralela
Abstrações de Programação
Paralelismo de Stream
Auto-Adaptativo
C++
dc.subject.cnpq.fl_str_mv CIENCIA DA COMPUTACAO::TEORIA DA COMPUTACAO
description 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.
publishDate 2023
dc.date.accessioned.fl_str_mv 2023-05-25T18:30:54Z
dc.date.issued.fl_str_mv 2023-03-30
dc.type.status.fl_str_mv info:eu-repo/semantics/publishedVersion
dc.type.driver.fl_str_mv info:eu-repo/semantics/masterThesis
format masterThesis
status_str publishedVersion
dc.identifier.uri.fl_str_mv https://tede2.pucrs.br/tede2/handle/tede/10783
url https://tede2.pucrs.br/tede2/handle/tede/10783
dc.language.iso.fl_str_mv eng
language eng
dc.relation.program.fl_str_mv -4570527706994352458
dc.relation.confidence.fl_str_mv 500
500
600
dc.relation.cnpq.fl_str_mv -862078257083325301
dc.relation.sponsorship.fl_str_mv 3590462550136975366
dc.rights.driver.fl_str_mv info:eu-repo/semantics/openAccess
eu_rights_str_mv openAccess
dc.format.none.fl_str_mv application/pdf
dc.publisher.none.fl_str_mv Pontifícia Universidade Católica do Rio Grande do Sul
dc.publisher.program.fl_str_mv Programa de Pós-Graduação em Ciência da Computação
dc.publisher.initials.fl_str_mv PUCRS
dc.publisher.country.fl_str_mv Brasil
dc.publisher.department.fl_str_mv Escola Politécnica
publisher.none.fl_str_mv Pontifícia Universidade Católica do Rio Grande do Sul
dc.source.none.fl_str_mv reponame:Biblioteca Digital de Teses e Dissertações da PUC_RS
instname:Pontifícia Universidade Católica do Rio Grande do Sul (PUCRS)
instacron:PUC_RS
instname_str Pontifícia Universidade Católica do Rio Grande do Sul (PUCRS)
instacron_str PUC_RS
institution PUC_RS
reponame_str Biblioteca Digital de Teses e Dissertações da PUC_RS
collection Biblioteca Digital de Teses e Dissertações da PUC_RS
bitstream.url.fl_str_mv https://tede2.pucrs.br/tede2/bitstream/tede/10783/3/J%C3%9ANIOR+HENRIQUE+L%C3%96FF_DIS.pdf.jpg
https://tede2.pucrs.br/tede2/bitstream/tede/10783/4/J%C3%9ANIOR+HENRIQUE+L%C3%96FF_DIS.pdf.txt
https://tede2.pucrs.br/tede2/bitstream/tede/10783/2/J%C3%9ANIOR+HENRIQUE+L%C3%96FF_DIS.pdf
https://tede2.pucrs.br/tede2/bitstream/tede/10783/1/license.txt
bitstream.checksum.fl_str_mv efc9c056ece277359445ef3cefcd84d8
ce378411f781f267f195c8153e12f42b
8d9ad86ba2451e7388f445a1db051b7d
220e11f2d3ba5354f917c7035aadef24
bitstream.checksumAlgorithm.fl_str_mv MD5
MD5
MD5
MD5
repository.name.fl_str_mv Biblioteca Digital de Teses e Dissertações da PUC_RS - Pontifícia Universidade Católica do Rio Grande do Sul (PUCRS)
repository.mail.fl_str_mv biblioteca.central@pucrs.br||
_version_ 1799765361085644800