Sobre as cargas de trabalho altamente paralelas e de HPC do Dataflow

Cargas de trabalho altamente paralelas, também conhecidas como cargas de trabalho embaraçosamente paralelas, são comuns em empresas de finanças, mídia e ciências biológicas. Para cargas de trabalho em paralelo como essas, as empresas normalmente implantam um cluster de nós de computação. Cada nó pode realizar tarefas de processamento independentes, em uma configuração conhecida como computação em grade. Para processar dados de cargas de trabalho em paralelo, use o Apache Beam com o Dataflow. Para mais informações sobre o Apache Beam, consulte o guia de programação do Apache Beam.

O uso do Dataflow para cargas de trabalho altamente paralelas oferece muitos benefícios.

Além disso, o Dataflow inclui vários recursos de segurança:

Essas cargas de trabalho exigem a distribuição de dados para funções que são executadas em muitos núcleos. Essa distribuição geralmente requer leituras de simultaneidade muito altas, seguidas por uma grande distribuição de dados, absorvidos por sistemas downstream. As principais competências do Dataflow são a distribuição de cargas de trabalho em lote e de stream entre recursos e o gerenciamento de escalonamento automático e rebalanceamento dinâmico de trabalho nesses recursos. Portanto, quando você usa o Dataflow para cargas de trabalho altamente paralelas, as necessidades de desempenho, escalonabilidade, disponibilidade e segurança são tratadas automaticamente.

Incorporar código externo ao pipeline

Atualmente, o Apache Beam tem SDKs integrados para Java, Python e Go. No entanto, muitas cargas de trabalho altamente paralelas usam código escrito em C++. É possível usar o Dataflow e outros serviços do Google Cloud para executar binários C++ (bibliotecas) como código externo usando o Apache Beam. A inclusão de binários C++ permite desbloquear esses tipos de cargas de trabalho usando serviços totalmente gerenciados. Também é possível criar pipelines completos usando um sofisticado gráfico acíclico dirigido (DAG).

A mesma abordagem para executar binários C++ também é relevante para códigos escritos em outras linguagens em que você pode compilar um binário autônomo.

Pipelines altamente paralelos de ponta a ponta

Com o Dataflow, é possível fazer o processamento, a análise e a saída de tarefas de leitura/gravação de E/S no mesmo pipeline, o que permite executar pipelines altamente paralelos de ponta a ponta

Por exemplo, uma carga de trabalho altamente paralela de HPC pode incorporar as seguintes etapas:

  1. Ingerir dados brutos, de fontes internas e externas. Os dados podem vir de fontes ilimitadas ou limitadas. As fontes ilimitadas são convertidas principalmente em fontes limitadas para acomodar as tecnologias usadas na criação de tarefas.

  2. Pré-processe os dados brutos em uma forma e codificação de dados que o componente de criação de tarefas pode usar.

  3. Use um sistema para distribuir os cálculos para os hosts e recuperar dados de uma origem. Em seguida, materialize os resultados para pós-análise.

  4. Realize a pós-análise para converter os resultados em resultados.

Use o Dataflow para gerenciar todas essas etapas em um único pipeline e aproveitar os recursos do Dataflow:

  • Como um único sistema é responsável por todos os estágios, você não precisa de um sistema de orquestração externo para coordenar a execução de vários pipelines.

  • Com a localidade dos dados, você não precisa materializar e desmaterializar explicitamente entre os limites do cenário, aumentando a eficiência.

  • Com uma telemetria melhor no sistema, informações sobre o total de bytes no cenário estão disponíveis, o que ajuda no desenvolvimento de estágios posteriores.

  • Com o escalonamento automático, quando os dados estão no sistema, os recursos são escalonados com base nos volumes de dados à medida que eles avançam pelos estágios do pipeline.

O principal pipeline paralelo do HPC do Dataflow usa mecanismos modernos de execução do DAG. Todos os processos típicos de pipeline podem ser concluídos em um único DAG e, portanto, em um único pipeline do Dataflow. É possível usar um DAG gerado pelo Apache Beam para definir o formato do pipeline.

Se você estiver migrando de um sistema de farm de tarefas para um fluxo de trabalho altamente paralelo, será necessário alternar de tarefas para dados. Um PTransform contém um DoFn, que tem uma função de processo que recebe um elemento de dados. O ponto de dados pode ser qualquer objeto com uma ou mais propriedades.

Usando um DAG e um único pipeline, é possível carregar todos os dados no sistema durante todo o fluxo de trabalho. Você não precisa enviar dados para bancos de dados ou armazenamento.

Componentes do Google Cloud usados com fluxos de trabalho altamente paralelos

Aplicativos de computação em grade exigem que os dados sejam distribuídos para funções executadas em muitos núcleos. Esse padrão geralmente requer leituras de alta simultaneidade e geralmente é seguido por uma grande distribuição de dados coletados pelos sistemas downstream.

