《架构师》2020年8月
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

谎言 4:分开扩展服务通常是有利的

在每个应用程序中,都有经常运行的部分和很少运行的部分。很少运行的部件比频繁运行的部件需要的资源要少一些。那么分开扩展这些部件是否有意义?

从根本上讲,扩展软件的原因是因为你的软件需要更多的核心资源。这些资源可能是CPU周期、内存、磁盘空间或网络。例如,当CPU以100%运行时,可以启动另一个服务来减轻压力。

对于大多数应用,水平扩展(克隆单体)就足够了。水平扩展的复杂度较低,许多云服务都可以用很少的配置来做到这一点。

相比之下,选择分开扩展许多微服务有两个常见原因。首先,如果你的代码具有实质上并行的部分,则在某些情况下将计算块分配给不同的“worker”可能会有些意义。重要的是,相对于每个任务的总计算量,数据传输和加速的开销必须够低。因此,将十个计算块(每个计算耗时10ms)发送到服务器,开销却为100ms就没有并行的价值了。因为顺序执行耗时是10x10ms=100ms,而并行却是10ms+100ms=110ms。但是,如果每次计算都花费100毫秒,则将它们并行化就能节省时间。

其次,如果资源需求在整个请求中出现变化,则单独扩展各个微服务可能是有意义的。例如,如果一个请求在开始时是受内存限制的,而在结束时是CPU限制的,那么就可以将请求的开始部分放在高内存服务中,将结束部分放在高CPU服务中。即便如此,除非你是独角兽级别的企业,否则分开扩展服务带来的财务优势可能也无法抵消额外的复杂性。

另外,你试图省钱的做法可能会适得其反:

快乐的云客户