这个抽象层还可以帮助我们实现一些有的云有,有的云没有的功能。比如AWS现在有一个Spot Fleet的功能,你可以告诉它我需要多少台机器,什么样的机器,然后你可以在一个范围里去选择。这个功能我们在阿里云或者其他云上没有见到,现在我们可以通过抽象来自己实现这样一个功能。很可惜,不是所有的云资源都能通过这样统一的抽象,特别是一些高端的资源,比如AWS Lambda这种我们就没法抽象。因为它是利用了底层资源做了一个更高级别的优化,或者说是更高级别的简化而形成的,在不同的云上是不一样的,有些云可能没有。统一集群描述系统我们学习了K8s,在这个基础上提供了一个统一的基础架构描述系统,通过声明式描述来定义基础架构。简单来说,你要的这些虚机或者是这些虚机之间的关系是怎么样去定义的。像Hashicorp提供的terraform就提出“infrastructure as code”,架构即代码。我们也用了这个理念,好处是你能够明确看到你的架构是什么样的,并且你可以描述这个状态。比如说你在一个云上面定义并实现了这样一个架构,你就可以把它搬到另一个云上去,而且不会出错。实现“Write once, run anywhere”的跨云浮动。
具体的影响需要看具体的部署方式和应用本身来分析。 我们采用的是双层调度的概念:第一层调度分配业务位置,解决的问题是我要把资源放在哪里。第二层调度分配业务内部工作负载。我已经决定把工作负载放在这个云上的时候,我会在这个云上建立一个集群。任务的一部分就会在这个集群里运行,我们在整个过程都是在监控的,如果某种原因某个地方被停掉了,发生障碍,上层调度会发现这件事情,我们会自动把任务调度到另外一个地方去,或者另一个云上。一般调度时, 业务整体会被分配到一个云上。如果由于某种原因整个云上资源不可访问时,第一层调度会把业务调度到另外的云上。所以我们才能支持使用spot这种可被抢占的资源,可以及时调度到另外的地方去。- END -