云中的Java框架

IAm*_*aja 5 java cloud terracotta cluster-computing jclouds

因此,我试图最终了解基于云的企业应用程序如何工作,以及他们的架构通常是什么样子.假设我使用像亚马逊这样的云提供商.我假设(请纠正我,如果我错了),我将支付1+个虚拟机,根据我的应用程序需要容纳一堆软件.

我对jcloudsTerracotta这样的框架如何融入图片感到困惑.jclouds将自己宣传为" 一个可以帮助您开始使用云的开源库 ",并列出了许多巨大的功能,如果没有有意义的示例,对我来说并不重要.Terracotta自称是一个高规模的集群框架.为什么我需要使用像jclouds这样的东西?我将使用哪些具体的具体方案?

再说一遍,如果我使用亚马逊作为我的云提供商,他们不会已经高度扩展吗?为什么我需要云中的兵马俑?

Lor*_*ias 5

所以你有你的Linux机器(虚拟实例),它工作正常.但突然之间你需要扩展 - 那就是你需要在需求增加时启动更多实例并在它关闭时关闭它们.所以你可以做的就是使用亚马逊的API来启动EC2实例 - 为他们提供你可以从管理控制台做的一切(甚至更多).但使用亚马逊的API基本上将你的双手绑在亚马逊上.对于像JCloud这样的框架,你所做的就是这样(这是伪代码):

CloudProvider provider = new CloudProvider.getProvider("Amazon"); 
provider.authenticate("username", "password");
provider.startInstance("some option", numOfInstances);
Run Code Online (Sandbox Code Playgroud)

所以说你必须扩展,你使用JClouds部署在亚马逊上 - 你将使用类似上面的东西但突然你决定从亚马逊转移到Rackspace所以不要重新设计你的应用程序的所有逻辑,而不是通过配置实例和使用它们,您只需更改

CloudProvider provider = new CloudProvider.getProvider("Amazon");
Run Code Online (Sandbox Code Playgroud)

喜欢的东西

CloudProvider provider = new CloudProvider.getProvider("RackSpace");
Run Code Online (Sandbox Code Playgroud)

并继续使用authenticate方法和startInstance,但随后该库将采用如何将此库方法实际"转换"为给定云提供程序支持的特定方法.基本上它是一种抽象代码的方式,它必须处理底层的云提供者 - 只要它提供服务,你就不应该关心它是谁,对吧?


Her*_*eri 5

将应用程序"带入云端"至少有两个方面.

首先,您必须管理节点:在所有节点上部署应用程序,监控它们,启动新节点以实际扩展,检测和替换故障节点,实现新应用程序版本的某些更新方案,等等.通常,如果没有工具,这是不合理的.JClouds适用于此,因为它涵盖了其中的一些要点.

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