2010-08-22 5 views
18

È possibile avere un gruppo di app Web in esecuzione in un'istanza di elaborazione di piccole dimensioni azzurre?È possibile distribuire più app Web su un'istanza di Windows Azure?

Sto cercando di utilizzare Azure come luogo in cui sedersi un gruppo di progetti (app Web) in fase di sviluppo e non di produzione. Alcuni sono effettivamente falciati, ma mi piacerebbe avere un'istanza attiva da qualche parte. Non voglio pagare ore di calcolo separate per ogni app, che è solo lì il 90% delle volte.

L'altra opzione che sto considerando di ottenere un account di hosting condiviso per questi progetti.

risposta

18

Sì, è ora possibile con gli ultimi aggiornamenti della piattaforma Azure che sono stati rilasciati alla fine del 2010.

Bisogna apportare le modifiche di configurazione appropriate nel file di definizione del servizio di Azure Project. Di seguito è riportato un esempio di più siti sullo stesso dominio. Il sito Register utilizza un endpoint https (è necessario anche configurare il certificato) e il resto utilizza http. Il sito pubblico non specifica un'intestazione host e catturerà qualsiasi cosa non specificata esplicitamente. Questo è fantastico quando hai un'app che deve gestire più sottodomini (come shopify). Per fare questo lavoro è necessario avere un DNS che permetta i nomi jolly (GoDaddy dns no). Ovviamente, è necessario anche un record cname che punti ad azzurro per ciascuno degli altri sottodomini. Un'altra cosa da notare in questo esempio è che la directory fisica delle app è relativa al progetto di Azure. Spero che questo ti aiuti!

Ecco un link che può aiutare: 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> 
3

Dipende da cosa intendi per istanza di Windows Azure.

Un singolo account di Azure può contenere più servizi e distribuzioni. La distribuzione (al momento della scrittura) potrebbe contenere più ruoli di lavoro e Web (essenzialmente progetti).

Un singolo ruolo Web può essere distribuito in più istanze di distribuzione.

Dato tutto ciò, è possibile ospitare facilmente più applicazioni Web in un unico account di Windows Azure o anche una singola distribuzione.

Se si è interessati a ridurre al minimo i costi e mantenere più app Web di prova in un'unica istanza di ruolo Web, diventa complicato - sarà necessario riunirle in un singolo progetto e distribuire contemporaneamente.

Nota: l'ultimo scenario potrebbe visualizzare drastici miglioramenti piuttosto presto, quindi Windows Azure è una scommessa piuttosto sicura.

+0

ho significava un Windows Azure piccolo esempio di calcolo. Aggiornato –

+0

Quindi praticamente no, a meno che non li metta tutti in un'unica soluzione. Tuttavia, ci si aspetta che questo cambi in futuro. –

3

Azure nel suo stato attuale (agosto 2010) eseguirà solo un'applicazione ("servizio", "ruolo") per istanza VM.

Quindi la semplice risposta alla tua domanda è no, in questo momento.

Ora, date tutte le funzionalità della piattaforma, è possibile trovare alcuni modi creativi per fornire questo tipo di sandbox. Con l'API di gestione del servizio, è possibile disporre della distribuzione in Archiviazione di Azure e portare i ruoli online nel momento in cui vengono richiesti, quindi disattivarli ("elimina la distribuzione") quando non sono più necessari. Ci sarebbe un po 'di ritardo sulla distribuzione in quanto il fabric porta le macchine virtuali in linea .. ma a seconda del caso d'uso, questo potrebbe farvi risparmiare un po'.

+3

+1. Se si desidera disporre di più distribuzioni senza l'impatto di $$$, la cosa più semplice è configurare le configurazioni del servizio (nome, url, affinità, certificati, ecc.), Ma senza alcun codice distribuito. Tieni le tue app sulla naftalina sedute nell'archiviazione BLOB, con nomi specifici della versione (forse un contenitore per app?). Quindi utilizzare alcuni semplici script di PowerShell (con i cmdlet di Azure) per distribuire un'applicazione quando necessario, e abbattere quando è fatto. In media, forse 15 minuti per una distribuzione, molto meno da abbattere e cancellare. –

1

Fondamentalmente sei limitato a un'app per ruolo.

Non sicuro se questo cambierà in quanto vi sono motivi per l'hosting di Windows Azure in questo modo.

Dalla lettura della tua domanda, sembra che il cloud potrebbe non essere l'ideale per te in questo momento. Soprattutto se hai qualcosa che è "90%" non utilizzato. Questo è un sacco di tempo di processo sprecato per un ruolo inattivo, mentre si paga il $$.

Il mio consiglio sarebbe di utilizzare l'hosting condiviso o qualcosa del genere fino a quando il sito richiede maggiore uptime, scalabilità e altre funzionalità cloud di quel tipo.

1

Azure potrebbe non essere il migliore per questo caso d'uso: una VM consente solo un'app e tutte le altre opzioni sono piuttosto complicate da implementare (come avere più app in un ruolo web o distribuzione on-demand e abbattere) che Azure addebita l'ora di orologio, quindi non sono sicuro di cosa succederebbe se si presentasse un'istanza, la si portasse giù e la si riavesse entro un'ora).

Un altro provider di cloud, come rackspace o Amazon potrebbe essere migliore, è possibile creare macchine virtuali Windows e ospitare le app su IIS come fareste su un normale server. In questo caso, l'unico vantaggio sarebbe il provisioning più semplice di quel server e nessuna gestione dell'infrastruttura (tuttavia, a differenza di Azure, devi comunque gestire il SO e altre dipendenze).

3

L'unico modo per avere più app Web in esecuzione in un'istanza di Azure è combinare più app in un progetto WebRole. Azure richiede un'app Web per istanza di ruolo web.

Questo potrebbe non essere troppo difficile se le tue app Web sono abbastanza semplici o semplicemente le pagine HTML generate da aspx - inserisci ciascuna app nella propria sottodirectory URL per mantenere i nomi delle pagine separati dalle altre app. Poiché i collegamenti tra le pagine all'interno della stessa app sono di solito relativi alla home directory, questo non dovrebbe turbare molto i tuoi link. Puoi accedere a ciascuna "subapp" utilizzando i percorsi di URL: http://mydomain.com/app1/default.html, http://mydomain.com/app2/... ecc.

Vedrai rendimenti decrescenti man mano che la complessità di ogni app web aumenta. Sarà più difficile calzare più app complesse in un'app master comune.

Ma per gli esperimenti e il tipo di prova del tipo di concetto, una volta avviato il modello di app principale, dovrebbe essere abbastanza facile continuare a funzionare in futuro. Utilizzerai l'istanza del tuo ruolo web di Azure come un portafoglio di opere anziché uno scratchpad unico per qualunque sia l'ultimo esperimento.

+0

Amare quel portafoglio di concetti di lavoro - ha senso –