https://github.com/alexfalkowski/go-monolith
A template to have a distributed monolith.
https://github.com/alexfalkowski/go-monolith
cucumber golang make monolith ruby
Last synced: about 1 month ago
JSON representation
A template to have a distributed monolith.
- Host: GitHub
- URL: https://github.com/alexfalkowski/go-monolith
- Owner: alexfalkowski
- License: mit
- Created: 2025-06-24T15:17:14.000Z (12 months ago)
- Default Branch: master
- Last Pushed: 2026-05-08T05:58:35.000Z (about 1 month ago)
- Last Synced: 2026-05-08T07:41:05.460Z (about 1 month ago)
- Topics: cucumber, golang, make, monolith, ruby
- Language: Go
- Homepage: https://alexfalkowski.github.io/go-monolith
- Size: 710 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://circleci.com/gh/alexfalkowski/go-monolith)
[](https://codecov.io/gh/alexfalkowski/go-monolith)
[](https://goreportcard.com/report/github.com/alexfalkowski/go-monolith)
[](https://pkg.go.dev/github.com/alexfalkowski/go-monolith)
[](https://masterminds.github.io/stability/active.html)
# Monolith
There has been tremendous amounts of time being spent on creating [microservices](https://microservices.io/), though is this the place to start?
It is not a trick question, of course not. It is best to start with a monolith and transition to [microservices](https://martinfowler.com/articles/break-monolith-into-microservices.html) when needed.
## Background
After many years of seeing [distributed monoliths](https://www.gremlin.com/blog/is-your-microservice-a-distributed-monolith). This could potentially be a compromise.
### Why a service?
This project allows us to use a [mono repository](https://monorepo.tools/) approach to build connected services.
## Server
This no different to the other services we are built, they just contain it all together.
### API
The [api](api) are where we define out [protobuf](https://protobuf.dev/) services.
### Servers
All the [servers](internal/api) are defined in a [usual way](https://grpc.io/docs/languages/go/basics/).
Each of the services talks to each other via a [client](internal/api/client). As all of this is running through [localhost](https://en.wikipedia.org/wiki/Localhost).
Each service is reachable by defining [REST](https://github.com/alexfalkowski/go-service/tree/master/net/http/rest) endpoints.
## Health
The system defines a way to monitor all of it's dependencies.
To configure we just need the have the following configuration:
```yaml
health:
duration: 1s (how often to check)
timeout: 1s (when we should timeout the check)
```
## Other Systems
[gRPC-Gateway](https://github.com/grpc-ecosystem/grpc-gateway) works in a similar way.
## Development
If you would like to contribute, here is how you can get started.
### Structure
The project follows the structure in [golang-standards/project-layout](https://github.com/golang-standards/project-layout).
### Dependencies
Please make sure that you have the following installed:
- [Ruby](https://www.ruby-lang.org/en/)
- [Golang](https://go.dev/)
### Style
This project favours the [Uber Go Style Guide](https://github.com/uber-go/guide/blob/master/style.md)
### Setup
Check out [CI](.circleci/config.yml).
### Changes
To see what has changed, please have a look at `CHANGELOG.md`