在我想问主要问题之前,我想通过一个分析来自同类型传感器的一些数据的例子来介绍这个问题:
让我们假设对于某些数据分析,使用了微服务架构。输入数据由多个传感器产生。因此,为了训练模型并将这些训练模型用于最新数据,每个部署的传感器都有一个分析微服务。所有分析服务共享一个数据库。该分析服务的图像可以为每个传感器重复使用,因此服务本身可以通过 docker-compose 以手动方式完全配置和部署。分析微服务的区别基本上只是传感器的id。作为传入传感器数据的摄取层,使用 kafka(但这可能是其他任何东西)。
所以 docker-compose.yml 看起来像这样:
version: "3.4"
services:
postgres_analysing:
image: postgres_analyser
container_name: postgres_analyser
build:
context: .
dockerfile: Dockerfile_analyser_postgres
ports:
- "5666:5432"
environment:
- POSTGRES_USER=${ANALYSER_DB_User}
- POSTGRES_PASSWORD=${ANALYSER_DB_PW}
- POSTGRES_DB=${ANALYSER_DB}
networks:
MS_Streaming:
analyser_m1:
image: ${DOCKER_REGISTRY-}analyserpz_comp
build:
context: ${PATH_TO_ANALYSER_CONTEXT}
dockerfile: ${PATH_TO_ANALYSER_DOCKERFILE}
ports:
- "6000:80"
environment:
- AnalyserConfig__Id=${M1_ID}
- KafkaConfig__KafkaBootstrapServers=${KAFKA_BOOTSTRAPSERVER}
- KafkaConfig__KafkaBootstrapServerPort=${KAFKA_SERVERPORT}
- KafkaConfig__KafkaGroupId=${ANALYSER_GROUP_ID}
- KafkaConfig__KafkaConsumerTopic=${M1_ID}.duration
- ConnectionStrings__DbContext=Username=${ANALYSER_DB_User};Password=${ANALYSER_DB_PW};Server=${ANALYSER_DB_SERVER};Port=${ANALYSER_DB_PORT};Database=${ANALYSER_DB}
networks:
MS_Streaming:
analyser_m2:
image: ${DOCKER_REGISTRY-}analyserpz_comp
build:
context: ${PATH_TO_ANALYSER_CONTEXT}
dockerfile: ${PATH_TO_ANALYSER_DOCKERFILE}
ports:
- "6001:80"
environment:
- AnalyserConfig__CylinderId=${M2_ID}
- KafkaConfig__KafkaBootstrapServers=${KAFKA_BOOTSTRAPSERVER}
- KafkaConfig__KafkaBootstrapServerPort=${KAFKA_SERVERPORT}
- KafkaConfig__KafkaGroupId=${ANALYSER_GROUP_ID}
- KafkaConfig__KafkaConsumerTopic=${M2_ID}.duration
- ConnectionStrings__DbContext=Username=${ANALYSER_DB_User};Password=${ANALYSER_DB_PW};Server=${ANALYSER_DB_SERVER};Port=${ANALYSER_DB_PORT};Database=${ANALYSER_DB}
networks:
MS_Streaming:
像这样的底层 .env 文件:
KAFKA_BOOTSTRAPSERVER=my-kafkacluster.de
KAFKA_SERVERPORT=9092
ANALYSER_GROUP_ID=sensor-analyser-group
M1_PZ1_ID=9c1719d0-eabd-4106-8812-9a1b8e0b4d52
M1_PZ2_ID=a7cb43d2-bc6e-4836-80ca-7373be95963f
ANALYSER_DB_SERVER=172.20.0.1
ANALYSER_DB_PW=some_PW
ANALYSER_DB_User=some_User
ANALYSER_DB=analyser_data
ANALYSER_DB_PORT=5432
PATH_TO_ANALYSER_CONTEXT=Path_To_Directory
PATH_TO_ANALYSER_DOCKERFILE=Dockerfile
考虑如果一个新的传感器加入整个管道,短期内必须执行哪些步骤:
- 设置新配置
- 使用此配置部署分析器服务
这两个步骤通常都是手动任务(无论是扩展 docker-compose.yml 或 helm chart 还是通过“本机”kubectl 方法进行部署)。
但实际上,传感器 id 存在于管道的摄取层中。因此,应该可以从(我们称之为)管理服务中检索此 ID,并在此管理服务中实现上述步骤的自动化。
所以目标是结构的增长是由传入的数据驱动的——几乎与自动缩放服务一样,除了每个实例都有自己的配置但相同的容器映像。
到目前为止,我还没有找到任何符合这些要求的东西。除此之外,kubernetes 中的部署(分别是管理服务)可以将其他服务部署到集群似乎有点奇怪。
有人能理解这种方法以及解决方案的外观吗?或者一般来说:使用不同配置完成自动扩展的推荐方法是什么?
谢谢和最好的问候