# Implemente microsserviços com Azion Functions

Adotar uma [arquitetura de microsserviços serverless](https://www.azion.com/pt-br/solucoes/aplicacoes-baseadas-em-microsservicos/) com Azion Functions traz vários benefícios significativos. Primeiramente, melhora a escalabilidade ao permitir que cada serviço escale independentemente com base em sua própria demanda, em vez de escalar toda a aplicação com base na demanda de um único serviço. Isso leva a uma utilização de recursos mais eficiente e a economias de custos.

Além disso, aumenta a flexibilidade ao permitir que cada serviço seja desenvolvido, implantado e atualizado independentemente. Isso significa que mudanças podem ser feitas em um serviço sem impactar os outros, permitindo uma inovação mais rápida e reduzindo o risco de falhas em todo o sistema.

---

## Arquitetura

![Representação de uma requisição/resposta em uma configuração de microsserviços](/assets/docs/images/uploads/microservices-arch.png?v=2)

### Fluxo de dados

1. Um usuário envia uma requisição para o **Domínio** associado a uma aplicação. Essa requisição é direcionada para o **Azion Traffic Router**, que identifica o **Edge Node** apropriado para processar a requisição.

2. Nesta etapa, com base na arquitetura de microsserviços, a requisição se ramifica para diferentes serviços em resposta à configuração do **Rules Engine**. Essa ramificação significa que os serviços podem evoluir independentemente, facilitando ciclos de inovação mais rápidos e rápida implantação de novos recursos.

3. **Functions** são invocadas. Cada serviço em uma arquitetura de microsserviços corresponde a diferentes capacidades de negócios. Por exemplo, um serviço de **Middleware de Autenticação** lida com a autenticação do usuário, um serviço de **Carrinho de Compras** gerencia operações do carrinho do usuário e um serviço de **Cálculo de Frete** calcula os custos de envio. Esses serviços são desenvolvidos em JavaScript, implantados e escalados independentemente, proporcionando agilidade e resiliência.

4. O conteúdo estático é salvo no **Object Storage** de onde é recuperado e servido como uma resposta. Isso aproveita a edge computing para garantir menor latência e entrega de conteúdo mais rápida.

5. **SQL Database** lida com operações que envolvem transações de banco de dados. Isso enfatiza ainda mais a separação de responsabilidades, com cada serviço assumindo a propriedade de seu banco de dados específico para garantir baixo acoplamento e alta coesão.

Após esses processos distintos, porém coesos, o conteúdo — processado e montado — é entregue de volta ao cliente. Esse fluxo de dados orientado a microsserviços com edge computing garante operações altamente eficientes, escaláveis e resilientes, oferecendo consideráveis vantagens comerciais.

---

## Componentes

- [Applications](/en/documentation/products/build/edge-application/): configure uma aplicação para definir políticas de entrega e cache, criar regras para automatizar atribuições de políticas de cache com base no tipo de conteúdo e determinar como o conteúdo é armazenado em cache.
    - [Functions](/en/documentation/products/build/edge-application/edge-functions/): permite criar aplicações serverless orientadas a eventos, no edge da rede, mais próximas dos usuários.
    - [Object Storage](/en/documentation/products/store/edge-storage/): um serviço de armazenamento escalável e seguro, projetado para integrar armazenamento de objetos com a Azion usando o padrão S3 para operações de objetos.
    - [SQL Database](/en/documentation/products/store/edge-sql/): uma solução SQL nativa de edge projetada para aplicações serverless. É totalmente compatível com ACID e utiliza o dialeto SQLite para fornecer um ambiente de desenvolvimento familiar, facilitando a integração rápida.

---

## Implementação

1. Crie uma aplicação:
    - No [Console](https://console.azion.com), crie uma aplicação usando o botão **+ Create** na página inicial.
    - Use a [API da Azion](https://api.azion.com/#d43c5509-fb99-4b20-a7bd-64f0924af352) para criar uma aplicação.
    - Use a [Azion CLI](/en/documentation/devtools/cli/create/#edge-applications) para criar e implantar uma aplicação.

2. [Crie uma function](/en/documentation/products/build/edge-application/edge-functions/#implementation) e [instancie](/en/documentation/products/guides/build/instantiate-edge-functions/) na aplicação recém-criada.

3. Crie um domínio e associe-o à aplicação:
    - No Console, [crie um domínio](/en/documentation/products/guides/configure-a-domain/) usando o botão **+ Create** na página inicial.
    - Usando a [API da Azion](https://api.azion.com/#d43c5509-fb99-4b20-a7bd-64f0924af352) para criar um domínio.
    - Se você criou uma aplicação através de um template, o domínio é criado para você.

:::note 
A aplicação é acessível através do domínio fornecido pela Azion, que se parece com: `ftd1cvntfl.map.azionedge.net`. 
:::

4. Teste e monitore sua aplicação.

---

## Documentação relacionada

- [Azion Marketplace](/en/documentation/products/marketplace/)
- [Compatibilidade com APIs Web no Azion Runtime](/en/documentation/products/devtools/azion-edge-runtime/frameworks-compatibility/)
- [Compatibilidade com Node.js no Azion Runtime](/en/documentation/products/azion-edge-runtime/compatibility/node/)