Arquitetar uma solução usando o Azure

Concluído

A criação de uma arquitetura de aplicativo requer que você compreenda a amplitude dos requisitos funcionais e não funcionais e, em seguida, combine esses requisitos com ferramentas, tecnologias e serviços que possam atender a esses requisitos.

No cenário de captura de ônibus, há alguns requisitos principais:

  • Um site para monitorar locais de ônibus em tempo real
  • Notificações quando um ônibus está por perto
  • Implantação e dimensionamento automatizados

Vamos nos aprofundar nesse cenário e como você pode arquitetar uma solução usando vários serviços do Azure.

Recupere dados de barramento em tempo real

Muitas cidades fornecem dados de transporte público via General Transit Feed Specification (GTFS), que também suporta um feed em tempo real chamado GTFS real-time Reference v2 (GTFS-RT). O feed é composto por um documento JSON que se parece com o seguinte exemplo (do feed King County Metro ):

{
      "id": "1618418866_4318",
      "vehicle": {
        "trip": {
          "trip_id": "49195161",
          "direction_id": 0,
          "route_id": "100001",
          "start_date": "20210414",
          "schedule_relationship": "SCHEDULED"
        },
        "vehicle": {
          "id": "4318",
          "label": "4318"
        },
        "position": {
          "latitude": 47.64524,
          "longitude": -122.370171
        },
        "current_stop_sequence": 228,
        "stop_id": "2010",
        "current_status": "IN_TRANSIT_TO",
        "timestamp": 1618418841
      }
    },

Sabendo que esse feed está disponível, você precisa descobrir em seguida como ser notificado quando um ônibus está perto o suficiente de você para que você saiba começar a caminhar até a estação de ônibus para pegar o ônibus a tempo. Para fazer isso, podemos criar uma cerca geográfica algumas paradas de ônibus antes da estação pretendida. Desta forma, você pode ser notificado quando o ônibus está entrando ou saindo da cerca geográfica. Se você pode receber uma notificação quando isso acontece, você nem precisa ficar verificando em um mapa onde o ônibus está. Quando receber a notificação, saberá que está na hora de sair.

Arquitete uma solução com os serviços do Azure

Com base no cenário e na solução ideal, aqui está uma arquitetura possível:

Diagrama da arquitetura de microsserviços Catch the bus.

A arquitetura usa vários serviços diferentes para minimizar a quantidade de código que você precisa escrever e para aproveitar ao máximo os benefícios de escalabilidade e infraestrutura que o Azure oferece.

Texto Conhecido (WKT) é uma linguagem de marcação de texto simples para representar locais de geometria vetorial em um mapa. WKT é um padrão Open Geospatial Consortium (OGC) que é usado para representar dados espaciais em um formato textual. A maioria dos sistemas compatíveis com OGC suporta texto conhecido.

Aqui, você terá uma visão geral sobre quais componentes da solução são selecionados e por quê. Em seguida, neste módulo, você se concentrará no serviço de banco de dados.

Armazenar e processar dados com o Banco de Dados SQL do Azure

O Banco de Dados SQL do Azure é uma ótima opção para esse cenário. Vamos entender o porquê.

O Banco de Dados SQL do Azure tem suporte JSON nativo, o que ajuda a reduzir a quantidade de código necessária para manipular os dados enviados e recebidos com o banco de dados. Também torna a solução mais ágil e fácil de melhorar graças à natureza flexível da JSON. Ele também garante que você possa passar eficientemente matrizes de dados para o Azure SQL, otimizar viagens de ida e volta e reduzir a latência.

O Azure SQL também fornece suporte geoespacial completo, o que é um ótimo recurso porque manipular dados geoespaciais não é a tarefa mais fácil. Ao ter um mecanismo geoespacial completo dentro do banco de dados, você pode evitar a complexidade da integração com bibliotecas externas. Você também não precisa mover dados para descobrir, por exemplo, se um ônibus está dentro de uma cerca geográfica definida. Como o SQL do Azure adere aos padrões do Open Geospatial Consortium, é fácil integrar dados armazenados no Azure SQL com bibliotecas de visualização como o OpenLayers.

