[英]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://auth0.com/blog/an-introduction-to-microservices-part-3-the-service-registry/
如果您想對流量負載和服務故障做出反應,那么您確實確實需要一些自動化,而不僅僅是組成容器。 所有主要的容器管理工具都有一些為您進行服務發現的策略。 另外,還有多種方法來進行服務發現(例如心跳和SWIM)。
坦白說,您可以先啟動一些服務實例並為用戶服務。 但是您將無法對負載和故障做出反應,也無法提高資源效率。 那就是k8s之類的工具在為您發光並處理服務發現和資源利用的地方。
查看此演講以了解有關服務發現的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.