Padrões e critérios de design para (de)composição em single-node

If we could get to a place where, as a CS 101 exercise, you can build a scalable, reliable web service, then I think maybe we’ve actually gotten somewhere.
Brendan Burns
Boa parte do design arquitetural de um sistema de software consiste de sua decomposição em partes menores, mais fáceis de desenvolver, manter e evoluir. Além disso, também, na formalização de “conectores e conexões” que permitam que essas “partes” se comuniquem, quando necessário, de maneira efetiva.
0
Considerações?x

O projeto de sistemas distribuídos consiste em permitir que as “partes” de um sistema possam funcionar em processos e máquinas distintas, de maneira cooperativa e complementar, favorecendo atributos de qualidade como desempenho, escalabilidade e resiliência.
0
Considerações?x

Entretanto, eventualmente, há cenários, mesmo em sistemas distribuídos, em que pode ser interessante com que partes de um sistema, intencionalmente decompostas, sejam combinadas para funcionar bem, juntas, em um única máquina. Neste capítulo, apresentamos padrões aplicáveis para estes cenários.

A arte da “decomposição”

Decompor adequadamente um sistema em partes menores não é tarefa fácil. Abordagens descuidadas geram “partes” com baixa coesão e alto acoplamento, fazendo com que a “promessa” da computação distribuída não só não seja cumprida, como se converta em pesadelo.
0
Considerações?x

Genericamente, a decomposição de sistemas pode ocorrer em unidades de implementação e em unidades de mitigação.

Decompondo sistemas em unidades de implementação

O método mais comum para decompor um sistema de software é a modularização, ou seja, a distribuição de suas responsabilidades em categorias coesas realizadas em unidades de implementação distintas (módulos).

Um sistema de e-commerce, por exemplo, modularizado, poderia ser decomposto em gestão do catálogo, cálculo de preço, cálculo de frete, recomendações, vendas, cobrança, disponibilidade, etc. Cada uma dessas unidades de implementação contemplaria, idealmente, comportamentos (features) e estado (dados).

Quanto mais coesa uma unidade de implementação, mais fácil será sua manutenção e operação.

Decompondo sistemas em unidades de mitigação (de erros)

Além da modularização, também deve-se considerar a decomposição de um sistema de software em unidades de mitigaçãoA ideia é reduzir as chances de que erros em uma parte do sistema afetem – tanto pelas ocorrências quanto pelas ações para recuperação – outras partes, melhorando a resiliência.

Em um sistema de e-commerce, por exemplo, seria desejável que instabilidades da “cobrança” não afetassem o funcionamento de “vendas”. Isso seria possível se estas partes operassem em unidades de mitigação distintas, assíncronas e eventualmente consistentes.

Quanto menores e menos acopladas forem as unidades de mitigação de um sistema, maior o potencial para tolerância a falhas.

Padrões para “composição”

Modernamente, unidades de implementação podem ser distribuídas como contêineres e, potencialmente, combinadas em grupos de contêineres (pods). Idealmente, um grupo de contêineres (pod) deve operar como uma unidade de mitigação.
0
Considerações?x

Os padrões de combinação mais conhecidos, em grupos de contêineres, são sidecars, ambassadors e adapters.

Designing Distributed Systems: Patterns and Paradigms for Scalable, Reliable Services

Nesse livro, Brendan Burns, um dos criadores do Kubernetes, compartilha descrições detalhadas dos três padrões propostos aqui.

Acessar livro

Sidecar

A implementação do padrão sidecar compreende a composição de um grupo de contêineres – compartilhando recursos como sistemas de arquivos e rede – com dois elementos: o primeiro que contém a lógica da aplicação propriamente dita e o segundo alguma “ampliação”, geralmente operacional.

O contêiner da aplicação, idealmente, não tem sequer conhecimento da existência do sidecar.

Como lógica de decomposição, pode-se atribuir, por exemplo, ao contêiner da aplicação uma unidade de implementação restrita a lógicas de negócio, enquanto o sidecar se encarrega de fundamentos operacionais (como indicadores para sistemas de monitoramento, por exemplo). Outra possibilidade é manter no contêiner da aplicação uma unidade de implementação legada, ampliada no sidecar.

Ambassador

Tecnicamente, a lógica de implementação do padrão ambassador é bem semelhante ao do sidecar. A diferença mais marcante é que o contêiner ambassador passa a intermediar todo acesso externo ao contêiner da aplicação, potencialmente, agregando aspectos de observabilidade e táticas básicas de resiliência (como load sheddingrate limiting, autenticação ou bilhetagem).

Adapter

O padrão adapter, conceitualmente, opera de maneira muito semelhante ao padrão ambassador. Entretanto, seu propósito é desacoplar o contrato exposto pela unidade de implementação presente no contêiner aplicação daquele esperado por eventuais consumidores.

Para pensar…

Os padrões de composição (e decomposição) que observamos aqui representam a essência do trabalho da moderna arquitetura de software. São basilares, tanto para a construção de aplicações fáceis de desenvolver, manter, operar e evoluir, quanto para construção de sistemas resilientes.

Modernamente, a implementação concreta desses padrões é possível mediante a utilização de tecnologias como Kubernetes. Por isso, arquitetos modernos devem dedicar tempo para entender como a ferramenta funciona e padrões que ela viabiliza.
0
Concorda?x

A conversation with Brendan Burns: What is Kubernetes?

Acessar vídeo

 

Compartilhe este capítulo:

Compartilhe:

Comentários

Participe da construção deste capítulo deixando seu comentário:

Inscrever-se
Notify of
guest
0 Comentários
Feedbacks interativos
Ver todos os comentários

AUTOR

Elemar Júnior

Fundador e CEO da EximiaCo, atua como tech trusted advisor ajudando diversas empresas a gerar mais resultados através da tecnologia. 

Mentorias

para arquitetos de software

Imersão, em grupo, supervisionada por Elemar Júnior, onde serão discutidos tópicos avançados de arquitetura de software, extraídos de cenários reais.

Consultoria e Assessoria em

Arquitetura de Software

EximiaCo oferece a alocação de um Arquiteto de Software em sua empresa para orientar seu time no uso das melhores práticas de arquitetura para projetar a evolução consistente de suas aplicações.

Podcast

Arquitetura de Software Online

55 51 9 9942 0609  |  me@elemarjr.com

+55 51 99942-0609 |  contato@eximia.co

+55 51 99942-0609  contato@eximia.co

0
Quero saber a sua opinião, deixe seu comentáriox
()
x