Skip to content

kkulewski/soa

Repository files navigation

Retail SOA

Ordinary online retail service with service oriented architecture.
At some point it may evolve into coarse-grained microservices architecture.

Services

Retail.Queue

RabbitMQ with custom configuration. Transport for MassTransit service bus.

Retail.Frontend

SPA in Vue.js 3. Combines multiple microfrontends into a single UI for the application.
Uses OIDC-Client to obtain access and identity tokens.
Microfrontends

Retail.Sales

ASP.NET Core Web API with MassTransit. Uses saga to process order in each state. Pushes logs to ElasticSearch with Serilog.

Retail.Sales.Microfrontend

WebComponents in vanilla JavaScript, served with nginx. Provides fragments for other views.

  • <sales-buy> - displays "buy button" for product with given ID, emits product_added_to_cart event
  • <sales-cart> - displays cart count, consumes product_added_to_cart to update state

Retail.Billing

MassTransit console app. Collects payment for the orders. Uses key-value store to keep state.

Retail.Billing.Database [TODO]

Redis key-value store.

Retail.Shipping

MassTransit console app. Ships order products to the customer. Manages state in NoSQL database.

Retail.Shipping.Database

MongoDB NoSQL database.

Retail.Catalog

ASP.NET Core Web API. Simple CRUD for products information. Uses Dapper with relational database.

Retail.Catalog.Database

PostgreSQL relational database.

Retail.Catalog.Frontend

Svelte UI for product catalog CRUD operations. Uses no-auth endpoint.

Retail.Recommendations [TODO]

MassTransit console app. Implements "You may also like" feature for products with graph database.

Retail.Recommendations.Database

Neo4j graph database.

Retail.Elastic

ELK stack - ElasticSearch. Used to aggregate logs from services.

Retail.Kibana

ELK stack - Kibana. Used to browse logs from services.

Retail.Auth

IdentityServer4. Handles OICD authentication and OAuth 2.0 authorization with RSA256 signed JWT.
RSA is preffered over HMAC, as such tokens can be verified by other services which cached Auth's public key.

Retail.Jaeger

Jaeger instance. Used to collect and visualize traces of inter-service requests in OpenTelemetry format.

Retail.Http

Example HTTP requests to various services.