Docker 容器粒度:SOA 还是单体?
Docker container granularity: SOA or monoliths?
目前我有一个 Java 网络应用程序,它由六个左右的微服务支持,其中每个微服务与 1+ 支持资源(数据库、第三方 REST 服务、CRM、遗留系统、JMS 等)。这些组件中的每一个都存在于 1 个以上的虚拟机上。因此架构如下:
myapp.war
同时生活在 myapp01.example.com
和 myapp02.example.com
- 连接到生活在
dataservice01.example.com
和 dataservice02.example.com
上的 dataservice.war
,后者连接到 mysql01.example.com
myapp.war
也连接到生活在 crmservice01.example.com
上的 crmservice.war
,它连接到 http://some-3rd-part-crm.example.com
现在说我想 "Dockerify" 我的整个应用架构。我会为每种类型的组件(myapp
、dataservice
、mysql
、crmservice
等)写 1 个 Docker 图像还是写一个 "monolithic" 包含所有应用程序、服务、数据库、消息代理 (JMS) 等的容器?
我确定我可以用任何一种方式做到这一点,但我的问题的根源是:Are Docker containers intended to house/contain a single app, or are他们打算代表一个完整的 环境 ,由多个相互关联的 apps/services?
例如,Docker 哲学明确要求为您拥有的每个应用程序、服务或支持资源创建单独的 Docker 文件,然后 link 它们。
您可以将 Docker Compose 用于 运行 不同的 Docker 容器:Django and Rails 个示例。
此外,kubernetes or ECS 等工具允许您管理整个环境的完整生命周期和基础架构,包括自动缩放、负载平衡等。
目前我有一个 Java 网络应用程序,它由六个左右的微服务支持,其中每个微服务与 1+ 支持资源(数据库、第三方 REST 服务、CRM、遗留系统、JMS 等)。这些组件中的每一个都存在于 1 个以上的虚拟机上。因此架构如下:
myapp.war
同时生活在myapp01.example.com
和myapp02.example.com
- 连接到生活在
dataservice01.example.com
和dataservice02.example.com
上的dataservice.war
,后者连接到mysql01.example.com
myapp.war
也连接到生活在crmservice01.example.com
上的crmservice.war
,它连接到http://some-3rd-part-crm.example.com
- 连接到生活在
现在说我想 "Dockerify" 我的整个应用架构。我会为每种类型的组件(myapp
、dataservice
、mysql
、crmservice
等)写 1 个 Docker 图像还是写一个 "monolithic" 包含所有应用程序、服务、数据库、消息代理 (JMS) 等的容器?
我确定我可以用任何一种方式做到这一点,但我的问题的根源是:Are Docker containers intended to house/contain a single app, or are他们打算代表一个完整的 环境 ,由多个相互关联的 apps/services?
Docker 哲学明确要求为您拥有的每个应用程序、服务或支持资源创建单独的 Docker 文件,然后 link 它们。
您可以将 Docker Compose 用于 运行 不同的 Docker 容器:Django and Rails 个示例。
此外,kubernetes or ECS 等工具允许您管理整个环境的完整生命周期和基础架构,包括自动缩放、负载平衡等。