Categorygithub.com/ericbutera/amalgam
repository
1.4.0
Repository: https://github.com/ericbutera/amalgam.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# README

Amalgam

Tech demo of a modern web application stack.

Prerequisites

  1. docker
  2. tilt.dev

Run

tilt up
curl -v http://localhost:3000/ # or open in browser

Architecture

Architecture contains an overview of how to convert a project from a monolith to a microservices architecture.

Services

Monolith REST API

A classic "monolith" REST api built with gin-gonic. This service would be available to the public. It will be replaced with GraphQL as the project progresses.

One of the major points of this project is the OpenAPI specification. It is generated from the gin endpoint code and is used to generate API clients in various languages.

Graph (GraphQL)

GraphQL API. The goal is to show how to quickly build out public facing features. GraphQL would be available to public.

Resources:

User Interface (UI)

A Next.JS app user interface for interacting with the project. At first it uses the REST API, but will be updated to use the GraphQL API.

TODO:

Command Line Interface (CLI)

A way to interact with the project using the command line. This project aims to be low-code as it uses a pre-generated REST API client. A stretch goal will be to add a Text User Interface (TUI).

RPC (gRPC)

A simple gRPC service that can be used to show how to convert a monolith into microservices architecture. This service would only be available on the internal VPC.

Data Pipeline

Temporal

The first pipeline that I have built is a rudimentary batch process for ingesting RSS feeds.

Supporting Services

LGTM Observability Stack

Observability is the heart of quality software. This project uses a demonstration LGTM stack to show how various pieces of the system can be monitored.

TODO:

Minio

Minio is a drop in object storage similar to AWS S3. I mainly will be using it as a data storage mechanism for data pipelines, but also as a fake CDN.

Nats

Nats is a cloud native event messaging system. It will be used to show how event driven architecture can be implemented. Jetstream offers a persistent message store enabling GCP Pubsub like functionality.

K6 (testing)

K6 tests have been generated from the OpenAPI spec. They are a high level way of verifying the API is working as expected. This is a wonderful way to have end-to-end tests that are easy to write and maintain. Next steps might be adding load testing.

Domain Logic

A simplified version of domain driven design.

TODO:

Code generation

One of the major goals of this project is to show how to quickly build integrations. Part of that is utilizing code generation to lower the amount of code that needs to be written and maintained.

Code Quality

Be sure to install the pre-commit hooks which run various linters, formatters, and tests.

just setup

Linters:

CI/CD

Github Actions can be found in the .github/workflows directory. You can run them locally using act.

TODO

  • helm chart
    • values file for configuration
    • service account
    • ingress
    • deployment + service
    • base chart to share otel conf
  • just
  • graphql
  • fake feed data generation
  • ci gate: coverage