Sign inSign up

moleculer/demo

By moleculer

•Updated about 6 years ago

This is a Moleculer microservices demo repo for testing & prototyping

Image
0

4.3K

moleculer/demo repository overview

Moleculer logo

Moleculer

⁠Demo project for Docker

This is an example project to try Moleculer with Docker and Kubernetes.

⁠Usage with Docker

⁠Run a container with all services

docker run -e SERVICES=services -p 3000:3000 moleculer/demo

⁠Run every services in an individual container

In this case you should also start a transporter, e.g. NATS.

docker run -d -e SERVICEDIR=services -e SERVICES=greeter moleculer/demo
docker run -d -e SERVICEDIR=services -e SERVICES=products moleculer/demo
docker run -d -e SERVICEDIR=services -e SERVICES=api -p 3000:3000 moleculer/demo

⁠Usage with Docker Compose

This command starts all services in individual containers, a NATS server as transporter, a MongoDB server & Traefik as reverse proxy.

docker-compose up -d

⁠Usage with Docker Swarm

This command starts all services in individual containers, a NATS server as transporter, a MongoDB server & Traefik as reverse proxy.

docker stack deploy -c docker-compose.yml moleculer

⁠Usage with Kubernetes

This command starts all services in individual pods, a NATS server as transporter, a MongoDB server and register an ingress for API service via http://moleculer.127.0.0.1.nip.io/⁠ URL.

kubectl apply -f https://raw.githubusercontent.com/moleculerjs/docker-demo/master/k8s.yaml

Result

NAME                                           READY   STATUS    RESTARTS   AGE
pod/nats-6c745f949b-8g994                      1/1     Running   0          23h
pod/moleculer-demo-api-6958b5475b-5qfxx        1/1     Running   0          4h37m
pod/moleculer-demo-greeter-6c875544b6-jbcjf    1/1     Running   0          4h37m
pod/moleculer-demo-greeter-6c875544b6-fx829    1/1     Running   0          4h37m
pod/moleculer-demo-api-6958b5475b-mwbc8        1/1     Running   0          4h36m
pod/mongo-555c4f494f-xjvx8                     1/1     Running   0          3h15m
pod/moleculer-demo-products-784446b876-fdlrz   1/1     Running   0          3h8m
pod/moleculer-demo-products-784446b876-5qfrc   1/1     Running   0          3h8m

NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)     AGE
service/nats    ClusterIP   10.43.193.134   <none>        4222/TCP    23h
service/api     ClusterIP   10.43.121.57    <none>        3000/TCP    22h
service/mongo   ClusterIP   10.43.80.140    <none>        27017/TCP   3h15m

NAME                                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nats                      1/1     1            1           23h
deployment.apps/moleculer-demo-greeter    2/2     2            2           23h
deployment.apps/moleculer-demo-api        2/2     2            2           23h
deployment.apps/mongo                     1/1     1            1           3h15m
deployment.apps/moleculer-demo-products   2/2     2            2           4h37m

NAME                                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/nats-6c745f949b                      1         1         1       23h
replicaset.apps/moleculer-demo-greeter-6c875544b6    2         2         2       4h37m
replicaset.apps/moleculer-demo-api-6958b5475b        2         2         2       4h37m
replicaset.apps/mongo-555c4f494f                     1         1         1       3h15m
replicaset.apps/moleculer-demo-products-784446b876   2         2         2       3h8m

If you don't have installed ingress controller, execute this script⁠ to install Nginx Ingress Controller.

If you don't have installed storage controller, execute this script⁠ to install Longhorn Storage Controller⁠.

⁠Services

  • api: API Gateway services
  • calc: Sample service with heavy mathematical calculation to test auto scaling of K8s.
  • greeter: Sample service with hello and welcome actions.
  • products: Sample DB service with MongoDB if process.env.MONGO_URI is defined, otherwise with NeDB.

⁠Test the running project

In case of Docker or Docker Compose

export HOSTNAME=127.0.0.1:3000

In case of Kubernetes

export HOSTNAME=moleculer.127.0.0.1.nip.io

Call the greeter.hello action

curl http://$HOSTNAME/api/hello

Call the greeter.welcome action with params

curl http://$HOSTNAME/api/greeter/welcome?name=Moleculer

Create a product item

curl -X POST -H "Content-Type: application/json" -d '{"name": "Samsung Galaxy S10", "category": "phones", "price": 299.99, "quantity": 10}' http://$HOSTNAME/api/products

List all products

curl http://$HOSTNAME/api/products

⁠Connect from CLI

  1. Port forwarding the NATS service port
    kubectl port-forward --address 0.0.0.0 service/nats 4222
    

    If you have firewall, don't forget to allow this port.

  2. Connect to the deployed application from Moleculer CLI
    moleculer connect nats://<YOUR-CLUSTER-IP-ADDRESS>:4222
    

⁠Horizontal Pod Auto Scaling

The deployment script contains a HorizontalPodAutoscaler⁠ definition for the calc service. It scales the number of calc service pod between 2 and 5 by CPU usages.

Benchmark the calc.pi action to increase the CPU usages to trigger the K8s Horizontal Pod Autoscaler:

ab -c 5 -n 500 http://moleculer.127.0.0.1.nip.io/api/pi

⁠License

This project is available under the MIT license⁠.

⁠Contact

Copyright (c) 2016-2020 MoleculerJS

@moleculerjs @MoleculerJS

Tag summary

Content type

Image

Digest

Size

52 MB

Last updated

about 6 years ago

docker pull moleculer/demo