Skip to content

ioaiaaii/goduckduckgo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

goduckduckgo

Overview

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.

Roadmap

  • 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

Directory Structure

├── 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

Architecture

Components

Query

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

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.

Flow

flow

Release Engineering, Contributing and Git Flow

Contributions

Contributions in this repo would follow the conventional commits spec.

Branching Flow and CI/CD

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

Hermetic Builds

  • Make builds and computations, environment agnostic
  • Use hashes, non-root users, and bare base images to respect immutability, security and optimizations