Implementando contratos de dados na GoCardless
Na GoCardless, estamos usando contratos de dados para melhorar a qualidade e a confiabilidade dos dados . Estamos nessa jornada há quase um ano e, embora tenhamos alguns aprendizados, estamos fazendo um grande progresso.
Hoje, quero compartilhar um pouco sobre como implementamos os contratos de dados na GoCardless.
Uma breve introdução aos Contratos de Dados
Se você não está familiarizado com contratos de dados, recomendo primeiro ler meu post de dezembro do ano passado, onde apresentei o conceito e o que pretendemos alcançar com ele na GoCardless, mas para resumir brevemente, é a maneira como geramos, consumimos e gerenciamos nossos dados. Estamos migrando para um modelo em que somos muito mais deliberados sobre os dados que produzimos para consumo — queremos que sejam de boa qualidade, com esquemas, versões e documentação.
O contrato de dados define a estrutura dos dados, suas propriedades e fornece as interfaces para interagir com os dados — que para nós é tipicamente GCP Pub/Sub e/ou BigQuery . É efetivamente uma API para nossos dados .

Construindo sobre nossa plataforma de infraestrutura
Na GoCardless temos uma excelente plataforma de infraestrutura de autoatendimento que chamamos de Utopia. É como gerenciamos nossos recursos GCP e implantamos serviços em nosso cluster Kubernetes e visa promover autonomia e propriedade. Qualquer configuração no Utopia deve ser autoatendida, documentada e verificável.

Isso se alinha perfeitamente com nossos objetivos para contratos de dados! Portanto, foi um acéfalo construir nossa implementação em cima do Utopia. Ele também nos deu a capacidade de implantar e gerenciar qualquer recurso de serviço necessário para ajudar nossos usuários a gerenciar seus dados. Então, isso nos fez pensar… Dado um contrato de dados que documenta suficientemente os dados e suas propriedades, podemos configurar e implantar tudo o que precisamos para gerenciar esses dados de acordo com nossos requisitos de usabilidade, segurança e privacidade? Depois de um pico rápido, a resposta foi sim .
Para obter mais detalhes sobre o Utopia, consulte nosso tutorial “Getting Started” que abrimos no ano passado .
Definindo um contrato de dados
É assim que um contrato de dados se parece no GoCardless:
{
contract: new() {
metadata+: {
name: 'bank_account_information',
description: 'Information on bank accounts used for ...',
},
schema+: {
versions: [
new_version('1', anonymisation_strategy.overwrite,
[
field(
'bank_account_id',
'Unique identifier for a specific bank account, following the standard GC ID format.',
data_types.string,
field_category.gocardless_internal,
is_personal_data.yes,
personal_data_identifier.indirect,
field_anonymisation_strategy.none,
required=true,
primary_key=true,
),
field(
'account_balance',
'Payer\'s account balance. May be positive or negative.',
data_types.double,
field_category.payer_confidential,
is_personal_data.yes,
personal_data_identifier.direct,
field_anonymisation_strategy.nilable
),
field(
'account_holder_name',
'Payer\'s account holder name, as entered by the payer.',
data_types.string,
field_category.payer_confidential,
is_personal_data.yes,
personal_data_identifier.direct,
field_anonymisation_strategy.hex
),
],
[ ddrSubject('bank_accounts', 'bank_account_id') ],
) + withPubSub() + withBigQuery(),
],
},
},
}
Implantando o contrato de dados
Depois que a definição do contrato de dados é mesclada a um repositório Git pelos próprios proprietários de dados, criamos os seguintes recursos, serviços e implantações.

Tudo isso é feito em nome dos proprietários dos dados. Os recursos do GCP e os serviços do Kubernetes são por contrato de dados, portanto, algo que afeta um pipeline não afetará outro.
Os recursos do GCP estão dentro de seus próprios projetos de GCP de serviços, dando explicitamente aos proprietários dos dados a autonomia para gerenciá-los e a responsabilidade de fazê-lo. Os alertas dos serviços do Kubernetes são roteados para os proprietários dos dados, pois normalmente eles estarão em melhor posição para lidar com eles. Caso contrário, a equipe de infraestrutura de dados estará sempre disponível para suporte de segunda linha.
Nossa implementação de Contratos de Dados é projetada para ser flexível . Não nos importamos com a forma como os dados são estruturados, desde que contenham todas as informações de que precisamos para criar e implantar os serviços e recursos usados para gerenciar esses dados. Permitimos que os usuários escolham quais serviços precisam e descobrimos que quase um terço dos usuários optou por não implantar o Pub/Sub, e muitos optam por não criar uma tabela do BigQuery, o que a torna uma boa opção para interserviços casos de uso de comunicação. Tudo isso faz parte de como promovemos a autonomia de nossos geradores de dados.
Também usamos o contrato e os metadados nele contidos para atualizar serviços centralizados, por exemplo, nosso catálogo de dados. Além disso, como estamos usando ferramentas como BigQuery e Looker, embora os dados sejam segregados para promover propriedade e autonomia, não são isolados — você pode consultar dados de diferentes projetos do GCP sem nenhum custo ou limitação, permitindo que os consumidores participem conjuntos de dados e encontre insights, independentemente de quem possui e gerencia os dados subjacentes.

Não é tudo sobre a implementação
Esta implementação é obviamente muito específica para nós. Acontece que temos uma excelente plataforma de infraestrutura na qual podemos construir, que se encaixa perfeitamente no que queremos alcançar com os contratos de dados. Isso nos permitiu construir o que chamamos de nossa infraestrutura de dados orientada por contrato , onde, a partir de um contrato de dados, podemos implantar todas as ferramentas e serviços necessários para gerar, gerenciar e consumir esses dados.
Mas a implementação não é a parte mais importante. Como escreveu Tristan Handy recentemente , o que importa é a “identificação do problema e alinhamento sobre os tipos de garantias que precisamos que nossos sistemas nos forneçam”.
Em última análise, vemos os contratos de dados como nosso meio para melhorar a qualidade dos dados na GoCardless. Estamos mudando a cultura de dados na organização, apoiada por nossa infraestrutura de dados de ponta e garantida por um contrato de dados.
Se você acha que o GoCardless é atraente para você e gostaria de saber mais sobre o Life at GoCardless, você pode encontrar nossas postagens no Twitter , Instagram eLinkedin .
Você está interessado em ingressar no GoCardless? Veja nosso quadro de empregos aqui .