[Desafio] - 10 Desafios Simples de System Design: Resolução 1/9 (Integração via Arquivos)
Published: 2023-03-25 19:22:17

> Conteúdo original em https://twitter.com/zanfranceschi/status/1639708014411395074

---

Ei dev,

Proposta de resolução do Desafio 1/9 dos 10 Desafios Simples de  System Design que postei recentemente.

"Integração via Arquivos"

↓

![Image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tmhkqamlcfv4zvrxkrsx.png)

https://twitter.com/zanfranceschi/status/1638232585615851520

---

Como disse na thread dos desafios, esse tipo de cenário é um clássico – arriscaria dizer que a maioria esmagadora das empresas do mundo fazem alguma integração via arquivos.

Não vou dar uma solução, mas vou falar de alguns aspectos comuns desse desafio para se considerar.

---

\- Ferramentas/Tecnologias

Existem muitas – mas muitas ferramentas mesmo – para integração via arquivos. Antigamente, o protocolo FTP (SFTP e FTPS) eram uma escolha bem comum pra esse tipo de coisa.

Existem também muitas ferramentas proprietárias como o Connect:Direct da IBM.

---

Hoje em dia, provedores cloud oferecem várias opções que podem apoiar bem a integração via arquivos. Por exemplo, a AWS tem o Storage Gateway (que é uma abstração), EFS, S3, etc.

---

Mas se quiser usar outra ferramenta não disponível nativamente em nuvem, é possível configurar conexões de alta velocidade entre nuvem e on premise, como o AWS Direct Connect (sempre confundo o nome com o Connect:Direct da IBM). Claro, dá pra fazer de nuvem pra nuvem também.

---

\- Um Pouco de História

O modelo de troca de arquivos tem muito a ver com recursos computacionais escassos de antigamente. A ideia era mais ou menos juntar tudo que se pudesse para enviar duma vez só para o processamento. Procure por "batch processing" na internet.

---

\- Tamanho dos Arquivos

Por causa dessa técnica de juntar o máximo de coisas possíveis para o processamento em conjunto com o crescimento de informações atualmente, os arquivos começaram a ficar grandes. Por isso, é bem comum que nessas trocas de arquivos eles sejam bem grandes.

---

\- Intervalos/Agendamentos para Processamento

Muito por causa da história dessa técnica e tamanho dos arquivos, na maioria das vezes existe um intervalo considerável para que a troca de arquivos ocorra – muito frequentemente é um intervalo diário. Claro, pode ser maior ou menor.

---

E pra manter essa integração dentro dum intervalo regular (p.ex: todo dia às 2 da manhã) é comum que se use ferramentas de agendamento. Troca de arquivos é quase sinônimo de ferramentas de agendamento. Essas ferramentas ajudam na questão de detecção de falhas, controles, etc.

---

Seria desperdício computacional manter uma aplicação em execução a espera de um arquivo que só vem uma vez por dia, por exemplo. Algo como um file ou directory watcher faz mais sentido quando o intervalo de troca de arquivos é menor.

---

Ainda sobre agendamento. Agendamentos podem ser tanto para quem gera e transfere os arquivos como pra quem os lê e processa. E isso acaba exigindo uma coordenação de horários, pois se a leitura/processamento ocorrer antes da geração/transferência, as coisas podem dar errado.

---

É importante fazer uma relação entre as ferramentas que comentei no início e agendamento. Muitas ferramentas do tipo Connect:Direct da IBM possuem capacidades de agendamento também.

---

\- Backup/Expurgo

Quando se trabalha com arquivos grandes, é preciso considerar questões de backup e de expurgo. O backup serve para auditoria/troubleshooting (conteúdo do arquivo) e para reprocessamento quando necessário.

---

Você vai querer pensar no expurgo, pois os arquivos podem acabar ocupando muito espaço e isso demandar um custo desnecessário com armazenamento. É preciso definir um período mínimo seguro para excluí-lo, caso contrário reprocessar e investigar os arquivos pode ficar inviável.

---

\- Formatos

Na maioria das vezes, esses arquivos são de texto puro. E os formatos mais comuns são valores separados por vírgula (CSV), e colunas de tamanho fixo. Claro, existem muitos formatos, proprietários ou não. Mas sinceramente, esses são os mais comuns.

---

É isso que consegui me lembrar de mais importante sobre troca de arquivos. Resumindo, essas são as dimensões mais importantes para considerar nessa técnica:

\- Ferramentas/Tecnologias
\- Tamanho dos Arquivos
\- Intervalos/Agendamentos para Processamento
\- Backup/Expurgo
\- Formatos

---

Esse problema não é lá muito atraente para quem está começando – parece arcaico e sem graça –, mas ainda é muito comum para empresas mais antigas e até para algumas mais novas.

Espero que tenha gostado dessa thread.