O Dataflow é integrado a outros serviços gerenciados do Google Cloud que podem absorver a E/S de dados paralelos em grande escala:

  • Pub/Sub: armazenamento de coluna larga para armazenamento em cache e disponibilização
  • Bigtable: serviço global de ingestão de stream de eventos
  • Cloud Storage: armazenamento de objetos unificado
  • BigQuery: serviço de armazenamento de dados em escala de petabytes

Usados juntos, esses serviços fornecem uma solução atraente para cargas de trabalho altamente paralelas.

A arquitetura comum para cargas de trabalho altamente paralelas em execução no Google Cloud inclui:

  • O executor do Dataflow para o Apache Beam (em inglês). Esse executor distribui o trabalho para os nós da grade com um fluxo de processamento derivado de um DAG. Com um único DAG do Apache Beam, é possível definir pipelines complexos de vários estágios que podem ser reunidos por meio de entradas secundárias ou de mesclagens (páginas em inglês).

  • Cloud Storage. Este serviço fornece um local para preparar os binários C++. Quando arquivos grandes precisam ser armazenados, como em muitos casos de uso de mídia, eles também ficarão localizados no Cloud Storage.

  • Bigtable, BigQuery e Pub/Sub. Esses serviços são usados como fontes e coletores de dados.

O diagrama a seguir descreve a arquitetura de alto nível de um exemplo de fluxo de trabalho.

Arquitetura de uma solução de computação em grade

Também é possível usar outros sistemas de armazenamento. Para mais detalhes, consulte a lista de sistemas de armazenamento e fontes de streaming na página de E/S de pipeline (em inglês) na documentação do Apache Beam.

O executor do Dataflow para o Apache Beam

Use o Dataflow para transformar e enriquecer seus dados nos modos de streaming e em lote. O Dataflow é baseado no Apache Beam (em inglês).

Cloud Storage

O Cloud Storage é uma ferramenta de armazenamento unificado de objetos que engloba serviços de dados ativos, análise de dados, aprendizado de máquina (ML) e arquivamento. Para cargas de trabalho altamente paralelas com o Dataflow, o Cloud Storage fornece acesso a binários C++. Em alguns casos de uso, o Cloud Storage também fornece a localização dos dados necessários por fase de processamento.

Para as cargas com burst alto exigidas pela computação em grade, será preciso entender as características de desempenho do Cloud Storage. Para mais informações sobre o desempenho de veiculação de dados do Cloud Storage, consulte Diretrizes de distribuição de acesso e de taxa de solicitação na documentação do Cloud Storage.

Bigtable

O Bigtable é um serviço de banco de dados NoSQL de alto desempenho, otimizado para grandes cargas de trabalho analíticas e operacionais. O Bigtable é complementar ao Dataflow. As características primárias do Bigtable, leituras e gravações de baixa latência (6 ms no 90o percentil) permitem lidar com milhares de clientes simultâneos e cargas de trabalho com muito burst. Esses recursos fazem do Bigtable ideal como coletor e fonte de dados na função DoFn na fase de processamento do Dataflow.

BigQuery

O BigQuery é um serviço de armazenamento de dados corporativo rápido, econômico e totalmente gerenciado para análise de dados em grande escala. Os resultados de grade geralmente são usados para análise e permitem executar agregações em grande escala na saída de dados da grade.

Pub/Sub

O Pub/Sub é um serviço de mensagens assíncrono e escalonável que separa os serviços que produzem mensagens dos serviços que processam essas mensagens. Use o Pub/Sub para análises de streaming e pipelines de integração de dados para ingerir e distribuir dados. Ele é igualmente eficaz como um middleware orientado a mensagens para integração de serviços ou como uma fila para carregar tarefas em paralelo.

O DAG do Dataflow

Com o SDK do Beam é possível criar DAGs expressivos, o que, por sua vez, facilita a criação de canais de vários estágios de streaming ou de lote. O movimento de dados é processado pelo executor, com dados expressos como objetos PCollection, que são coleções de elementos paralelos imutáveis.

Veja esse fluxo no diagrama a seguir.

Fluxo usando um DAG

O SDK do Apache Beam permite definir um DAG. Em que é possível incluir como funções códigos definidos pelo usuário. Normalmente, a mesma linguagem de programação (Java, Python ou Go) é usada tanto para a declaração do DAG quanto para os códigos definidos pelo usuário. Você também pode usar um código não integrado, como C++, para o código definido pelo usuário.

A seguir

  • Saiba mais sobre as práticas recomendadas para trabalhar com pipelines altamente paralelos do HPC do Dataflow.

  • Siga o tutorial para criar um pipeline que usa contêineres personalizados com bibliotecas C++.