您可以在一个Windows Azure实例上部署多个Web应用程序吗?

时间:2010-08-22 17:33:29

标签: c# azure

有可能在一个windows azure小型计算实例中运行一堆Web应用程序吗?

我正在考虑使用Azure作为一个场所来放置一些开发和非生产准备的项目(Web应用程序)。有些实际上是蛾子,但我想在某个地方有一个活跃的实例。我不想为每个应用程序支付单独的计算时间,这只是90%的时间都在那里。

我正在考虑为这些项目获取共享主机帐户的另一个选项。

6 个答案:

答案 0 :(得分:18)

是的,现在可以使用2010年底发布的最新Azure平台更新。

您必须在Azure项目的服务定义文件中进行适当的配置更改。以下是同一域中多个站点的示例。注册站点使用https端点(您还必须配置您的证书),其余的使用http。公共站点未指定主机标头,并将捕获未指定明确的任何内容。当您有一个需要处理多个子域的应用程序(如shopify)时,这非常棒。为了完成这项工作,你需要有一个允许使用通配符cnames的dns(GoDaddy dns不支持)。显然,您还需要一个cname记录,指向每个其他子域的azure。此示例中需要注意的另一件事是应用程序的physicalDirectory是相对于Azure项目的。希望这有帮助!

以下是可能有用的链接:http://msdn.microsoft.com/en-us/library/gg433110.aspx

    <?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="SampleAzureProject" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="RegisterSite_WebRole">
    <Sites>
      <Site name="RegisterSite" physicalDirectory="..\RegisterSite">
        <Bindings>
          <Binding name="RegisterBinding" endpointName="Endpoint1" hostHeader="register.sample.com" />
        </Bindings>
      </Site>
      <Site name="PublicSite" physicalDirectory="..\PublicSite">
        <Bindings>
          <Binding name="PublicBinding" endpointName="Endpoint2" hostHeader="" />
        </Bindings>
      </Site>
      <Site name="ManageSite" physicalDirectory="..\ManageSite">
        <Bindings>
          <Binding name="ManageBinding" endpointName="Endpoint2" hostHeader="manage.sample.com" />
        </Bindings>
      </Site>
      <Site name="MarketingSite" physicalDirectory="..\MarketingSite">
        <Bindings>
          <Binding name="MarketingBinding" endpointName="Endpoint2"  hostHeader="www.sample.com" />
        </Bindings>
      </Site>
    </Sites>
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="https" port="443" certificate="SampleReg" />
      <InputEndpoint name="Endpoint2" protocol="http" port="80" />
    </Endpoints>
    <Imports>
      <Import moduleName="Diagnostics" />
    </Imports>
    <Certificates>
      <Certificate name="SampleReg" storeLocation="LocalMachine" storeName="My" />
    </Certificates>
  </WebRole>
</ServiceDefinition>

答案 1 :(得分:3)

这取决于Windows Azure实例的含义。

单个Azure帐户可以容纳多个服务和部署。部署(在撰写本文时)可以包含多个工作者和Web角色(主要是项目)。

可以在多个部署实例中部署单个Web角色。

考虑到所有这些,您可以轻松地在单个Windows Azure帐户或甚至单个部署中托管多个Web应用程序

如果您有兴趣最大限度地降低成本并在单个Web角色实例下保留多个测试Web应用程序,则会变得棘手 - 您需要将它们组合到一个项目中并立即部署。

注意:最后一个场景可能会很快看到大幅改进,因此Windows Azure是一个相当安全的选择。

答案 2 :(得分:3)

Azure处于当前状态(2010年8月),每个VM实例仅运行一个应用程序(“服务”,“角色”)。

所以现在问题的简单答案是否定的。

现在,鉴于该平台的所有功能,您可以想出一些创造性的方法来提供这种沙箱。使用Service Management API,您可以让部署位于Azure存储中,并在请求时将角色置于联机状态,然后在不再需要时将其关闭(“删除部署”)。由于结构使VM在线,因此部署会有一些延迟..但根据用例,这可能会为您带来一些重大节省。

答案 3 :(得分:3)

在一个Azure实例中运行多个Web应用程序的唯一方法是将多个应用程序组合到一个WebRole项目中。 Azure每个Web角色实例需要一个Web应用程序。

如果您的网络应用程序相当简单或只是aspx生成的html页面,这可能不会太难 - 将每个应用程序放在其自己的URL子目录中,以使页面名称与其他应用程序分开。由于同一应用程序中的页面之间的链接通常与主目录相关,因此不应过多地扰乱链接。您可以使用网址路径访问每个“子应用”:http://mydomain.com/app1/default.htmlhttp://mydomain.com/app2/...等。

随着每个网络应用程序的复杂性增加,您会看到收益递减。将多个复杂的应用程序变成一个普通的主应用程序会更加困难。

但是对于实验和概念证明类型的工作,一旦你启动主应用程序模式,它应该相当容易,以便将来继续工作。您可以将Azure Web角色实例用作工作组合,而不是用于最新实验的一次性暂存器。

答案 4 :(得分:1)

基本上,每个角色只限一个应用程序。

不确定这是否会发生变化,因为Windows Azure以这种方式托管背后有原因。

通过阅读您的问题,听起来云可能不适合您。特别是如果你有“90%”没有使用的东西。这是一个浪费的处理时间,让一个角色闲置,同时支付$$。

我的建议是使用共享托管或其他东西,直到网站需要更高的正常运行时间,可扩展性和其他类似的云功能。

答案 5 :(得分:1)

Azure可能不是这个用例的最佳选择 - 一个VM只允许一个应用程序,所有其他选项实现起来有点复杂(比如在一个Web角色中有多个应用程序或按需部署和拆除 - 同时请注意Azure为时钟小时收费,所以我不确定如果你打开一个实例,将其关闭然后在一小时内再次启动会发生什么。

另一个云提供商,如rackspace或亚马逊可能会更好,您可以像在普通服务器上一样创建Windows VM并在IIS上托管您的应用程序。在这种情况下,唯一的优势是更容易配置该服务器而无需基础架构管理(尽管与Azure不同,您仍然需要管理操作系统和其他依赖项)。