goduckduckgo
is a set of microservices, that answer client's queries by talking to GDD's API.
This project is a WIP playground to learn Golang with Software Engineering and Systems Design under the SRE discipline.
- Codebase Init
- Package Build: Dockerfile
- Makefile to support local dev and CI/CD operations
- Add gRPC to connect Store with Query components
- Systems Design
- Unit and Functional tests
- Package Deploy: Helm Chart
- Release Engineering
- Telemetry: Logs
- Telemetry: Metrics
- Telemetry: Traces
- Monitoring: Alerting
- Monitoring: Visualization
- Monitoring: Analytics
- Intent-based Capacity Planning
├── api # API definition
├── build # Builds dir
│ ├── ci # CI configurations
│ └── package # Build Package
├── deploy # Deployment Package
│ └── goduckduckgo # Helm Charts
├── monitor # Rules,Dashboards SLOs
│ ├── dashboards # Visualization
│ ├── rules # Alerting
│ └── slo # Analytics
├── docs # Dir for documentation related files
└── src # Project level src for codebase
Query exposes an API for user interaction. It provides the interfaces to be asked for queries and returneds the DDG's answers. Also, it handles the queries tasks such as:
- Caching queries with TTL
- Calling Store to store the query
Store exposes a gRPC interface to interact with Query. It utilizes GORM to interact with a PostgreSQL. It handles the queries-answers persistency lifecycle with CRUD
operations.
Contributions in this repo would follow the conventional commits spec.
for branches or tags do:
- feat/new_feature:
on every branch/pull request do:
- Lint
- Test
- Build and Push Image package to registry with tag <branch_name>
- master:
on every push to master do:
- Build and Push Image package to registry with tag <master>
- tag:
on tag push do:
- Build and Push Image package to registry with tag <tag_semver>
- Create a new GiHub release with multi-platform packages
- Make builds and computations, environment agnostic
- Use hashes, non-root users, and bare base images to respect immutability, security and optimizations