混合云的那些事,如何做到让公有云和私有云实现1+1>2

  无缝混合体验  

无缝结合更多是从控制面的设计来讲,达到用户所有的云资源,不论是在公有云还是私有云,能得到一视同仁的处理。事实上由于公有云和私有云平台天生模型的不一致(Azure stack这样的平台例外),很难强行把它们用相同的界面和逻辑来进行操作,而类似region,availability zone这样的概念,更是无法对用户屏蔽但私有云很难存在的概念。  

所以在实现上,好的无缝体验,应该是让公有云和私有云的资源在同一个平台上操作,它们的操作内在逻辑是完全一致,而非相互割裂。此处以创建云主机和创建专线连接为例。

  创建云主机    

当我们创建私有云主机时,需要选择网络、主存储、镜像、资源规格、可能还有物理机、集群等。而创建公有云主机时,需要选择镜像、安全组、网络、计算规格、可能还有可用区等。相比之下,公有云不可能看到物理机,而私有云不可能看到可用区,两者的计算规格和网络的模型也可能完全不同。  

我们可以将它们放在同一个页面,但一个页面还是两个页面,对用户的操作路径来说都是一步,所以意义不大。真正有意义的是让用户在操作过程中感受到完全的无缝。即创建的过程是完全相同的,所有资源都不需要到公有云控制台去进行额外的查找,本地就能闭环地完成所有操作。    

 创建专线连接    

这是典型的跨云资源操作。连接时需要选择本地网络与公有云网络,这些选择都应该是在平台上直接进行选择或创建(例如创建一个边界路由器等),然后点击连接,混合云平台自动完成剩下的连接工作。不需要用户登录到各个云平台查看类似id、网关、cidr等属性。从体验上来说,用户的直观感受就是选择了两个网络,就创建了连接。而这背后,则是混合云平台进行了大量的建模和数据同步工作。  

通过以上两个示例可以看到,因为公有云和私有云之间的模型天生是有部分差异,因此无感知的混合云并不是要强制用户使用相同的模型去套用不同的云平台,而是在建立好对应的模型后,在后台使用完全相同的逻辑去处理它们。而从API设计上来讲,私有云和公有云资源的操作分属不同的API,但它们的语义、参数都是非常相近的。  

  混合云架构的具体技术实现原则  

在定义了连接一切、无缝体验之后,技术层面在实现它们时有哪些需要注意呢?在此提供以下一些设计原则以供大家参考:    

 建立完整数据模型  

我们在设计私有云平台时,会建立完整的私有云数据模型,如快照、磁盘、云主机、VPC、路由器等,它们之间存在千丝万缕的关系。同样,在设计公有云平台时,也要建立相应的数据模型。那么在设计混合云时,就必须同时建立这二者的模型,并且必须是完整的,因为存在许多关联关系,导致缺少任意一个资源的模型,都不能算完整。  

  布设虚拟ID  

公有云资源映射到本地,成为一个虚拟资源。我们需要给每一个公有云资源分配一个本地的虚拟ID,而不能直接使用公有云的ID。因为在多租户的场景下,公有云的ID在本地并非是唯一的,只有本地的ID才能保证它的唯一性。  

  触发同步    

由于存在映射关系,所以需要进行同步,同步可以是主动触发,也可以是被动触发的。同步的目的:一是让用户在公有云控制台上做的操作也能及时反映到本地,二是保证所有的读写操作都在本地进行,让操作的流畅程度达到毫秒级。正是有了同步,混合云资源的操作速度,可以比直接在公有云控制台上操作快了两个数量级,这让用户可以放心地做更多的事。

  遍历资源模型    

云计算的资源模型是树状的结构,因此任何操作都需要遍历这棵树,以便让它的所有父子资源和相关资源都能得到及时的变更。例如删除或同步一个VPC,需要遍历它下面所有的交换机、安全组、云主机、EIP、NAT网关、路由表、安全规则等等,进行相应的变更,出现失败时要能按顺序进行回滚,保证操作的原子性。又比如删除一个本地网络,需要遍历所有指向它的资源,如路由设备,监控指标等等,进行路由的变更,和网络拓扑关系的自动适配,而不是简单删除就可以,下图为VPN连接的混合云数据模型。