前情回顾:
小E在方老师和T姐的教导下,深刻理解了两个问题:
- 把空乘小姐姐听成“风尘小姐姐”并且说出来,这种恶趣味的行为,会被瑞雪大侠收拾;
- 虚拟机的热迁移需要依赖寄存器组搬迁、脏内存标记复制和云盘挂载三大技术;
前期链接在此:
虚拟化与云计算技术硬核内幕 (23) —— 空乘小姐姐和乾坤大挪移 (上)
虚拟化与云计算技术硬核内幕 (24) —— 空乘小姐姐和乾坤大挪移 (中)
虚拟化与云计算技术硬核内幕 (25) —— 空乘小姐姐和乾坤大挪移 (下)
本期,小E同学又进步了,不但理解了虚拟机的调度策略,还领悟了演艺公司避免爱豆塌房的秘诀……
小E搞懂了这两个问题,开心地和T姐一起出差去。在飞机上,小E如愿以偿地选到了喜欢的靠窗的座位,而T姐选择了靠走道的座位,两人开心地聊了一路。
下了飞机,小E突然想到一个问题:
小E和T姐想坐在连着的两个座位上,小E喜欢靠窗的座位,T姐喜欢靠走道的座位,所以,两个人的需求都可以得到满足:
这样,小E和T姐就可以开心地聊一路啦!
换一种情况,如果小E和T姐都想要靠走道的座位,两个人只能这样坐:
虽然这样两个人聊天不大方便,但如果所去的城市出现了中风险地区,航空公司要求飞机上的乘客分开坐,小E和T姐就只能分开啦。
那么,如果把一整排座位视为宿主机,把乘客视为虚拟机,虚拟化系统是否也可以按照业务方面的要求,把特定的一组虚拟机调度到同一台宿主机上,或将它们分开调度到不同的宿主机上呢?
小E查找了一堆资料,发现这两种虚拟机调度方法,叫做,亲和性与反亲和性。
正如小E喜欢和T姐畅谈人生那样,如果两个虚拟机之间需要较为频繁地互通,就应当让它们部署在同一个宿主机内部,如下图:
当然,在装备了SmartNic的宿主机上,这个通信路径还可以进一步缩短:
如图,由于两个VM位于同一个宿主机上,VM之间的通信时延很短。
如果构成某一应用的两个微服务之间有较强的耦合性,为处理某一次请求,会产生较多的交互,那么,在调度虚拟机时,应用亲和性策略,将运行这两个微服务的虚拟机调度到同一个宿主机上,就可以大大减少由于网络时延而造成的阻塞,虚拟机上不需要为了充分利用线程被阻塞时间,而去设定较高的线程池比例,也避免了线程池切换开销,提升了系统处理器利用率,降低了内存的浪费。(红色字体这段以后开专题讲)
但是,应用亲和性调度策略会导致另一个问题。
如果将属于同一个服务的多个VM实例都调度到同一台宿主机上,当宿主机故障的时候,会影响多个VM的运行,从而让这个服务的性能在以分钟计的一段时间内显著下降。在这种情况下,这些VM就不能像小E和T姐那样亲密无间,而需要像“塑料姐妹花”一样,虽然对外呈现的是同一个实例组,但实际上保持一定的距离。这种调度策略叫做反亲和性。
反亲和性的虚拟机调度结果如下图所示:
这样,任意一台宿主机故障,也不会大面积影响某一服务,仅影响每集群中的一个实例。
现在的偶像团体也采取了这样的策略,降低个体的影响力而突出整体,避免了偶像整体塌房的风险。