Os recursos acima mencionados são construídos sobre as bases sólidas do modelo relacional, evoluído através de anos de melhoria para atender aos requisitos das aplicações modernas. O Banco de Dados SQL do Azure é escalonável até 100 TB com a camada Hyperscale, o que significa que você pode usá-lo para aplicativos com uso intensivo de armazenamento (por exemplo, bancos de dados grandes). O Banco de Dados SQL do Azure também é econômico quando você usa a camada Serverless, que dá suporte ao dimensionamento automático e à pausa e retomada. O Azure SQL também suporta índices columnstore para consultas analíticas extremamente rápidas, modelos gráficos para simplificar o gerenciamento de relacionamentos de objetos complexos e um otimizador de consultas de última geração que está melhorando continuamente e pode lidar até mesmo com a carga de trabalho mais exigente, como a exigida pelos jogos online multijogador massivos de hoje.

Com o Azure SQL, também é fácil acessar dados estáticos, como as informações de rota fornecidas pelo padrão GTFS, que podem ser armazenados em uma conta de Armazenamento de Blob do Azure. Podemos usar a OPENROWSET função no Azure SQL para importar dados de um arquivo de texto sem a necessidade de outro serviço. Isso nos permite minimizar a complexidade da solução.

Por esses motivos, o Banco de Dados SQL do Azure é uma ótima opção para aplicativos como o aplicativo bus-catching, onde você lida com JSON e dados geoespaciais, mas também deseja aproveitar os recursos de acesso a dados e procedimentos incorporados ao mecanismo. O Banco de Dados SQL do Azure sem servidor é uma ótima opção para satisfazer o requisito de dimensionamento automático, permitindo que o aplicativo lide com horários de maior movimento durante o dia, quando mais pessoas estão tentando pegar o ônibus. A Base de Dados SQL do Azure também suporta tecnologias de integração contínua e de entrega contínua/implementação contínua (CI/CD), como o Azure DevOps e as Ações do GitHub, que simplificam a automatização da implementação.

Criar um serviço de API com o Azure Functions

Você precisa de uma API para acessar e consumir o feed GTFS, para notificar um usuário se um barramento entrou em uma cerca geográfica e para fornecer dados a um aplicativo Web. Você selecionou o Azure Functions como o serviço preferido devido à sua simplicidade e arquitetura sem servidor. O Azure Functions é um ótimo serviço porque sua natureza sem servidor é dimensionada automaticamente para o que você precisa, deixando quase todos os aspetos de infraestrutura para o Azure Functions. O Azure Functions fornece suporte para diferentes idiomas, para que possa escolher o seu preferido ou o mais adequado para a tarefa em que está a trabalhar, que segue uma abordagem de microsserviços pura.

Enviar notificações com os Aplicativos Lógicos do Azure

Para receber uma notificação de que um ônibus está dentro da cerca geográfica e você precisa começar a caminhar até a rodoviária, uma opção no Azure é usar os Aplicativos Lógicos do Azure. As Aplicações Lógicas do Azure têm um grande número de conectores para que possa integrar-se com outros serviços. Por exemplo, você pode usar os Aplicativos Lógicos do Azure para enviar uma mensagem SMS ou enviar um email de sua conta do Outlook ou do Gmail. O que é ótimo nos Aplicativos Lógicos do Azure é que ele é uma plataforma low-code/sem código, portanto, configurar o serviço de notificação para pegar o ônibus é fácil, e você pode fazer isso com apenas algumas ações do mouse.

Hospedar o aplicativo Web com os Aplicativos Web Estáticos do Azure

Para visualizar dados geoespaciais, que representam as cercas geográficas e as posições de barramento em um mapa, você pode criar uma página HTML estática usando as conhecidas bibliotecas jQuery e OpenLayers. A página estática precisará buscar dados de uma API REST do lado do servidor que outra Função do Azure fornecerá. Como as partes de cliente e back-end são necessárias para fazer a página de visualização funcionar, você pode aproveitar os Aplicativos Web Estáticos do Azure. Os Aplicativos Web Estáticos do Azure facilitam o desenvolvimento e a implantação da solução porque combinam os recursos dos Aplicativos Web do Azure e do Azure Functions, além de ter integração com as Ações do GitHub internas.

Automatize a implantação com as ações do GitHub

Como você viu, a solução completa é composta por várias partes móveis: o serviço de back-end para extrair dados do feed em tempo real; a base de dados para armazenar, processar e servir dados; e a solução de visualização front-end, que é composta por um arquivo HTML estático e um ponto de extremidade da API REST. Usando um pipeline de CI/CD por meio das Ações do GitHub, você automatizará a implantação de todas as peças via GitHub e Visual Studio Code sempre que confirmar alterações. As alterações de banco de dados, se houver, juntamente com as alterações do Azure Functions e dos Aplicativos Web Estáticos do Azure, serão implantadas de maneira totalmente automatizada e orquestrada.