簡體   English   中英

使用Docker作為微服務的服務注冊表

[英]Using Docker as service registry for microservices

我遵循了一些教程,逐步設置了3個微服務(應用程序,產品和反饋)和1個服務注冊表。

與Docker合作一段時間后,我覺得服務注冊表是多余的。 因為Docker可以在通過環境變量相互注入主機名和端口的同時踢實例。

例如,在下面的Docker Compose文件中,我將數據庫憑據從MySQL微服務傳遞到Node.js微服務,並且以類似的方式,如果還有其他Node.js微服務,我可以將它們連接起來。

version: '3'

services:

  mysql:
    image: "mysql:5.7"
    container_name: "mysql"
    ports:
      - "6603:3306"
    volumes:
      - ./assets/schema.sql:/docker-entrypoint-initdb.d/init.sql
    environment:
      DATABASE_HOST: mysql
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: database
      MYSQL_USER: mysql
      MYSQL_PASSWORD: password

  products_service:
    build: .
    command: bash -c "/wait && npm start"
    volumes:
      - "./src/:/service/src/"
    image: "node"
    container_name: "products"
    ports:
      - "8080:8080"
    depends_on:
      - mysql
    environment:
      DATABASE_HOST: mysql
      MYSQL_PORT: 3306
      MYSQL_DATABASE: database
      MYSQL_USER: mysql
      MYSQL_PASSWORD: password
      WAIT_HOSTS: mysql:3306
    restart: on-failure

我真的需要在Node.js中對注冊表服務進行編碼和編程嗎?

假設您的產品服務暴露了外部端點使用https:// myserver / myservice的其余端點。

一段時間后,您的產品服務變得非常受歡迎,您希望在不違反當前合同的情況下進一步擴展它(上述端點)。

為了擴展產品服務,您將啟動一個或多個在相同或不同主機上運行的實例。

跟蹤產品服務正在運行多少實例的服務稱為發現服務。

這不足以將到達服務端點的外部流量路由到產品服務的所有實例。 這就是API網關的工作,它就像反向代理一樣。 您可以指定諸如循環機制之類的策略,以將流量路由到所有實例。

因此,API網關和服務發現共同為您的服務提供可伸縮性和容錯能力。

引用 -

https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/architect-microservice-container-applications/direct-client-to-microservice-communication-versus-the-api-gateway-pattern

https://auth0.com/blog/an-introduction-to-microservices-part-3-the-service-registry/

如果您想對流量負載和服務故障做出反應,那么您確實確實需要一些自動化,而不僅僅是組成容器。 所有主要的容器管理工具都有一些為您進行服務發現的策略。 另外,還有多種方法來進行服務發現(例如心跳和SWIM)。

坦白說,您可以先啟動一些服務實例並為用戶服務。 但是您將無法對負載和故障做出反應,也無法提高資源效率。 那就是k8s之類的工具在為您發光並處理服務發現和資源利用的地方。

查看演講以了解有關服務發現的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM