Surgiram os microsserviços como um padrão de arquitetura comum na última década.
Nessa abordagem, serviços pequenos, autônomos e pouco acoplados trabalham juntos em uma rede distribuída. Em geral, cada microsserviço é delimitado a uma função específica e a um limite comercial, é executado em seu próprio processo e pode ser gerenciado e implantado independentemente dos outros serviços.
Essa arquitetura resulta em maior flexibilidade em comparação com um aplicativo monolítico tradicional, mas, ao mesmo tempo, exige que cada microsserviço individual ofereça resiliência, escalabilidade e persistência quando necessário.
Neste artigo, gostaria de me concentrar nos aspectos de gerenciamento de dados de uma arquitetura de microsserviço e em como Couchbase oferece baixa latência, resiliência e escalabilidade para sua camada de dados.
Simplicidade com cache integrado e escalabilidade elástica
Os microsserviços estão vinculados a um domínio comercial explícito.
Por exemplo, seu domínio pode ser o produto, a campanha, o checkout ou os serviços de perfil de usuário de um aplicativo de comércio eletrônico. Os diferentes microsserviços formam o aplicativo de forma colaborativa, mas são totalmente independentes ao mesmo tempo. Muitas vezes, equipes diferentes desenvolvem cada serviço de forma independente e com seu próprio ciclo de lançamento e pipeline de CI/CD. O resultado é um desenvolvimento mais ágil e rápido.
No cenário ilustrado acima, cada microsserviço possui seus dados de domínio e disponibiliza esses dados para os outros serviços por meio de APIs. Durante uma transação de checkout, o serviço Checkout pode resolver os dados correspondentes do cliente a partir do serviço User-Profile. Esse padrão de arquitetura de microsserviços oferece grande flexibilidade e também permite a reutilização de microsserviços em vários aplicativos.
É fundamental criar serviços resilientes e dimensionáveis. Para microsserviços sem estado, isso é bastante simples. Mas se os dados precisarem ser mantidos, você precisará de uma arquitetura de banco de dados resiliente que seja dimensionada junto com o microsserviço para suportar o aumento do uso do serviço.
O Couchbase foi desenvolvido com base em uma arquitetura que prioriza a memória e fornece não apenas cache integrado para acesso de baixa latência aos seus dados, mas também escalabilidade elástica. Isso permite que você dimensione individualmente os serviços do Couchbase sem interromper suas operações de microsserviços.
À medida que o volume de dados aumenta, basta adicionar mais nós de dados do Couchbase. Se você precisar de mais capacidade de consulta, basta adicionar mais nós de consulta do Couchbase ao seu cluster.
Com esse nível de dimensionamento multidimensional, seus diferentes serviços do Couchbase nunca precisam competir pelos recursos do sistema. Em vez disso, a infraestrutura subjacente é adaptada de acordo com as necessidades específicas do serviço. Por exemplo, o serviço Couchbase Query usa uma instância de computação com muita memória para servir o máximo de dados possível do cache integrado e usa um nó com núcleos adicionais para dar suporte a mais consultas.
A arquitetura resiliente e distribuída do Couchbase também garante alta disponibilidade ao manter cópias de réplica de seus dados. Em caso de falha de um nó, o Couchbase faz o failover automaticamente e garante a continuidade das operações.
Padrões comuns para microsserviços no Couchbase
Uma das principais características dos microsserviços é o acoplamento frouxo, de modo que eles possam ser desenvolvidos, implantados, controlados por acesso e dimensionados individualmente.
O acoplamento frouxo exige que a infraestrutura de banco de dados subjacente suporte o isolamento dos dados para os microsserviços individuais. Isso pode ser feito executando instâncias individuais de banco de dados por microsserviço ou controlando o acesso às partes relevantes dos dados.
Embora os bancos de dados relacionais tradicionais ofereçam suporte ao isolamento usando esquemas de banco de dados, eles geralmente são difíceis de escalonar, não têm a flexibilidade de um modelo de dados JSON e, o mais importante, tornam-se o ponto único de falha em caso de interrupção da infraestrutura do banco de dados. Esse é um aspecto importante a ser considerado ao projetar sua arquitetura de microsserviço, pois uma interrupção tem severo consequências para todos os microsserviços que compartilham o mesmo banco de dados.
O Couchbase foi projetado para microsserviços. É um banco de dados altamente dimensionável, resiliente e distribuído. Ele oferece grande flexibilidade e fornece vários níveis de isolamento para dar suporte a até mil microsserviços no mesmo cluster do Couchbase.
Servidor Couchbase 7 apresenta o conceito de escopos e coleções.
Escopos e coleções são contêineres lógicos criados dentro de um bucket que organizam e isolam seus dados. Um bucket é um espaço-chave que permite configurar a cota de memória individual, o disco e a prioridade de E/S. Essas configurações fornecem isolamento parcial de recursos. Buckets, Scopes e Collections oferecem implementação independente e gerenciamento de ciclo de vida em todos os níveis, incluindo controle de acesso baseado em função, replicação entre data centers (XDCR) e backup/restauração.
Esses recursos proporcionam maior flexibilidade às equipes de desenvolvimento e permitem vários padrões de microsserviços. Vamos dar uma olhada mais de perto em quatro desses padrões mais comuns.
Padrão 1: cluster dedicado do Couchbase por microsserviço
O uso de um cluster dedicado do Couchbase oferece dimensionamento independente por meio de isolamento físico. Embora essa seja uma opção viável, ela pode não ser muito prática ao executar centenas ou até milhares de microsserviços.
Padrão 2: isolamento usando baldes
Nesse padrão, os buckets são usados para isolar os microsserviços.
Em comparação com os clusters dedicados, os buckets fornecem isolamento parcial de recursos, incluindo alocação de memória, E/S de disco e réplicas. No entanto, o número de buckets por cluster do Couchbase é limitado, de modo que o número de microsserviços suportados em um único cluster não pode exceder trinta.
Se você não tiver requisitos rigorosos para isolar os dados entre os serviços ou se houver outras medidas para garantir que cada microsserviço trabalhe apenas com seu próprio conjunto de dados, vários microsserviços poderão compartilhar o mesmo bucket. Normalmente, o compartilhamento de bucket é realizado identificando o documento pela chave do documento ou por um atributo de tipo adicional no documento.
Na verdade, esse padrão era comumente usado antes de a introdução de escopos e coleções no Couchbase 7.
Padrão 3: isolamento usando coleções
Um padrão de implantação de microsserviços mais avançado é aproveitar as vantagens do Coleções.
Embora um bucket circundante ainda forneça isolamento de recursos, as coleções isolam logicamente e controlam o acesso aos seus microsserviços. Isso permite que você execute até 1.000 microsserviços em um único cluster do Couchbase. Na ilustração abaixo, cada microsserviço está usando uma coleção dedicada. O controle de acesso baseado em função do Couchbase garante que cada microsserviço acesse apenas seu próprio conjunto de dados na coleção correspondente.
Padrão 4: isolamento usando buckets e coleções
Esse padrão de microsserviços é semelhante ao padrão anterior, mas, em vez de colocar todas as coleções em um único bucket, você as agrupa em vários buckets.
Esse padrão permite que você configure o bucket de acordo com as características dos microsserviços e/ou coleções incluídos. Com essa abordagem, você obtém isolamento físico, como a alocação de memória e a contagem de réplicas para cada bucket individual e suas coleções contidas.
Não existe uma única solução melhor para estruturar e isolar seus dados no Couchbase. Mas usando buckets, escopos e coleções, você tem uma infinidade de opções para atender facilmente às necessidades específicas de sua arquitetura de microsserviço.
Implantações em contêineres
Não há dúvida: Os ambientes de desenvolvimento atuais estão mudando para microsserviços. Ao mesmo tempo, o setor está migrando para implementações em contêineres gerenciadas por meio do Kubernetes e do OpenShift.
Com o Couchbase, seu aplicativo de banco de dados com estado autônomo e totalmente gerenciado é executado ao lado de seus microsserviços na mesma plataforma Kubernetes. Essa abordagem oferece isolamento completo e reduz sua carga de trabalho de DevOps com failover automático e até mesmo dimensionamento automático do seu cluster.
Para obter mais informações, consulte o Operador autônomo do Couchbase.
[…] https://www.couchbase.com/microservices-architecture-in-couchbase […]
[...] 4 padrões para arquitetura de microsserviços no Couchbase [...]