Skip to content

balchua/demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Demo Kit

FOSSA Status Build Demo project

Quotes module: Quality Gate Status

Votes module: Quality Gate Status

This project is a simple demonstration of microservices using Springboot integrated with Zipkin. It is a simple project that lists quotes from Marvel movies and users can vote which one of them they like.

The application then tally the votes.

The demo also presents better observability with Prometheus, Grafana, Loki and Jaeger/Zipkin

Prerequisites:

  1. MicroK8s
  2. Docker
  3. Skaffold version 1.21.1
  4. Helm, version 3.5.0+
  5. Maven
  6. jib-maven-plugin
  7. Observability tools - Prometheus, Grafana, Loki and Jaeger / Zipkin

Install Infrastructure

Install MicroK8s

Install MicroK8s to easily bootstrap a Kubernetes cluster. For simplicity we will use a single node MicroK8s.

$ sudo snap install microk8s --channel 1.21/stable
$ microk8s config -l > $HOME/.kube/config #Export the kubeconfig to the default location

These addons must be enabled:

  • rbac
  • dns
  • prometheus
  • jaeger

Install kubectl

$ sudo snap install kubectl --classic

Create your application namespace

We will be installing your application to my-project namespace.

$ kubectl create ns my-project

Enable Prometheus addon

$ microk8s enable prometheus

Install Loki

$ helm repo add loki https://grafana.github.io/loki/charts # Add Grafana helm chart repo
$ helm upgrade --install loki --namespace=monitoring loki/loki-stack # Install the loki stack (loki and promtail) to monitoring namespace

Add Loki datasource, go to Settings. Follow the screenshots below.

Add datasource

Select the Loki data. Loki DS

Make sure that you set the http url to http://loki:3100

Loki url

After that click Save and Test

Distributed Tracing

Zipkin Option

To start Zipkin

skaffold run -p local

To stop Zipkin

skaffold delete -p local

Checkout the skaffold.yaml.

In order to access zipkin, you can use port-forwarding

$ kubectl -n my-project port-forward svc/zipkin 9411:9411

You can now use your browser and point to http://localhost:9411 to access zipkin

Sample screenshot

Zipkin

Zipkin Drill Down

Jaeger

If you are using MicroK8s, you can simply enable the jaeger addon.

microk8s enable jaeger

This will deploy Jaeger operator and the simplest Jaeger into the default namespace.

After enabling the addon, you should see the jaeger-operator and the simplest pods running in the default namespace.

kubectl get pods
NAME                               READY   STATUS    RESTARTS   AGE
jaeger-operator-85fb5c9745-q2lgk   1/1     Running   0          66s
simplest-54b7455bf9-9dnlz          1/1     Running   0          58s

To access the Jaeger UI, simply do port forwarding to the simplest pod.

kubectl port-forward svc/simplest-query 16686
Forwarding from 127.0.0.1:16686 -> 16686
Forwarding from [::1]:16686 -> 16686

Then you can access it with localhost:16686 Jaeger dashboard

Drill-down Jaeger Spans

In the master branch jaeger addon is the default collector endpoint used.

Project structure

Main components are:

  • frontend/ - Hosts the web pages as well as RESTful access to backend services.

  • quotes/ - This component retrieves the Marvel character quotes data stored PostgresSQL.

  • votes/ - This component keeps track of the votes on each quote.

  • bot/ - The bot will randomly vote quotes to simulate traffic into the kit.

  • bot-go/ - Golang version of bot.

  • protos/ - Keeps all proto files in one location.

  • db/ - Contains all infrastructure related components such as PostgreSQL, Redis and flyway (to perform schema migrate).

    • db/postgres - Postgres kubernetes manifests.
    • db/redis - Redis kubernetes manifests.
    • db/schema-migrate/ - Flyway schema migration manifests. Run as Kubernetes Job.
  • zipkin/ - Stashes all Zipkin kubernetes manifests.

Frontend

This is a springboot application that has a simple GUI, which calls the quote service to retrieve all the quotes, calls vote service to cast and tally votes. The frontend exposed these REST endpoints.

  • /api/quote/list
  • /api/vote/castVote
  • /api/vote/tally

UI style is brought to you by Material Kit

Build

Go to the directory frontend/

To build the project, do a mvn clean install jib:dockerBuild For simplicity, you can also use the provided skaffold.yaml and run skaffold run -p local or skaffold dev -p local if you want continuous build and deploy to you local cluster.

Test

You can use Postman to test the frontend's RESTFul endpoints.

Quote

This is another springboot application that retrieves quotes stored in PostgreSQL. It uses gRPC java for communication.

Stacks:

Build

Go to directory quotes

To build the project, do a mvn clean install jib:dockerBuild

Run

In order to run the quotes service, you need to have the Quotes DB up and running.

Use skaffold:

  1. Start the quotes DB (postgres)

skaffold run -p quotes-db-local

  1. Start the quotes service

skaffold run -p local

Checkout the skaffold.yaml.

Test

You can use grpcurl to test it from command line.

Using grpcurl

To get all quotes

grpcurl -plaintext localhost:50052 org.bal.vote.proto.internal.QuoteManagement/AllQuotes

To get quote by Id:

grpcurl -plaintext -d '{"quoteId":"0"}' localhost:50052 org.bal.vote.proto.internal.QuoteManagement/GetQuoteById

Vote

This is another springboot application that allows users to cast their favorite Marvel quotes. It also tallies all the votes.

It uses gRPC java for communication.

It stores its data in Redis.

Stacks:

Build

To build the project, do a mvn clean install jib:dockerBuild For simplicity, you can also use the provided skaffold.yaml and run skaffold run -p local or skaffold dev -p local if you want continuous build and deploy to you local cluster.

Run

In order to run the votes service, you need to have the Quotes DB up and running.

Use skaffold:

  1. Start the Votes DB (Redis)

skaffold run -p votes-db-local

  1. Start the vote service

skaffold run -p local

Checkout the skaffold.yaml.

Test

You can use grpcurl to test it from command line.

Using grpcurl

To get the votes tally

grpcurl -plaintext localhost:50052 org.bal.vote.proto.internal.VoteManagement/GetAllVotes

To cast a vote:

grpcurl -plaintext -d '{"quoteId":"0"}' localhost:50052 org.bal.vote.proto.internal.VoteManagement/CastVote

bot-go

To build the bot-go project refer to here

License

FOSSA Status

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published