我遵循了一些教程,介绍了如何设置3个微服务(应用程序、产品和反馈)和1个服务注册表。
在使用Docker一段时间后,我觉得服务注册表是多余的。因为Docker可以在通过环境变量相互注入主机名和端口的同时踢实例。
例如,在下面的Docker组合文件中,我将数据库凭据从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中对注册表服务进行编码和编程吗?
发布于 2019-05-27 19:27:56
假设您的产品服务公开了外部世界使用https://myserver/myservice的rest端点。
一段时间后,您的产品服务变得非常流行,您希望在不破坏当前合同(上面的端点)的情况下进一步扩展它。
要扩展您的产品服务,您将启动在相同或不同主机上运行的多个实例。
跟踪您的产品服务正在运行的实例数量的服务称为发现服务。
这是不够的,到达您的服务端点的外部流量应该被路由到您的产品服务的所有实例。这就是API网关的工作,它就像一个反向代理。您可以指定轮询等策略将流量路由到所有实例。
因此,API网关和服务发现一起为您的服务提供了可伸缩性和容错能力。
参考文献-
https://auth0.com/blog/an-introduction-to-microservices-part-3-the-service-registry/
发布于 2019-05-27 22:03:26
如果你想对流量负载和服务故障做出反应,你真的需要某种自动化,而不仅仅是组成容器。所有主要的容器管理工具都有一些策略来为您进行服务发现。此外,还有多种方法来执行服务发现(如心跳和游泳)。
坦率地说,你可以从为你的服务启动一些实例开始,然后为你的用户服务。但是你不能对负载和故障做出反应,也不能高效利用资源。这就是像k8s这样的工具大放异彩,为您处理服务发现和资源利用的地方。
查看this talk以了解有关服务发现的更多信息。
https://stackoverflow.com/questions/56320463
复制相似问题