Architecture 云不可知体系结构?
我正在一个新的解决方案上做一些架构方面的工作,该解决方案最初将在WindowsAzure中运行。然而,我希望解决方案(或者至少是架构/设计)是云不可知的(无论在何种程度上是现实的)。有没有人在这方面做过任何工作,或者看到过任何好的白皮书/博客帖子 我们的高层架构将包括一个发送到web服务(例如WCF)的有效负载,它将被转储到一个队列中(为了参数),一个工作进程将从这个队列中抓取消息并处理它们。将有一个客户信息数据库,理想情况下,我们希望将其排除在云端之外,但有明显的性能考虑 渴望听到别人的想法 干杯Architecture 云不可知体系结构?,architecture,azure,Architecture,Azure,我正在一个新的解决方案上做一些架构方面的工作,该解决方案最初将在WindowsAzure中运行。然而,我希望解决方案(或者至少是架构/设计)是云不可知的(无论在何种程度上是现实的)。有没有人在这方面做过任何工作,或者看到过任何好的白皮书/博客帖子 我们的高层架构将包括一个发送到web服务(例如WCF)的有效负载,它将被转储到一个队列中(为了参数),一个工作进程将从这个队列中抓取消息并处理它们。将有一个客户信息数据库,理想情况下,我们希望将其排除在云端之外,但有明显的性能考虑 渴望听到别人的想法
Dave我认为这与Java企业版非常匹配。尽管这意味着您将不得不使用Java,但至少在您描述的大多数服务中都有几种商业解决方案可用 我假设“云不可知论”是指不可知于您运行的特定平台,如GAE、Amazon EC2或Azure,并且您希望编写一个,部署到任何地方 理论上,如果所有云提供商都支持相同的语言,这应该是可能的。据我所知,GAE支持Python和Java。AmazonEC2可以在实际服务器上使用任何东西,Azure是一个完全的.net平台。因此,编写队列web服务和处理单元的实际处理方面可能很困难 另一个障碍是没有一个通用的统一API来调用云计算服务。无论如何,GAE/Azure/EC2的实现都是不同的,因此它们的API公开的方法都是不同的,为此,您的前线代码需要知道它调用哪种类型的API来控制云计算资源 然而,web服务本质上是松散耦合的。这意味着,如果您致力于抽象资源控制,以便可以在您想要的任何云上创建实例,例如,如果新实例是处理web服务输入/计算的另一个单元,并且公开的web服务在GAE上与EC2相同,那么就没有任何东西可以阻止这两个对话。类似地,如果您在实例之间使用某种形式的web服务/协议,您应该仍然能够通过internet跨计算平台与其他实例进行对话。也就是说,这样做会将内部应用程序的数据公开给全世界,从而带来安全风险
我同意disown:Java是一种非常好的方式。有大量的EJB容器,甚至还有更多的web服务服务器,比如Tomcat。我猜EC2支持它(当然,它确实支持,但他们是否运行Tomcat/Geromino而不是IBM版本,以及费用是多少,我不知道)。GAE听起来——无论谷歌在后端做什么,他们都设计了一些非常奇怪的东西。SOA是一种非常好的抽象子系统实现的方法。只要明确定义了服务的责任,并确定了互操作性的优先级,理论上以后就可以替换出另一种基于云的实现。EC2支持Windows,因此Azure实现具有高度可重用性。然而,appengine是基于Java/python的,这意味着可以重用的只有消息传递和RPC契约。因此,应该使用WCF实现 就性能而言,我的标准方法是
顺便说一句,我还建议您考虑将其作为您的消息格式,以便在较低的项目风险下获得更高的性能。在现阶段,我们主要是一家MS商店,或者至少这是我们希望采取的方向(对于初创公司而言,这是令人信服的业务原因),但我们希望避免任何锁定。我正在研究的一种方法是使用一个中间件框架来抽象云的细节。中间件将由两个主要层组成,较低的层将是一个云适配器,用于抽象出特定云的细微差别和API。上层将提供通用框架服务 中间件将负责:
- 用户、凭证等:应提供任何用户信息、配置文件和授权等
- 安全性:应提供任何安全性实现并实施任何限制
- 云提供商详细信息:实例和存储管理。衡量云使用情况和成本
- 实例服务:实例内的低级服务,例如CPU、内存、本地存储。提供并行处理实现。创建端点/端口等
- 抽象出对云存储的访问(例如azure中的表、队列、Blob)
- 应用程序服务的配置
- 部署:部署到云所需的任何细节-将尝试自动化特定于云的部署
- 日志:应该是一个全面的日志框架,允许跨云进行性能测量
欢迎评论。在2.5年前发布这个问题之后,我们有了