最小化云锁定风险的架构策略?

9
我希望了解云系统中减少供应商锁定风险的最佳方法。
例如,我想在Amazon EC2或Windows Azure上部署多种不同的系统,但我想尽可能地减少将这些系统迁移到另一个云供应商时的成本。
至少,在我依赖供应商特定解决方案(如Amazon Queue Service)方面,我似乎会陷入更多的供应商锁定风险(至少我是这样认为的),但我想更好地了解这种风险及其它潜在风险。
有没有架构策略可以用来缓解这个问题(例如,依赖于MapReduce,因为我的脚本将可移植到另一个MapReduce云环境)?有没有比其他系统(Linux、LAMP)更好的操作系统或堆栈?使用JClouds是否有用?
理想情况下,我希望设计虚拟系统可以在EC2上部署,然后轻松地迁移到Azure或App Engine(反之亦然)。
我通常使用Java编写代码,但考虑有选择地使用Scala和Python(或Jython),并且通常仍试图保持基于JVM。我倾向于进行大量并行处理,并且依赖于SQL和非SQL(但不一定是NoSQL)存储和数据处理技术。
谢谢您的帮助。希望我在这里没有太不现实。
4个回答

5

我认为,解决您所描述的问题的唯一架构模式是:抽象

确保只使用各个供应商提供的资源,例如存储、队列等,并为每个资源创建抽象层。

希望这能有所帮助。考虑到云服务提供商之间的服务差异性,我认为这并不是一个超级简单的任务。


1

我同意IgoreK的观点 - 如果你在代码中实现这个功能,那么需要进行大量的抽象处理。

另一个选择是采用IaaS云计算方法 - 只基于虚拟机角色设计你的应用程序。大多数云服务提供商都提供某种形式的虚拟机角色 - 例如Amazon、Azure、Rackspace等。这样迁移就意味着代码更改较少,但你需要在管理方面做更多的工作。


如果您完全在VM上手动构建工作负载,则会错过PaaS所提供的好处。在我看来,仅为避免锁定而切换到IaaS可能不是正确的方法。针对手头问题抽象PaaS解决方案元素是我对@Igorek回答的理解。例如,考虑使用队列提供程序,即抽象出从队列中写入和读取数据的方式。这意味着您需要为每个云平台编写提供程序,但解决方案将具有架构免疫性。 - Siva Senthil

0

微软的客户咨询团队有一个非常出色的示例,展示如何实现这一点(我想我是从这里下载的项目)。其中有很多代码,以及一些非常好的抽象来使事情变得“自由”。显然,与任何抽象一样,您还会引入新的复杂性层,因此在应用它之前,请确保您真正了解它。

在大多数情况下,少即是多。即使“锁定”不是您想要的东西,如果需要,也可能不那么难以“修复”。但是请问自己,现在满足这个需求是否重要,或者您应该完成项目,稍后进行重构。


-2
说实话,你的问题基于一个错误的前提。你想要避免锁定,而不是尽可能地利用你选择使用的平台。
更好的方法不是试图让你的基础设施可以热插拔(例如,避免供应商锁定),而是实际上做出关于你想要使用的IaaS提供商的决策,并尽可能地利用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接