关于具有多个进程的 Cloudfoundry 应用程序的问题
Questions regarding Cloudfoundry Application with multiple Processes
我正在阅读 cloud foundry 中的 Side Car 和多进程应用程序的概念。
- https://docs.cloudfoundry.org/devguide/multiple-processes.html
- https://docs.cloudfoundry.org/devguide/sidecars.html
我有几个问题是我自己弄不明白的。
问题 1:何时使用带有 Sidecar 的 CF 应用程序与何时使用带有进程的 CF 应用程序
我了解到 sidecar
与 multiple process application
之间的主要区别与容器有关。 sidecar 进程 运行 在同一个容器中,而对于多进程应用程序,所有进程 运行 在不同的容器中。
我无法弄清楚,在哪些情况下我们应该使用 sidecar
与在哪些情况下我们可以使用 multiple process application
Q2:不同技术的不同流程
在具有 multiple processes
的应用程序中,如果我想 运行 2 种不同技术的进程(一个进程在 Java Go 中的另一个进程/其他),如何这样做 ?
当我看到 buildpack
配置与 application
一起使用时,我想到了这个问题,而不是 process
。所以我的印象是好像只有所有进程都必须采用相同的技术(或者我们可以在这里提供多个构建包?)。
这是我正在使用的示例 manifest.yml
:
applications:
- name: multi-process1
disk_quota: 1G
path: target/SampleApp-1.jar
instances: 1
memory: 2G
buildpacks:
- java_buildpack
env:
CONFIG_SERVER_PORT: 8080
processes:
- type: 'task'
command: '$PWD/.java-buildpack/open_jdk_jre/bin/java -jar $PWD/BOOT-INF/lib/mycustomlogger-1.jar'
memory: 512MB
instances: 1
health_check:
type: http
- type: 'sampleProcess2'
command: '$PWD/.java-buildpack/open_jdk_jre/bin/java -jar $PWD/BOOT-INF/lib/mycustomlogger-1.jar'
memory: 512MB
instances: 1
health_check:
type: http
- type: 'web'
#command: '$PWD/.java-buildpack/open_jdk_jre/bin/java $PWD/BOOT-INF/classes/com/example/SampleApp'
memory: 1G
health_check:
type: http
Q3:交互过程
在这种情况下,一个进程如何 call/talk/interact 与应用程序中的其他进程一起处理。这里有哪些可用选项?我找不到任何演示应用程序内多个交互过程的示例,任何示例都会非常有用。
Q4:多目标应用程序与多进程应用程序之间的区别
我遇到了一个叫做 Multi Target Application
的概念,参考:https://www.cloudfoundry.org/blog/accelerating-deployment-distributed-cloud-applications/
我在标准 Cloud Foundry 中没有发现这种可能性,但我觉得它可能与多进程应用程序“相似”(因为它们 运行 在独立容器上并且不会相互影响)。
我的问题是:
Multi Target Application
和 Multi Process Application
有什么区别?
- 构建多目标应用程序所依据的基本 Could Foundry 概念是什么?
任何指导将不胜感激。
Q1: When to use a CF Application with Sidecar vs when to use a CF Application with Processes
当您拥有分离良好的应用程序时,不同的进程类型会有所帮助。他们可能会互相交谈,他们可能会互动,但这是通过某种已发布的界面(如 REST API 或通过消息队列)完成的。
一个典型的例子是工作队列。您可能有一个进程正在 运行ning 您的 Web 应用程序和处理流量,但如果有一项大工作进来,那么它会指示一个工作进程,运行ning 单独处理该工作。这通常是通过消息队列完成的。优点是您可以单独缩放每个。
有了sidecar,他们在同一个进程中。这适用于需要两个或多个进程之间紧密耦合的场景。例如,如果您需要共享同一个文件系统,或者如果您有拦截流量的代理进程。
这两个进程通常以串联缩放的方式联系在一起,即进程之间存在一对一的关系。这种关系是必要的,因为如果您扩展应用程序实例计数,您将同时扩展两者。您不能单独缩放它们。
In an application with multiple processes , if I want to run 2 processes in 2 different technology ( one process on Java another process in Go / anything else), how to do so ?
你是对的。您需要依赖多构建包支持。
您的应用程序仅上演一次,并生成一个 droplet。每个过程都是从同一个液滴中旋转起来的。您需要的一切都必须内置到那个液滴中。因此,您需要将所有内容放在一起,并且需要 运行 多个构建包。
在您的 manifest.yml 中,buildpacks
条目是一个列表。您可以指定要 运行 的构建包,它们将按此顺序 运行。
或者,您可以预编译。如果你正在使用 Go。交叉编译通常是微不足道的,因此您可以提前编译,然后将您生成的二进制文件推送到您的应用程序中。
In this context how can one process call/talk/interact with the other processes within the application. What are the options available here ? I could not find any sample which demonstrate multiple interacting processes within an app, any sample would be really helpful.
我将把它分成两部分:
如果您将应用程序 运行 视为 sidecar,这取决于 sidecar 的功能,但您有多种选择。基本上,您可以在 Linux 环境中做任何事情,请记住您是 运行 作为非 root 用户,您可以做。通过共享file/folder协调,拦截网络端口&代理到另一个端口,或其他ipc.
如果您谈论的是多个进程(CF 术语),这样每个 运行ning 都在一个单独的容器中,那么您的限制就更多了。您需要使用一些外部方法进行通信。这可以是服务代理、数据库(不推荐)或 API(Rest、gRCP 或 rsocket 都是选项)。
请注意,这种“外部”通信方法不一定需要 public,只需在容器外部即可。您可以使用像 broker/DB 这样的私人服务,或者您可以使用 internal routes & container networking.
Q4 : Difference between Multi Target Application vs Multi Process Application
抱歉,我不确定这个。多目标应用程序不是 CF 中的核心概念。我会留给其他人回答。
我正在阅读 cloud foundry 中的 Side Car 和多进程应用程序的概念。
- https://docs.cloudfoundry.org/devguide/multiple-processes.html
- https://docs.cloudfoundry.org/devguide/sidecars.html
我有几个问题是我自己弄不明白的。
问题 1:何时使用带有 Sidecar 的 CF 应用程序与何时使用带有进程的 CF 应用程序
我了解到 sidecar
与 multiple process application
之间的主要区别与容器有关。 sidecar 进程 运行 在同一个容器中,而对于多进程应用程序,所有进程 运行 在不同的容器中。
我无法弄清楚,在哪些情况下我们应该使用 sidecar
与在哪些情况下我们可以使用 multiple process application
Q2:不同技术的不同流程
在具有 multiple processes
的应用程序中,如果我想 运行 2 种不同技术的进程(一个进程在 Java Go 中的另一个进程/其他),如何这样做 ?
当我看到 buildpack
配置与 application
一起使用时,我想到了这个问题,而不是 process
。所以我的印象是好像只有所有进程都必须采用相同的技术(或者我们可以在这里提供多个构建包?)。
这是我正在使用的示例 manifest.yml
:
applications:
- name: multi-process1
disk_quota: 1G
path: target/SampleApp-1.jar
instances: 1
memory: 2G
buildpacks:
- java_buildpack
env:
CONFIG_SERVER_PORT: 8080
processes:
- type: 'task'
command: '$PWD/.java-buildpack/open_jdk_jre/bin/java -jar $PWD/BOOT-INF/lib/mycustomlogger-1.jar'
memory: 512MB
instances: 1
health_check:
type: http
- type: 'sampleProcess2'
command: '$PWD/.java-buildpack/open_jdk_jre/bin/java -jar $PWD/BOOT-INF/lib/mycustomlogger-1.jar'
memory: 512MB
instances: 1
health_check:
type: http
- type: 'web'
#command: '$PWD/.java-buildpack/open_jdk_jre/bin/java $PWD/BOOT-INF/classes/com/example/SampleApp'
memory: 1G
health_check:
type: http
Q3:交互过程
在这种情况下,一个进程如何 call/talk/interact 与应用程序中的其他进程一起处理。这里有哪些可用选项?我找不到任何演示应用程序内多个交互过程的示例,任何示例都会非常有用。
Q4:多目标应用程序与多进程应用程序之间的区别
我遇到了一个叫做 Multi Target Application
的概念,参考:https://www.cloudfoundry.org/blog/accelerating-deployment-distributed-cloud-applications/
我在标准 Cloud Foundry 中没有发现这种可能性,但我觉得它可能与多进程应用程序“相似”(因为它们 运行 在独立容器上并且不会相互影响)。 我的问题是:
Multi Target Application
和Multi Process Application
有什么区别?- 构建多目标应用程序所依据的基本 Could Foundry 概念是什么?
任何指导将不胜感激。
Q1: When to use a CF Application with Sidecar vs when to use a CF Application with Processes
当您拥有分离良好的应用程序时,不同的进程类型会有所帮助。他们可能会互相交谈,他们可能会互动,但这是通过某种已发布的界面(如 REST API 或通过消息队列)完成的。
一个典型的例子是工作队列。您可能有一个进程正在 运行ning 您的 Web 应用程序和处理流量,但如果有一项大工作进来,那么它会指示一个工作进程,运行ning 单独处理该工作。这通常是通过消息队列完成的。优点是您可以单独缩放每个。
有了sidecar,他们在同一个进程中。这适用于需要两个或多个进程之间紧密耦合的场景。例如,如果您需要共享同一个文件系统,或者如果您有拦截流量的代理进程。
这两个进程通常以串联缩放的方式联系在一起,即进程之间存在一对一的关系。这种关系是必要的,因为如果您扩展应用程序实例计数,您将同时扩展两者。您不能单独缩放它们。
In an application with multiple processes , if I want to run 2 processes in 2 different technology ( one process on Java another process in Go / anything else), how to do so ?
你是对的。您需要依赖多构建包支持。
您的应用程序仅上演一次,并生成一个 droplet。每个过程都是从同一个液滴中旋转起来的。您需要的一切都必须内置到那个液滴中。因此,您需要将所有内容放在一起,并且需要 运行 多个构建包。
在您的 manifest.yml 中,buildpacks
条目是一个列表。您可以指定要 运行 的构建包,它们将按此顺序 运行。
或者,您可以预编译。如果你正在使用 Go。交叉编译通常是微不足道的,因此您可以提前编译,然后将您生成的二进制文件推送到您的应用程序中。
In this context how can one process call/talk/interact with the other processes within the application. What are the options available here ? I could not find any sample which demonstrate multiple interacting processes within an app, any sample would be really helpful.
我将把它分成两部分:
如果您将应用程序 运行 视为 sidecar,这取决于 sidecar 的功能,但您有多种选择。基本上,您可以在 Linux 环境中做任何事情,请记住您是 运行 作为非 root 用户,您可以做。通过共享file/folder协调,拦截网络端口&代理到另一个端口,或其他ipc.
如果您谈论的是多个进程(CF 术语),这样每个 运行ning 都在一个单独的容器中,那么您的限制就更多了。您需要使用一些外部方法进行通信。这可以是服务代理、数据库(不推荐)或 API(Rest、gRCP 或 rsocket 都是选项)。
请注意,这种“外部”通信方法不一定需要 public,只需在容器外部即可。您可以使用像 broker/DB 这样的私人服务,或者您可以使用 internal routes & container networking.
Q4 : Difference between Multi Target Application vs Multi Process Application
抱歉,我不确定这个。多目标应用程序不是 CF 中的核心概念。我会留给其他人回答。