As cargas de trabalho altamente paralelas, também conhecidas como cargas de trabalho descaradamente paralelas, são comuns em empresas de finanças, meios de comunicação e ciências da vida. Para cargas de trabalho paralelas como estas, as empresas implementam normalmente um cluster de nós de computação. Cada nó pode realizar tarefas de processamento independentes numa configuração denominada computação em grelha. Para processar dados para cargas de trabalho paralelas, pode usar o Apache Beam com o Dataflow. Para mais informações sobre o Apache Beam, consulte o guia de programação do Apache Beam.
A utilização do Dataflow para cargas de trabalho altamente paralelas oferece muitas vantagens.
- Crie um fluxo de trabalho totalmente gerido, com processamento e orquestração de dados no mesmo pipeline.
- A interface do utilizador e a API Dataflow incluem funcionalidades de observabilidade.
- O Dataflow tem registo centralizado para todas as fases do pipeline.
- O Dataflow oferece escala automática para maximizar o desempenho e otimizar a utilização de recursos.
- O Dataflow é tolerante a falhas e oferece um equilíbrio de carga dinâmico.
- O Dataflow oferece deteção e correção de valores atípicos.
- Use um único sistema para todos os aspetos do pipeline, tanto para o pré-processamento como para o pós-processamento e para o processamento de tarefas. Pode até usar o seu código C++ existente no pipeline.
- Use o processamento exatamente uma vez incorporado que o Dataflow oferece.
Além disso, o Dataflow inclui várias funcionalidades de segurança:
- Use uma chave de encriptação gerida pelo cliente (CMEK) com o seu pipeline.
- Defina regras de firewall para a rede associada à sua tarefa do Dataflow.
- Use uma rede VPC.
Estas cargas de trabalho requerem a distribuição de dados para funções executadas em vários núcleos. Esta distribuição requer frequentemente leituras de concorrência muito elevadas, seguidas de uma grande expansão de dados, absorvida pelos sistemas a jusante. As competências principais do Dataflow são a distribuição de cargas de trabalho em lote e de fluxo contínuo entre recursos e a gestão do dimensionamento automático e do reequilíbrio dinâmico do trabalho entre estes recursos. Por conseguinte, quando usa o Dataflow para as suas cargas de trabalho altamente paralelas, as necessidades de desempenho, escalabilidade, disponibilidade e segurança são processadas automaticamente.
Incorpore código externo no seu pipeline
Atualmente, o Apache Beam tem SDKs incorporados para Java, Python e Go. No entanto, muitas cargas de trabalho altamente paralelas usam código escrito em C++. Pode usar o Dataflow e outros serviços da Google Cloud Platform para executar binários (bibliotecas) C++ como código externo através do Apache Beam. A inclusão de ficheiros binários C++ permite-lhe desbloquear estes tipos de cargas de trabalho através de serviços totalmente geridos. Também lhe dá a capacidade de criar pipelines completos através de um gráfico acíclico orientado (DAG) sofisticado.
A mesma abordagem para executar ficheiros binários C++ também é relevante para código escrito noutros idiomas em que pode compilar um ficheiro binário autónomo.
Pipelines altamente paralelas de ponto a ponto
Com o Dataflow, pode fazer o processamento de leitura/escrita de I/O, a análise e a saída de tarefas tudo no mesmo pipeline, o que lhe permite executar pipelines altamente paralelos completos
Por exemplo, uma carga de trabalho altamente paralela de HPC pode incorporar os seguintes passos:
Carregar dados não processados, tanto de origens internas como externas. Os dados podem vir de origens ilimitadas ou limitadas. As origens ilimitadas são convertidas principalmente em origens limitadas para se adaptarem às tecnologias usadas para a criação de tarefas.
Pré-processar os dados não processados num formato e codificação de dados que o componente de processamento distribuído possa usar.
Use um sistema para distribuir os cálculos aos anfitriões e obter dados de uma origem e, em seguida, concretizar os resultados para análise posterior.
Realizar uma análise posterior para converter os resultados em saída.
Pode usar o Dataflow para gerir todos estes passos num único pipeline, enquanto tira partido das funcionalidades do Dataflow:
Uma vez que um único sistema é responsável por todas as fases, não precisa de um sistema de orquestração externo para coordenar a execução de vários pipelines.
Com a localidade dos dados, não precisa de materializar nem desmaterializar explicitamente entre os limites das fases, o que aumenta a eficiência.
Com uma melhor telemetria no sistema, as informações sobre o total de bytes na fase estão disponíveis, o que ajuda a conceber fases posteriores.
Com o dimensionamento automático, quando os dados estão no sistema, os recursos são dimensionados com base nos volumes de dados à medida que os dados se movem pelas fases do pipeline.
O pipeline de HPC do Dataflow altamente paralelo usa motores de execução DAG modernos. Todos os processos típicos do pipeline podem ser concluídos num único DAG e, por conseguinte, num único pipeline do Dataflow. Pode usar um DAG gerado pelo Apache Beam para definir a forma do pipeline.
Se estiver a migrar de um sistema de tarefas simples para um fluxo de trabalho altamente paralelo, tem de mudar das tarefas para os dados. Um PTransform
contém um
DoFn
,
que tem uma função de processamento que recebe um elemento de dados.
O ponto de dados pode ser qualquer objeto com uma ou mais propriedades.
Ao usar um DAG e um único pipeline, pode carregar todos os dados no sistema durante todo o fluxo de trabalho. Não tem de enviar dados para bases de dados nem para armazenamento.
Componentes da Google Cloud Platform usados com fluxos de trabalho altamente paralelos
As aplicações de computação em grelha requerem que os dados sejam distribuídos a funções executadas em vários núcleos. Este padrão requer frequentemente leituras de alta concorrência e é frequentemente seguido por uma grande expansão dos dados absorvidos pelos sistemas a jusante.
O Dataflow está integrado com outros serviços geridos da Google Cloud Platform que podem absorver E/S de dados paralelizados em grande escala:
- Pub/Sub: armazenamento de colunas largas para colocação em cache e publicação
- Bigtable: serviço de carregamento de streams de eventos globais
- Cloud Storage: loja de objetos unificada
- BigQuery: serviço de armazém de dados à escala de petabytes
Quando usados em conjunto, estes serviços oferecem uma solução apelativa para cargas de trabalho altamente paralelas.
A arquitetura comum para cargas de trabalho altamente paralelas executadas na Google Cloud Platform inclui o seguinte:
O Dataflow Runner para Apache Beam. Este executor distribui o trabalho pelos nós da grelha com um fluxo de processamento derivado de um DAG. Um único DAG do Apache Beam permite-lhe definir pipelines complexos de várias fases nos quais as fases de pipeline paralelas podem ser reunidas através de entradas laterais ou junções.
Cloud Storage. Este serviço fornece uma localização para preparar os ficheiros binários C++. Quando é necessário armazenar ficheiros grandes, como em muitos exemplos de utilização de multimédia, esses ficheiros também residem no Cloud Storage.
Bigtable, BigQuery e Pub/Sub. Estes serviços são usados como origens e destinos.
O diagrama seguinte descreve a arquitetura de alto nível de um exemplo de fluxo de trabalho.
Também pode usar outros sistemas de armazenamento. Para ver detalhes, consulte a lista de sistemas de armazenamento e origens de streaming na página de E/S de pipelines na documentação do Apache Beam.
O executor do Dataflow para o Apache Beam
Use o Dataflow para transformar e enriquecer os seus dados nos modos de streaming e em lote. O Dataflow baseia-se no Apache Beam.
Cloud Storage
O Cloud Storage é um armazenamento de objetos unificado que abrange a publicação de dados em tempo real, a análise de dados, a aprendizagem automática (ML) e o arquivo de dados. Para fluxos de trabalho altamente paralelos com o Dataflow, o Cloud Storage fornece acesso a ficheiros binários C++. Em alguns exemplos de utilização, o Cloud Storage também fornece a localização dos dados necessários para a fase de processamento.
Para os carregamentos de picos elevados exigidos pela computação em grelha, tem de compreender as características de desempenho do Cloud Storage. Para mais informações acerca do desempenho de publicação de dados do Cloud Storage, consulte as Diretrizes de taxa de pedidos e distribuição de acesso na documentação do Cloud Storage.
Bigtable
O Bigtable é um serviço de base de dados NoSQL de elevado desempenho otimizado para grandes cargas de trabalho analíticas e operacionais. O Bigtable é
complementar ao Dataflow. As principais características do Bigtable, as leituras e as escritas de baixa latência (6 ms no percentil 90), permitem-lhe processar muitos milhares de clientes simultâneos e cargas de trabalho com picos intensos. Estas funcionalidades tornam o Bigtable ideal como um destino e uma origem de dados na função DoFn
na fase de processamento do Dataflow.
BigQuery
O BigQuery é um armazém de dados empresarial rápido, económico e totalmente gerido para a análise de dados em grande escala. Os resultados da grelha são frequentemente usados para análise e permitem-lhe executar agregações em grande escala em relação aos dados de saída da grelha.
Pub/Sub
O Pub/Sub é um serviço de mensagens assíncrono e escalável que desassocia os serviços que produzem mensagens dos serviços que processam essas mensagens. Pode usar o Pub/Sub para pipelines de análise de streaming e integração de dados para carregar e distribuir dados. É igualmente eficaz como um middleware orientado para mensagens para a integração de serviços ou como uma fila para paralelizar tarefas.
O DAG do Dataflow
O SDK Apache Beam permite-lhe criar DAGs expressivos, o que, por sua vez, lhe permite
criar pipelines de vários estágios de stream ou em lote. A movimentação de dados é processada pelo executor, com os dados expressos como objetos PCollection
, que são coleções de elementos paralelos imutáveis.
O diagrama seguinte ilustra este fluxo.
O SDK do Apache Beam permite-lhe definir um DAG. No DAG, pode incluir código definido pelo utilizador como funções. Normalmente, é usada a mesma linguagem de programação (Java, Python ou Go) para a declaração do DAG e para o código definido pelo utilizador. Também pode usar código que não seja incorporado, como C++, para o código definido pelo utilizador.
O que se segue?
Saiba mais acerca das práticas recomendadas para trabalhar com pipelines altamente paralelos de HPC do Dataflow.
Siga o tutorial para criar um pipeline que use contentores personalizados com bibliotecas C++.