# microservices-demo **Repository Path**: github-5407963/microservices-demo ## Basic Information - **Project Name**: microservices-demo - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-03-10 - **Last Updated**: 2021-03-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

Online Boutique

![Continuous Integration](https://github.com/GoogleCloudPlatform/microservices-demo/workflows/Continuous%20Integration%20-%20Master/Release/badge.svg) **Online Boutique** is a cloud-native microservices demo application. Online Boutique consists of a 10-tier microservices application. The application is a web-based e-commerce app where users can browse items, add them to the cart, and purchase them. **Google uses this application to demonstrate use of technologies like Kubernetes/GKE, Istio, Stackdriver, gRPC and OpenCensus**. This application works on any Kubernetes cluster, as well as Google Kubernetes Engine. It’s **easy to deploy with little to no configuration**. If you’re using this demo, please **★Star** this repository to show your interest! > 👓**Note to Googlers:** Please fill out the form at > [go/microservices-demo](http://go/microservices-demo) if you are using this > application. Looking for the old Hipster Shop frontend interface? Use the [manifests](https://github.com/GoogleCloudPlatform/microservices-demo/tree/v0.1.5/kubernetes-manifests) in release [v0.1.5](https://github.com/GoogleCloudPlatform/microservices-demo/releases/v0.1.5). ## Screenshots | Home Page | Checkout Screen | | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | | [![Screenshot of store homepage](./docs/img/online-boutique-frontend-1.png)](./docs/img/online-boutique-frontend-1.png) | [![Screenshot of checkout screen](./docs/img/online-boutique-frontend-2.png)](./docs/img/online-boutique-frontend-2.png) | ## Quickstart (GKE) [![Open in Cloud Shell](https://gstatic.com/cloudssh/images/open-btn.svg)](https://ssh.cloud.google.com/cloudshell/editor?cloudshell_git_repo=https://github.com/GoogleCloudPlatform/microservices-demo&cloudshell_tutorial=README.md) 1. **[Create a Google Cloud Platform project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#creating_a_project)** or use an existing project. Set the `PROJECT_ID` environment variable and ensure the Google Kubernetes Engine and Cloud Operations APIs are enabled. ``` PROJECT_ID="" gcloud services enable container.googleapis.com --project ${PROJECT_ID} gcloud services enable monitoring.googleapis.com \ cloudtrace.googleapis.com \ clouddebugger.googleapis.com \ cloudprofiler.googleapis.com \ --project ${PROJECT_ID} ``` 2. **Clone this repository.** ``` git clone https://github.com/GoogleCloudPlatform/microservices-demo.git cd microservices-demo ``` 3. **Create a GKE cluster.** ``` ZONE=us-central1-b gcloud container clusters create onlineboutique \ --project=${PROJECT_ID} --zone=${ZONE} \ --machine-type=e2-standard-2 --num-nodes=4 ``` 4. **Deploy the sample app to the cluster.** ``` kubectl apply -f ./release/kubernetes-manifests.yaml ``` 5. **Wait for the Pods to be ready.** ``` kubectl get pods ``` After a few minutes, you should see: ``` NAME READY STATUS RESTARTS AGE adservice-76bdd69666-ckc5j 1/1 Running 0 2m58s cartservice-66d497c6b7-dp5jr 1/1 Running 0 2m59s checkoutservice-666c784bd6-4jd22 1/1 Running 0 3m1s currencyservice-5d5d496984-4jmd7 1/1 Running 0 2m59s emailservice-667457d9d6-75jcq 1/1 Running 0 3m2s frontend-6b8d69b9fb-wjqdg 1/1 Running 0 3m1s loadgenerator-665b5cd444-gwqdq 1/1 Running 0 3m paymentservice-68596d6dd6-bf6bv 1/1 Running 0 3m productcatalogservice-557d474574-888kr 1/1 Running 0 3m recommendationservice-69c56b74d4-7z8r5 1/1 Running 0 3m1s redis-cart-5f59546cdd-5jnqf 1/1 Running 0 2m58s shippingservice-6ccc89f8fd-v686r 1/1 Running 0 2m58s ``` 7. **Access the web frontend in a browser** using the frontend's `EXTERNAL_IP`. ``` kubectl get service frontend-external | awk '{print $4}' ``` *Example output - do not copy* ``` EXTERNAL-IP ``` **Note**- you may see `` while GCP provisions the load balancer. If this happens, wait a few minutes and re-run the command. 8. [Optional] **Clean up**: ``` gcloud container clusters delete onlineboutique \ --project=${PROJECT_ID} --zone=${ZONE} ``` ## Other Deployment Options - **Workload Identity**: [See these instructions.](docs/workload-identity.md) - **Istio**: [See these instructions.](docs/service-mesh.md) - **Anthos Service Mesh**: ASM requires Workload Identity to be enabled in your GKE cluster. [See the workload identity instructions](docs/workload-identity.md) to configure and deploy the app. Then, use the [service mesh guide](/docs/service-mesh.md). - **non-GKE clusters (Minikube, Kind)**: see the [Development Guide](/docs/development-guide.md) - **Memorystore**: [See these instructions](/docs/memorystore.md) to replace the in-cluster `redis` database with hosted Google Cloud Memorystore (redis). ## Architecture **Online Boutique** is composed of 11 microservices written in different languages that talk to each other over gRPC. See the [Development Principles](/docs/development-principles.md) doc for more information. [![Architecture of microservices](./docs/img/architecture-diagram.png)](./docs/img/architecture-diagram.png) Find **Protocol Buffers Descriptions** at the [`./pb` directory](./pb). | Service | Language | Description | | ---------------------------------------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------- | | [frontend](./src/frontend) | Go | Exposes an HTTP server to serve the website. Does not require signup/login and generates session IDs for all users automatically. | | [cartservice](./src/cartservice) | C# | Stores the items in the user's shopping cart in Redis and retrieves it. | | [productcatalogservice](./src/productcatalogservice) | Go | Provides the list of products from a JSON file and ability to search products and get individual products. | | [currencyservice](./src/currencyservice) | Node.js | Converts one money amount to another currency. Uses real values fetched from European Central Bank. It's the highest QPS service. | | [paymentservice](./src/paymentservice) | Node.js | Charges the given credit card info (mock) with the given amount and returns a transaction ID. | | [shippingservice](./src/shippingservice) | Go | Gives shipping cost estimates based on the shopping cart. Ships items to the given address (mock) | | [emailservice](./src/emailservice) | Python | Sends users an order confirmation email (mock). | | [checkoutservice](./src/checkoutservice) | Go | Retrieves user cart, prepares order and orchestrates the payment, shipping and the email notification. | | [recommendationservice](./src/recommendationservice) | Python | Recommends other products based on what's given in the cart. | | [adservice](./src/adservice) | Java | Provides text ads based on given context words. | | [loadgenerator](./src/loadgenerator) | Python/Locust | Continuously sends requests imitating realistic user shopping flows to the frontend. | ## Features - **[Kubernetes](https://kubernetes.io)/[GKE](https://cloud.google.com/kubernetes-engine/):** The app is designed to run on Kubernetes (both locally on "Docker for Desktop", as well as on the cloud with GKE). - **[gRPC](https://grpc.io):** Microservices use a high volume of gRPC calls to communicate to each other. - **[Istio](https://istio.io):** Application works on Istio service mesh. - **[OpenCensus](https://opencensus.io/) Tracing:** Most services are instrumented using OpenCensus trace interceptors for gRPC/HTTP. - **[Cloud Operations (Stackdriver)](https://cloud.google.com/products/operations):** Many services are instrumented with **Profiling**, **Tracing** and **Debugging**. In addition to these, using Istio enables features like Request/Response **Metrics** and **Context Graph** out of the box. When it is running out of Google Cloud, this code path remains inactive. - **[Skaffold](https://skaffold.dev):** Application is deployed to Kubernetes with a single command using Skaffold. - **Synthetic Load Generation:** The application demo comes with a background job that creates realistic usage patterns on the website using [Locust](https://locust.io/) load generator. ## Local Development If you would like to contribute features or fixes to this app, see the [Development Guide](/docs/development-guide.md) on how to build this demo locally. ## Demos featuring Online Boutique - [Take the first step toward SRE with Cloud Operations Sandbox](https://cloud.google.com/blog/products/operations/on-the-road-to-sre-with-cloud-operations-sandbox) - [Deploying the Online Boutique sample application on Anthos Service Mesh](https://cloud.google.com/service-mesh/docs/onlineboutique-install-kpt) - [Anthos Service Mesh Workshop: Lab Guide](https://codelabs.developers.google.com/codelabs/anthos-service-mesh-workshop) - [KubeCon EU 2019 - Reinventing Networking: A Deep Dive into Istio's Multicluster Gateways - Steve Dake, Independent](https://youtu.be/-t2BfT59zJA?t=982) - Google Cloud Next'18 SF - [Day 1 Keynote](https://youtu.be/vJ9OaAqfxo4?t=2416) showing GKE On-Prem - [Day 3 Keynote](https://youtu.be/JQPOPV_VH5w?t=815) showing Stackdriver APM (Tracing, Code Search, Profiler, Google Cloud Build) - [Introduction to Service Management with Istio](https://www.youtube.com/watch?v=wCJrdKdD6UM&feature=youtu.be&t=586) - [Google Cloud Next'18 London – Keynote](https://youtu.be/nIq2pkNcfEI?t=3071) showing Stackdriver Incident Response Management --- This is not an official Google project.