Sua pergunta é muito ampla, mas tentarei respondê-la da melhor maneira possível. O Ubuntu fornece uma nuvem OpenStack, isso lida com sua infraestrutura. Até onde você vai escrever seu aplicativo no topo da nuvem, depende de você.
Como a AWS é uma nuvem popular, aqui estão alguns documentos de arquitetura que você pode digitalizar para ter uma ideia de como projetar sua infra-estrutura para uma determinada necessidade. Embora isso se aplique à AWS e use serviços específicos da AWS, você pode adaptá-lo facilmente ao OpenStack ou a qualquer outra nuvem.
Neste exemplo, o AWS mostra como projetar um aplicativo da Web em escala. Aplicando isso à sua infra-estrutura, o OpenStack oferece a capacidade de configurá-lo e o Juju implantaria os serviços de que você precisa. Então, passando da frente para trás, Juju forneceria um balanceador de carga (implantando HAProxy) em seus servidores Web (dependendo de qual tecnologia você usa, vamos assumir nginx), mais balanceadores de carga (HAProxy), seus servidores de aplicativos (dependendo de qual tecnologia você usa , digamos um aplicativo Rails) e, em seguida, seus bancos de dados (escolha um).
O Ubuntu fornece os meios para você implantar e executar esses serviços, e o Juju oferece uma maneira de gerenciar e orquestrar esses serviços. Em relação a como escrever um aplicativo em nuvem, as pessoas têm livros inteiros sobre o assunto, para que você possa ser melhor off começando com um deles.
Veja também: