Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Architecture 云不可知体系结构?_Architecture_Azure - Fatal编程技术网

Architecture 云不可知体系结构?

Architecture 云不可知体系结构?,architecture,azure,Architecture,Azure,我正在一个新的解决方案上做一些架构方面的工作,该解决方案最初将在WindowsAzure中运行。然而,我希望解决方案(或者至少是架构/设计)是云不可知的(无论在何种程度上是现实的)。有没有人在这方面做过任何工作,或者看到过任何好的白皮书/博客帖子 我们的高层架构将包括一个发送到web服务(例如WCF)的有效负载,它将被转储到一个队列中(为了参数),一个工作进程将从这个队列中抓取消息并处理它们。将有一个客户信息数据库,理想情况下,我们希望将其排除在云端之外,但有明显的性能考虑 渴望听到别人的想法

我正在一个新的解决方案上做一些架构方面的工作,该解决方案最初将在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年前发布这个问题之后,我们有了