部署单体应用程序的时候,我们往往需要运行单个的通常也是大型应用程序的多个相同副本。通常,您需要配置N台服务器(物理服务器或虚拟服务器),并在每台服务器上运行M个应用程序实例。单体应用程序的部署并非总是完全简单的,但比部署微服务应用程序要简单得多。
微服务应用程序包含数十甚至数百个服务。服务以多种语言和框架编写。每个应用程序都是一个微型应用程序,具有自己的特定部署,资源,扩展和监视要求。例如,我们需要根据对该服务的需求运行一定数量的每个服务的实例。另外,必须为每个服务实例提供适当的CPU,内存和I / O资源。更具挑战性的是,尽管存在这种复杂性,但部署服务必须快速,可靠且具有成本效益。
有几种不同的微服务部署模式。首先是每个主机多个服务实例的模式。
每个主机多个服务实例模式
部署微服务的一种方法是使用“每个主机多个服务实例”模式。 使用此模式时,您将配置一个或多个物理或虚拟主机,并在每个虚拟或虚拟主机上运行多个服务实例。 这是应用程序部署的传统方法。 每个服务实例在一个或多个主机上的一个端口上运行。
下图显示了此模式的结构。
此模式有多种变体。每个服务实例的一个变体是一个流程或一个流程组。例如,您可以将Java服务实例作为Web应用程序部署在Apache Tomcat服务器上。一个Node.js服务实例可能包含一个父进程和一个或多个子进程。
此模式的另一个变体是在同一进程或进程组中运行多个服务实例。例如,您可以在同一Apache Tomcat服务器上部署多个Java Web应用程序,或在同一OSGI容器中运行多个OSGI捆绑软件。
每个主机多个服务实例模式既有优点也有缺点。一个主要的好处是它的资源使用相对高效。多个服务实例共享服务器及其操作系统。如果一个进程或进程组运行多个服务实例,例如共享同一个Apache Tomcat服务器和JVM的多个Web应用程序,则效率更高。
这种模式的另一个好处是,部署服务实例相对较快。您只需将服务复制到主机并启动即可。如果服务是用Java编写的,则可以复制JAR或WAR文件。对于其他语言,例如Node.js或Ruby,则复制源代码。无论哪种情况,通过网络复制的字节数都相对较小。
另外,由