1. Uma breve história da computação distribuída
Até a década de 90, a escala vertical de recursos imperava. Se um sistema computacional não atendia os requisitos de desempenho de uma aplicação, melhorava-se seu hardware. Contudo, catalisados pela popularização da internet no começo dos anos 2000, os requisitos de desempenho das aplicações aumentavam em uma taxa muito mais elevada do que o ganho que a escala vertical oferecia, pois esta necessitava, no seu limite, de investimento de tempo e dinheiro em pesquisa e desenvolvimento de novos elementos de hardware (RAM, CPU, etc.).
E foi no começo dos anos 2000 que a solução para essas limitações começou a tomar forma. Dois artigos publicados pela Google em 2003 (Google File System) e 2006 (Google Bigtable) apresentaram um novo paradigma baseado na escala horizontal de recursos. Nela, se um sistema computacional atingia seu limite de desempenho, adicionava-se a ele um uma nova máquina (commodity hardware) conectada em rede aos demais recursos, e assim sucessivamente, até que os requisitos da aplicação fossem atendidos. Criou-se assim os primeiros clusters modernos de computadores.
Ainda em 2006, o primeiro oferecimento de software open source para essa nova categoria de sistemas foi criado e disponibilizado pela Yahoo!, o Apache Hadoop, essencialmente uma engenharia reversa do software descrito no artigo de 2003 da Google. Desde então, diversas novas ferramentas foram criadas: Apache HBase (Powerset, hoje Microsoft) em 2008, Apache Hive (Facebook) e Apache Spark (MIT) em 2010, Apache Kafka (LinkedIn) em 2011, Apache Airflow (Airbnb) em 2015, etc. Em 2020 o ecossistema estava mais ou menos assim:
Em especial, a criação de empresas que oferecem soluções de computação distribuída on-premises entre 2009 e 2011 (Cloudera, MapR e Hortonworks) foi um marco na história da área pois indicou o interesse comercial nas soluções disponíveis por empresas das mais diversas áreas de atuação, como telecomunicação e mercado financeiro. Por fim, em 2015 a Amazon Web Services (AWS) lançou o AWS Elastic MapReduce (EMR) e o Google Cloud Plarform (GCP) o GCP Dataproc, os primeiros oferecimentos de ferramentas de computação distribuída na nuvem de uso geral, popularizando de vez o uso da tecnologia como a conhecemos e a praticamos hoje no mercado.
2. Uma breve introdução a clusters Kubernetes
O uso de clusters de computadores permite a escala massiva da computação mas traz muitos desafios, especialmente quanto à gerência dos recursos computacionais e da computação em si. Em geral, busca-se três garantias em sistemas distribuídos: consistência, disponibilidade e tolerância à falha de partição (o famoso Teorema CAP). E dessa busca surgiram os gerenciadores de clusters que atuam como um “sistema operacional” de uma arquitetura distribuída de computadores, como o Apache YARN (Yahoo!) em 2006, Kubernetes (Google) em 2015 e o Apache Mesos (UC Berkeley) em 2018.
Sobre o Kubernetes, a submissão de cargas de trabalho para um cluster gerido pela tecnologia é feita através de uma abstração chamada de objetos: entidades que representam o estado desejado do cluster. Objetos do tipo deployment são utilizados para manter aplicações em pé de forma resiliente, como servidores web. Já os objetos do tipo service são utilizados para expor um objeto para outras entidades ou até mesmo para fora do cluster.
Em especial, objetos do tipo job são utilizados para a criação de aplicações com ciclo de vida volátil e são ideais para execução de cargas de trabalho ETL e ELT, como aplicações Apache Spark. Estes objetos criam controladores que monitoram aplicações voláteis do começo ao fim: as reiniciam em caso de falhas, as criam em múltiplas instâncias que são executadas em paralelo, etc.
Como exemplo, a figura abaixo define um objeto do tipo job que executa uma aplicação Apache Spark que calcula o número Pi em um cluster gerenciado pelo Kubernetes.
Esse é o tipo de objeto que mais utilizamos no time de engenharia de dados de crédito da Stone e é através dele que ajudamos a empresa a pintar o Brasil de verde. 💚
E aí, curtiu? O que acha de trabalhar com a gente no time de dados de crédito da Stone e ajudar a gente a escrever a história da computação distribuída?Confira as nossas vagas: