(1)云服务的种类丰富多样,导致想要完成全面的自动化并非易事。一个典型的云平台会提供了ECS(虚机),EVS(硬盘),VPC(网络),RDS(数据库),ELB(负载均衡)等等一系列数都数不清的服务。有一个新的术语叫做 AWS fatigued,就是说AWS每年都会上线各种新服务&新特性,使得用户对新上线的服务&特性都感到了“AWS疲乏”,疲于使用。
(2)云服务间的创建存在复杂的依赖关系。最典型的例子就是,当创建EIP的时候,需绑定VM,而创建CM的时候,又需要先创建Subnet,建Subnet的前提就是需要先有VPC。层层的依赖,以及交叉依赖,都为开发者在企图自动化的道路设置了拦路虎,使得完成自动化的成本大大提高。根据前面提到的成本大于重复性收益的时候,自动化就会被放弃。
(3)云上资源的使用方式与传统方式不同。用户从资源的完全拥有者变成资源的使用者,后台权限的降低,导致你无法掌控一切,使得不那么方便的定位资源初始化失败原因(也许云平台本身的Bug导致)。有时候不得不联系云提供商求助了解失败原因。另外在使用流程上也会稍有改变,原来你的软件包一次拷贝就到了验证环境,而在云上,也许你需要中转跳板才能达到目的。这些都加剧了自动化的实施困难。
3.2 自动化的尝试这里直接给一个图来总结了云上自动化的尝试历程,可以更加直观的了解这一领域的发展情况。不过在资源供给自动化和资源编排上其实边界也没有那么的明显,可以看到主要的差异是在灵活的语法上。在已有的自动化模板里面逐步增加一些灵活的语法,基本可以达到灵活编排的目的。
4 终极的自动化体系-编排自动化是指一个任务流程中不需要人为的干预,而编排则是指多个任务流程可以提前规划,任务间可以互相配合,并行或者串行的执行。可以从最直接的定义上看到,只有做到任意的自动化流程控制才能称之为编排,是一个自动化的升级版。由此可见,如果某云厂商的一个编排系统,连一些基础的自动化流程都无法满足,那么它就不是一个好的编排系统。
4.1 云上的编排标杆提到云上的编排系统,就不得不提老大哥AWS的Cloudformation了,基本上它已经是AWS云生态的一个标准,支撑应用市场以及服务目录完成任意IT软件和IT基础设施的初始化流程。
它的主要原理就是用户提供创建对象的各种属性,然后CFN协助完成对象的创建。例如初始化EC2,就是相当于创建VM虚拟机。那么用户就得提供属性:主机名,用什么镜像,硬盘多大,用什么网络,主机规格,安全组等。有了这些属性,CFN就可以确定如何调用EC2的API来创建VM了。
它之所以能力很强是因为它除了提供执行顺序的控制能力以外,在语法层面还提供了很多的内置函数,用户可以通过函数来引用变量,拼接变量值,控制执行细节。超丰富的编排对象,使得使用CFN基本可以满足任意AWS资源的自动化创建。
4.2 云上编排系统对比这里分析三家典型的提供编排能力的云厂商能力分析表,不对之处也请联系纠正。(亚马逊CFN、阿里ROS、华为AOS)
√表示“强/做得好”,O表示“一般/待增强”,X表示“没有此特性”。
注:OpenStack的Heat编排能力类似AWS,但是无图形化设计器,这里就不列举了。
4.3 编排系统的不足当前的编排系统都需要一个描述文件,来描述用户希望的执行流程。一般都会把这个描述文件称之为“模板”。通过模板来控制执行逻辑,这并不是一个问题,因为你能看到的业界编排系统都有自己的“模板”语法规则。问题在于,从无到有的写作一个新的模板,会比较困难,需要使用者学习一定的门槛,大家的第一感觉总是像在学习一门新的编程语言。