2014-05-20 104 views
0

我正在尝试使用Azure设置多租户应用程序。这就是我想象中的架构:Azure中的多租户Web角色

WebRole - 单一的应用程序为多个用户(每个用户需要定制的主机名,如your.site.commy.site.comyoursite.com

WorkerRole - 用于生成新的数据库/添加主机名到web角色?

使用WebRoles和WorkerRoles的原因是可扩展性。

我知道,你可以在csdef添加多个主机名与webrole像这样:

<Sites> 
    <Site name="Site1" physicalDirectory="C:\Users\User\Documents\Visual Studio 2012\Projects\Project1"> 
    <Bindings> 
     <Binding name="Endpoint1" endpointName="Endpoint1" hostHeader="domain1.com" /> 
     <Binding name="Endpoint2" endpointName="Endpoint2" hostHeader="domain1.com" /> 
    </Bindings> 
    </Site> 
    <Site name="Site2" physicalDirectory="C:\Users\User\Documents\Visual Studio 2012\Projects\Project2"> 
    <Bindings> 
     <Binding name="Endpoint1" endpointName="Endpoint1" hostHeader="domain2.com" /> 
     <Binding name="Endpoint2" endpointName="Endpoint2" hostHeader="domain2.com" /> 
    </Bindings> 
    </Site> 
</Sites> 
<Endpoints> 
    <InputEndpoint name="Endpoint1" protocol="http" port="80" /> 
    <InputEndpoint name="Endpoint2" protocol="https" port="443" certificate="SSLName" /> 
</Endpoints> 

不过这需要你已经确定你的网站,我希望能够在动态地添加主机名任何一点,坚持他们(所以当它自动衡量它拿起)。这个想法是,当用户注册应用程序时,工作者角色选择它并在某处添加主机名(可能是webrole IIS?)。

我不知道这是否是正确的做法或如果我失去了什么。

回答

0

恕我直言,这不是正确的做法。虚拟机托管网络/工作者角色的主要原因是Stateless VMs

为了让您的方法起作用,您需要使用IIS API为每个客户创建站点,并且因为这些虚拟机是无状态的,所以当您部署新代码或VM发生故障时,这些站点将被删除原因和微软必须取代它。

此外,每当您通过添加新的Web角色实例来横向扩展VM时,一旦VM启动并运行,您将不得不再次创建这些站点。

+0

因此,将应用程序放在自己的普通虚拟机上并拥有共享的IIS配置会更有意义吗? – kiwijus

+0

Azure虚拟机会更有意义,因为它们都是**'由Azure Blob存储**支持的有状态虚拟机。 –