2

通常,应用程序开发人员(以 J2EE 为例)在设计应用程序时不会优先考虑与基础设施相关的问题。很难与传统的非可编程基础架构进行交互。一种传统的方法是构建一个 .war 文件,然后该文件可以在 JBoss 等应用服务器中运行。Spring等传统框架(除了新版本的Spring Cloud)都以此为前提。现在,如果有一个容错、弹性的部署运行时可用,例如 Kubernetes 提供的,那么似乎以同样的方式编写业务应用程序会忽略运行时提供的调度等功能。一个具体的问题:应用程序通常从运行时(即 Kubernetes、Mesos 等)API 中交谈(并从中受益)吗?如果是这样,您能否举一个很好的例子。

4

1 回答 1

5

不,Kubernetes 的重点是您的应用程序不必“意识到”它。(Mesos 有更多“应用程序需要了解我们”的理念。)

在 Kubernetes 中,每个 pod 只是启动并侦听一个端口。该应用程序不会注册它的存在,甚至不会告诉它是什么版本。当它需要与另一个服务通信时,它使用 DNS(甚至是固定的服务 IP)来为该下游服务查找 LB。

通常,应用程序开发人员在设计应用程序时不会优先考虑与基础设施相关的问题

一般来说,只有两件事需要担心:

1)使您的服务无状态,因此您将状态推送到边缘(数据库和/或客户端)。这允许 Kubernetes 通过运行更多副本来“扩展”您的应用程序。有状态的服务几乎不可能扩展。

2)将您的应用程序分解为多个“微服务”,这样您就可以扩展“产品视图”功能,而无需扩展“客户登录”功能。

3) 可选:前往12factor应用程序。

于 2016-02-03T07:10:27.770 回答