在前面探秘一和探秘二中,我们已经分享了ZStack的拓扑结构和如何实现超高可伸缩性的能力。还记得我们在Why ZStack中说的,稳定性和灵活性是IaaS需要解决的两大问题。今天我们就来揭开ZStack超强灵活性的奥秘。
今天的内容非常的丰富,我们先来看一下什么是灵活性。所谓灵活性无非是三个方面:当需要添加新功能的时候简单方便,不拖泥带水;系统升级轻巧无障碍;IaaS云配置想改就改,无需重头搭建,改动影响仅限于被影响的部分。让我们带着这三个方面的定义来读今天的内容。
首先让我们看看通常一个自由生长出来的IaaS,它内部各个Components之间的消息传递或者说逻辑关系图吧。
是不是看起来还行?熟悉IaaS的人应该可以理解。有没有想过当你再增加一个监控,一个计费,一个管理界面的时候,它可就不只是增加三个圈圈这么简单了,这图里的连接线怕是要多上好几倍。而当你需要修改一个圈圈的数据结构和输出结果的时候,你需要更改所有和当前圈圈有联系的其他功能模块的接口。为什么会是这样?这因为在自由生长的IaaS设计之初,功能比较单一,模块很少,所以模块之间的连线简单而清晰,直连的方法最容易实现而且有效。但是当等到项目越变越大,连线越连越多的时候,一切都晚了,到最后就变成就是一个令人恐怖的拓扑结构。
多说无益,让我们直接来看看ZStack各个模块之间的关系图吧,星型拓扑结构:
每个微服务自然分离,又通过统一的Message Bus来连接。添加新的微服务,就增加一个星型节点和一条连线。是不是很清晰很简单?为什么会怎么简单呢?好像也没有为什么,这就是大自然在灵活性上的应该遵循的规则啊。
在ZStack里面,微服务的架构又被称为进程内的微服务