所以你有你的 Linux 机器(虚拟实例),它工作正常。但是突然之间,您需要进行扩展——也就是说,您需要在需求高涨时启动更多实例,并在需求下降时关闭它们。因此,您可以做的基本上是使用 Amazon 的 API 来启动 EC2 实例 - 为它们提供您可以从管理控制台(甚至更多)执行的所有操作。但是使用亚马逊的 API 基本上把你的手绑在亚马逊上。使用 JCloud 之类的框架,您所做的类似于(这是伪代码):
CloudProvider provider = new CloudProvider.getProvider("Amazon");
provider.authenticate("username", "password");
provider.startInstance("some option", numOfInstances);
所以说你必须扩展并且你使用 JClouds 部署在亚马逊上 - 你将使用类似上面的东西但是你突然决定从亚马逊移动到 Rackspace 所以而不是重新设计你的应用程序的所有逻辑必须做使用配置实例并使用它们,您只需更改
CloudProvider provider = new CloudProvider.getProvider("Amazon");
类似于
CloudProvider provider = new CloudProvider.getProvider("RackSpace");
并继续使用 authenticate 方法和 startInstance,但随后库将考虑如何将这个库方法实际“翻译”为给定云提供商支持的特定方法。基本上,这是一种抽象代码的方式,它必须与底层云提供商打交道——只要它提供服务,你就不应该关心它是谁,对吧?