Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在单个docker容器或连接到同一数据库的两个容器中运行两个进程?_Python_Docker_Containers_Apache Kafka_Microservices - Fatal编程技术网

Python 在单个docker容器或连接到同一数据库的两个容器中运行两个进程?

Python 在单个docker容器或连接到同一数据库的两个容器中运行两个进程?,python,docker,containers,apache-kafka,microservices,Python,Docker,Containers,Apache Kafka,Microservices,我需要开发一个听卡夫卡主题并将数据保存到DB(cassandra)的应用程序。这将是一个高密度的数据流,因此保存数据将耗费大量资源。保存数据后,将通过RESTAPI查询和公开数据 我看到两种选择,但都有缺点: 选项1 创建两个服务,每个服务位于单独的docker容器中。一个只运行python中的kafka侦听器进程,另一个运行flask web服务器。 优点:每个容器只运行一个进程 缺点:两个服务都连接到同一个数据库,根据微服务模式体系结构,这并不理想,因为服务没有完全解耦 选项2 在一个容器中

我需要开发一个听卡夫卡主题并将数据保存到DB(cassandra)的应用程序。这将是一个高密度的数据流,因此保存数据将耗费大量资源。保存数据后,将通过RESTAPI查询和公开数据

我看到两种选择,但都有缺点:

选项1
创建两个服务,每个服务位于单独的docker容器中。一个只运行python中的kafka侦听器进程,另一个运行flask web服务器。
优点:每个容器只运行一个进程
缺点:两个服务都连接到同一个数据库,根据微服务模式体系结构,这并不理想,因为服务没有完全解耦

选项2
在一个容器中同时运行kafka侦听器和web服务。
优点:只需一项服务即可连接到数据库。
缺点:在一个docker容器中运行多个进程,其中一个(保存和更新)比另一个要耗费更多的资源,因此无法统一扩展

有没有另外一种方法不涉及移动到单片架构?或者哪一个是最佳做法?

选择选项1。用于设置容器:

  • 为您的卡夫卡消费者提供一项“服务”
  • 为您的RESTAPI进程提供一个“服务”
  • 如果您想对数据库进行容器化,也可以为此添加一个Cassandra容器
使用Docker Compose将允许您通过一个命令来加速事情的发展,您可以在容器、集中式日志等之间建立依赖关系和链接(DNS名称解析)——这非常适合您这样的情况

分离容器将允许您扩展、控制应用程序的生命周期,并允许您单独启动/停止/更新每个应用程序。另外,每个容器只需要运行一个进程,这是一个经过验证和推荐的最佳实践。它使控制容器和应用程序的生命周期变得更容易,还使容器更精简,更易于管理

示例:如果您的Kafka侦听器关闭,RESTAPI继续运行,您会怎么做?要解决这个问题,您必须重新启动整个容器(除非您希望SSH到容器中并重新启动其中一个进程)。每个容器只有一个进程,这很简单——只需重新启动该容器即可


两个服务都指向同一个数据库这一事实是无关紧要的——如果两个服务都使用相同的数据,那么您将不得不接受这一事实。另一种方法是在两个数据库之间进行同步(一个是Kafka侦听器写入的,另一个是RESTAPI)。这将增加更多的复杂性和开销。如果你做了一个干净的设计,如果你在分离数据时看到了一个值,你仍然可以在以后添加它-我一开始不会担心这个问题。

在构建自己的解决方案之前,你应该先查看Kafka Connect。对我来说,听起来卡夫卡连接将提供任何你需要的开箱即用。(无论如何,它是阿帕奇·卡夫卡的一部分)。