我正在为一个最初在Windows Azure中运行的新解决方案做一些架构工作。但是,我希望解决方案(或至少是架构/设计)成为云不可知(无论在何种程度上都是现实的)。有没有人在这方面做过任何工作或看过任何好的白皮书/博客文章?
我们的高级体系结构将包含发送到Web服务(例如WCF)的有效负载,这将被转储到队列中(为了参数),工作进程将从此队列中获取消息并处理它们。将有一个客户信息数据库,我们希望这些数据库远离云端,但有明显的性能考虑因素。
热衷于听取别人的想法。
干杯 戴夫
答案 0 :(得分:3)
我认为,云无关,你的意思是对你正在运行的特定平台不可知,例如GAE,Amazon EC2或Azure,你希望编写一个,在任何地方部署。
理论上,如果所有云提供商都支持相同的语言,那么这应该是可能的。据我所知,GAE支持Python和Java。 Amazon EC2几乎可以在实际服务器上使用任何内容,Azure是一个完全的.net平台。因此,实际处理方面,即编写队列Web服务和处理单元可能很困难。
另一个障碍是没有用于调用云计算服务的通用统一API。无论如何,GAE / Azure / EC2的实现都是不同的,因此它们公开的API方法都不同,为此,您的前线代码需要知道它调用哪种类型的API来控制云计算资源。
然而,从本质上讲,Web服务是松散耦合的。意思是你去努力抽象资源控制,以便你可以在你想要的任何云上创建一个实例,如果新实例是处理Web服务的输入/计算的另一个单元,并且公开的Web服务在GAE上是相同的例如,作为EC2,没有什么可以阻止这两个谈话。同样,如果您在实例之间使用某种形式的Web服务/协议,您仍然可以跨计算平台通过Internet与其他实例进行通信。也就是说,这样做会将您的内部应用程序的数据暴露给全世界,从而带来安全风险。
我同意不同意见:Java是一个非常好的方法。有大量的EJB容器,甚至还有更多的Web服务服务器,如Tomcat。我猜EC2支持它(嗯,它确实可以,但它们是否运行Tomcat / Geromino而不是IBM版本以及我不知道的收费是什么)。 GAE听起来limited based on this blog post - 无论谷歌在后端做什么,他们都设计了一些非常奇怪的东西。
答案 1 :(得分:0)
我认为这是Java Enterprise Edition的一个非常好的匹配。虽然这意味着您将无法使用Java,但至少您将拥有几种商业解决方案,可用于您描述的大多数服务。
答案 2 :(得分:0)
SOA是抽象子系统实现的完美方式。只要明确定义服务的职责,并优先考虑互操作性,理论上可以在以后交换基于云的备用实施。 EC2支持Windows,因此Azure实现具有高度可重用性。但是,App Engine是基于Java / python的,这意味着可以重复使用的是您的消息传递和RPC合同。因此,WCF实现应该是schema-first contract-first。
就性能而言,我的标准方法是
如果性能不可接受,那么确定更大的风险成为业务决策:无法切换到其他云提供商或处理潜在的性能问题。但是,我会谨慎地保持性能标准的真实性。对于初创企业而言,过度强调预期增长的极端表现是浪费精力。 IMO,如果针对特征差异化,营销,用户反馈等,这项工作将获得更大的回报。仅在必要时进行优化,并且仅在计划中进行优化。
顺便说一下,我还建议将protocol buffers作为您的消息格式,以便在项目风险较低时获得更好的性能。
答案 3 :(得分:0)
我们在这个阶段主要是一家MS商店,或者至少这是我们想要采取的方向(引人注目的商业原因),但我们希望避免任何锁定。我正在研究的一种方法是使用一个中间件框架来抽象出云的具体细节。中间件将包含两个主要层,较低层将是云适配器以抽象出特定云的细微差别和API。上层将提供一般框架服务。
中间件将负责:
欢迎评论。
答案 4 :(得分:0)
在2.5年前最初发布此问题之后,我们已经开始使用我们的解决方案了。我最近撰写了一篇关于Avoiding Cloud锁定的文章,其中讨论了如何定义与云无关的架构。 http://www.cloudycover.com/post/26549365156/avoiding-cloud-lock-in
该公司是一个基于云的HPC平台提供商,可以将计算密集型工作负载无缝卸载到云端,您只需支付毫秒的计算时间: http://www.greenbutton.com