5

所以我试图最终掌握基于云的企业应用程序是如何工作的,以及它们的架构通常是什么样的。假设我使用像亚马逊这样的云提供商。我假设(如果我错了,请纠正我)我会为 1 台以上的虚拟机付费,这些虚拟机将根据我的应用程序的需要容纳一堆软件。

我对jcloudsTerracotta之类的框架如何融入图片感到困惑。jclouds 将自己标榜为“一个帮助您开始使用云的开源库”,并列出了许多对我来说意义不大但没有有意义的示例的巨大功能。Terracotta 自称是一个高扩展性的集群框架。为什么我需要使用 jclouds 之类的东西?我会将它用于哪些具体、具体的场景?

同样,如果我使用亚马逊作为我的云提供商,他们不是已经高度扩展了吗?为什么我需要云中的 Terracotta?

4

2 回答 2

5

将应用程序“带入云端”至少有两个方面。

首先你必须管理节点:在所有节点上部署你的应用程序,监控它们,启动新节点以实际扩展,检测和替换失败的节点,实现新应用程序版本的一些更新场景,等等。通常,如果没有工具,这是无法合理完成的。JClouds 适合这里,因为它涵盖了其中一些要点。

其次,您的应用程序本身必须是“云就绪”。您不能将任意应用程序放在多个节点上并期望它能够很好地扩展。这里的要点是定义如何扩展对所有节点(SQL 数据库、NoSQL 数据存储、潜在的会话复制等)之间共享数据的访问。通常你使用一些现有的框架/应用服务器/数据存储来管理你的共享状态。Terracotta 就是其中之一,基本上它提供了一种在多个节点上的 JVM 实例之间共享内存的有效方式。

于 2011-09-28T22:36:51.240 回答
5

所以你有你的 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,但随后库将考虑如何将这个库方法实际“翻译”为给定云提供商支持的特定方法。基本上,这是一种抽象代码的方式,它必须与底层云提供商打交道——只要它提供服务,你就不应该关心它是谁,对吧?

于 2011-09-28T19:11:11.727 回答