服务实例和服务副本在本质上是一个东西,都是跑起来的一个服务进程。

1、在物理存在上:

相同的是,每个实例和每个副本都是占了一定的计算存储资源起了一个pod并在里面埋头干活。

不同的是,多实例是多个相互独立的服务进程,每个服务都可以有自己独特的参数配置。多副本是同一个服务实例的复制体,参数配置一毛一样。

ps:当然了,每个实例和每个副本所占的计算存储资源都可以不一样,即便副本是复制出来的也可以不一样,因为复制的只是这个服务本身(包括主程序、配置文件等),而不是运行环境。

2、在调度策略上:

相同的是,在遇到某个实例或某个副本异常挂掉这个情况之后,其余的实例或副本都可以接替它的工作,完成它未竟的事业。

不同的是,如果你是业务系统,调用某个具有多实例的服务(服务实例A1、服务实例A2...),开始用的是A1,结果任务进行到30%,A1挂了,A2是不会自己主动跑过来接替A1的工作的,你这个业务系统得有一套复杂的业务逻辑,去告诉A2:A1没了,它工作进行到30%,它的工作笔记在第二个抽屉,客户资料在第三个抽屉,还有这个那个巴拉巴拉一大堆交接的数据。等A2完全了解A1的工作之后,才接着A1那30%的工作继续往下干。

多副本就省事儿多了,同样的场景,你还是业务系统,调用某个具有多副本的服务(服务副本B1、服务副本B2...),开始用的是B1,任务进行到30%,B1挂了,B2自己就会主动过来直接接替B2的工作,数据在哪儿资料在哪儿它都门儿清,直接无缝衔接,你这个业务系统不用关心他俩工作咋交接,用就完了。

而多副本能做到这么省心,是因为有副本控制器(比如K8s里的ReplicaSet)这个东西帮你把工作交接离职继承这种琐事都干了。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