From 79e9d977fd6432d6b1f8caa22528540e03f88aa9 Mon Sep 17 00:00:00 2001 From: Pierre Tessier Date: Fri, 21 Oct 2022 12:24:14 -0400 Subject: [PATCH] organize order of service definitions (#510) --- docker-compose.yml | 282 +++++++++++++++++++++++---------------------- 1 file changed, 143 insertions(+), 139 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index d97707447d..cde395319a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,59 +25,7 @@ networks: driver: bridge services: - # Jaeger - jaeger: - image: jaegertracing/all-in-one - container_name: jaeger - command: ["--memory.max-traces", "10000"] - environment: - - COLLECTOR_OTLP_ENABLED=true - deploy: - resources: - limits: - memory: 275M - restart: always - ports: - - "16686:16686" # Jaeger UI - - "4317" # OTLP gRPC default port - logging: *logging - - # Collector - otelcol: - image: otel/opentelemetry-collector-contrib:0.61.0 - container_name: otel-col - deploy: - resources: - limits: - memory: 100M - restart: always - command: [ "--config=/etc/otelcol-config.yml", "--config=/etc/otelcol-config-extras.yml" ] - volumes: - - ./src/otelcollector/otelcol-config.yml:/etc/otelcol-config.yml - - ./src/otelcollector/otelcol-config-extras.yml:/etc/otelcol-config-extras.yml - ports: - - "4317" # OTLP over gRPC receiver - - "4318:4318" # OTLP over HTTP receiver - - "9464" # Prometheus exporter - - "8888" # metrics endpoint - depends_on: - - jaeger - logging: *logging - - # Redis - redis-cart: - image: redis:alpine - container_name: redis-cart - deploy: - resources: - limits: - memory: 20M - restart: always - ports: - - "${REDIS_PORT}" - logging: *logging - - # AdService + # Ad service adservice: image: ${IMAGE_NAME}:${IMAGE_VERSION}-adservice container_name: ad-service @@ -103,7 +51,7 @@ services: - otelcol logging: *logging - # CartService + # Cart service cartservice: image: ${IMAGE_NAME}:${IMAGE_VERSION}-cartservice container_name: cart-service @@ -130,7 +78,7 @@ services: - otelcol logging: *logging - # CheckoutService + # Checkout service checkoutservice: image: ${IMAGE_NAME}:${IMAGE_VERSION}-checkoutservice container_name: checkout-service @@ -168,7 +116,7 @@ services: - otelcol logging: *logging - # CurrencyService + # Currency service currencyservice: image: ${IMAGE_NAME}:${IMAGE_VERSION}-currencyservice container_name: currency-service @@ -194,7 +142,7 @@ services: - otelcol logging: *logging - # EmailService + # Email service emailservice: image: ${IMAGE_NAME}:${IMAGE_VERSION}-emailservice container_name: email-service @@ -262,57 +210,36 @@ services: - shippingservice logging: *logging - # Frontend Tests - frontendTests: - image: ${IMAGE_NAME}:${IMAGE_VERSION}-frontend-tests - container_name: frontend-tests - build: - context: ./ - dockerfile: ./src/frontend/Dockerfile.cypress - depends_on: - - frontend - profiles: - - tests - environment: - - CYPRESS_baseUrl=http://${FRONTEND_ADDR} - - FRONTEND_ADDR - - NODE_ENV=production - volumes: - - ./src/frontend/cypress/videos:/app/cypress/videos - - ./src/frontend/cypress/screenshots:/app/cypress/screenshots - - # Integration Tests - integrationTests: - image: ${IMAGE_NAME}:${IMAGE_VERSION}-integrationTests - container_name: integrationTests - profiles: - - tests + # Load generator + loadgenerator: + image: ${IMAGE_NAME}:${IMAGE_VERSION}-loadgenerator + container_name: load-generator build: context: ./ - dockerfile: ./test/Dockerfile + dockerfile: ./src/loadgenerator/Dockerfile + cache_from: + - ${IMAGE_NAME}:${IMAGE_VERSION}-loadgenerator + deploy: + resources: + limits: + memory: 120M + restart: always + ports: + - "${LOCUST_WEB_PORT}:${LOCUST_WEB_PORT}" environment: - - AD_SERVICE_ADDR - - CART_SERVICE_ADDR - - CHECKOUT_SERVICE_ADDR - - CURRENCY_SERVICE_ADDR - - EMAIL_SERVICE_ADDR - - PAYMENT_SERVICE_ADDR - - PRODUCT_CATALOG_SERVICE_ADDR - - RECOMMENDATION_SERVICE_ADDR - - SHIPPING_SERVICE_ADDR + - LOCUST_WEB_PORT + - LOCUST_USERS + - LOCUST_HOST + - LOCUST_HEADLESS + - LOCUST_AUTOSTART + - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT + - OTEL_SERVICE_NAME=loadgenerator + - PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python depends_on: - - adservice - - cartservice - - checkoutservice - - currencyservice - - emailservice - - paymentservice - - productcatalogservice - - recommendationservice - - shippingservice - - quoteservice + - frontend + logging: *logging - # PaymentService + # Payment service paymentservice: image: ${IMAGE_NAME}:${IMAGE_VERSION}-paymentservice container_name: payment-service @@ -336,7 +263,7 @@ services: - otelcol logging: *logging - # ProductCatalogService + # Product Catalog service productcatalogservice: image: ${IMAGE_NAME}:${IMAGE_VERSION}-productcatalogservice container_name: product-catalog-service @@ -361,6 +288,7 @@ services: - otelcol logging: *logging + # Quote service quoteservice: image: ${IMAGE_NAME}:${IMAGE_VERSION}-quoteservice container_name: quoteservice @@ -389,7 +317,7 @@ services: - otelcol logging: *logging - # RecommendationService + # Recommendation service recommendationservice: image: ${IMAGE_NAME}:${IMAGE_VERSION}-recommendationservice container_name: recommendation-service @@ -405,10 +333,6 @@ services: restart: always ports: - "${RECOMMENDATION_SERVICE_PORT}" - depends_on: - - productcatalogservice - - otelcol - - featureflagservice environment: - RECOMMENDATION_SERVICE_PORT - PRODUCT_CATALOG_SERVICE_ADDR @@ -420,9 +344,13 @@ services: - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE - OTEL_SERVICE_NAME=recommendationservice - PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python + depends_on: + - productcatalogservice + - otelcol + - featureflagservice logging: *logging - # ShippingService + # Shipping service shippingservice: image: ${IMAGE_NAME}:${IMAGE_VERSION}-shippingservice container_name: shipping-service @@ -447,7 +375,7 @@ services: - otelcol logging: *logging - # FeatureFlagService + # Feature Flag service featureflagservice: image: ${IMAGE_NAME}:${IMAGE_VERSION}-featureflagservice container_name: feature-flag-service @@ -475,6 +403,8 @@ services: condition: service_healthy logging: *logging + + # Postgres used by Feature Flag service ffs_postgres: image: cimg/postgres:14.2 container_name: postgres @@ -494,33 +424,54 @@ services: timeout: 5s retries: 5 - # LoadGenerator - loadgenerator: - image: ${IMAGE_NAME}:${IMAGE_VERSION}-loadgenerator - container_name: load-generator - build: - context: ./ - dockerfile: ./src/loadgenerator/Dockerfile - cache_from: - - ${IMAGE_NAME}:${IMAGE_VERSION}-loadgenerator + # Jaeger + jaeger: + image: jaegertracing/all-in-one + container_name: jaeger + command: ["--memory.max-traces", "10000"] deploy: resources: limits: - memory: 120M + memory: 275M restart: always ports: - - "${LOCUST_WEB_PORT}:${LOCUST_WEB_PORT}" + - "16686:16686" # Jaeger UI + - "4317" # OTLP gRPC default port environment: - - LOCUST_WEB_PORT - - LOCUST_USERS - - LOCUST_HOST - - LOCUST_HEADLESS - - LOCUST_AUTOSTART - - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT - - OTEL_SERVICE_NAME=loadgenerator - - PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python + - COLLECTOR_OTLP_ENABLED=true + logging: *logging + + # Grafana + grafana: + image: grafana/grafana:9.1.0 + container_name: grafana + volumes: + - ./src/grafana/grafana.ini:/etc/grafana/grafana.ini + - ./src/grafana/provisioning/:/etc/grafana/provisioning/ + ports: + - "${GRAFANA_SERVICE_PORT}:${GRAFANA_SERVICE_PORT}" + logging: *logging + + # OpenTelemetry Collector + otelcol: + image: otel/opentelemetry-collector-contrib:0.61.0 + container_name: otel-col + deploy: + resources: + limits: + memory: 100M + restart: always + command: [ "--config=/etc/otelcol-config.yml", "--config=/etc/otelcol-config-extras.yml" ] + volumes: + - ./src/otelcollector/otelcol-config.yml:/etc/otelcol-config.yml + - ./src/otelcollector/otelcol-config-extras.yml:/etc/otelcol-config-extras.yml + ports: + - "4317" # OTLP over gRPC receiver + - "4318:4318" # OTLP over HTTP receiver + - "9464" # Prometheus exporter + - "8888" # metrics endpoint depends_on: - - frontend + - jaeger logging: *logging # Prometheus @@ -541,13 +492,66 @@ services: - "${PROMETHEUS_SERVICE_PORT}:${PROMETHEUS_SERVICE_PORT}" logging: *logging - # Grafana - grafana: - image: grafana/grafana:9.1.0 - container_name: grafana - volumes: - - ./src/grafana/grafana.ini:/etc/grafana/grafana.ini - - ./src/grafana/provisioning/:/etc/grafana/provisioning/ + # Redis used by Cart service + redis-cart: + image: redis:alpine + container_name: redis-cart + deploy: + resources: + limits: + memory: 20M + restart: always ports: - - "${GRAFANA_SERVICE_PORT}:${GRAFANA_SERVICE_PORT}" + - "${REDIS_PORT}" logging: *logging + + + # Frontend Tests + frontendTests: + image: ${IMAGE_NAME}:${IMAGE_VERSION}-frontend-tests + container_name: frontend-tests + build: + context: ./ + dockerfile: ./src/frontend/Dockerfile.cypress + profiles: + - tests + volumes: + - ./src/frontend/cypress/videos:/app/cypress/videos + - ./src/frontend/cypress/screenshots:/app/cypress/screenshots + environment: + - CYPRESS_baseUrl=http://${FRONTEND_ADDR} + - FRONTEND_ADDR + - NODE_ENV=production + depends_on: + - frontend + + # Integration Tests + integrationTests: + image: ${IMAGE_NAME}:${IMAGE_VERSION}-integrationTests + container_name: integrationTests + profiles: + - tests + build: + context: ./ + dockerfile: ./test/Dockerfile + environment: + - AD_SERVICE_ADDR + - CART_SERVICE_ADDR + - CHECKOUT_SERVICE_ADDR + - CURRENCY_SERVICE_ADDR + - EMAIL_SERVICE_ADDR + - PAYMENT_SERVICE_ADDR + - PRODUCT_CATALOG_SERVICE_ADDR + - RECOMMENDATION_SERVICE_ADDR + - SHIPPING_SERVICE_ADDR + depends_on: + - adservice + - cartservice + - checkoutservice + - currencyservice + - emailservice + - paymentservice + - productcatalogservice + - recommendationservice + - shippingservice + - quoteservice