Como o armazenamento de objetos do OpenStack (swift) sabe onde encontrar objetos?

1

Eu tenho lido os documentos de arquitetura para o swift ( link ). Eu meio que entendo o que são 'anéis', mas acho que estou perdendo alguns detalhes.

Parece-me que quando um objeto é colocado no armazenamento, um cliente se conecta a um servidor que de alguma forma encontra um anel. Em seguida, grava os dados em um dispositivo e, de alguma forma, atualiza um anel (provavelmente) para dizer o que foi escrito e onde (os documentos dizem que os servidores de armazenamento não modificam os anéis, por isso acredito que há um pool central de servidores cuidar dos anéis de atualização e empurrá-los para os servidores de armazenamento). Parece que os bancos de dados sqlite são usados para armazenar o mapeamento entre os IDs e os locais dos objetos. Os bancos de dados sqlite são então replicados junto com os objetos ao redor do cluster.

Para uma operação GET, um cliente faz uma solicitação a um servidor que, de alguma forma, sabe onde encontrar o banco de dados que mapeia esse ID de objeto específico para um local físico. Em seguida, ele se conecta usando um servidor proxy para recuperar o objeto e o retorna ao cliente.

Se eu tiver acertado, parece-me que os IDs de objeto de mapeamento 'ring' do sqlite para locais físicos são replicados para pelo menos 3 nós, portanto, não para todo o cluster. Então, como o sistema sabe, ao recuperar um objeto, onde encontrar o banco de dados 'ring' que contém um mapeamento do ID do objeto para o local? Talvez isso seja armazenado em um anel de 'conta', mas a mesma pergunta se aplica - a qual subsistema o servidor público se conecta para descobrir quais nós contêm os objetos reais que precisam ser recuperados / excluídos?

    
por peter_j 12.04.2013 / 12:31

1 resposta

1

Aqui está uma página muito boa descrevendo onde os dados são armazenados: link

Basicamente, várias partições são criadas no anel e partições são atribuídas a dispositivos. Quando um objeto é armazenado, um valor de hash é criado para o objeto e usado para procurar em qual partição ele será armazenado. Em seguida, ele é colocado no dispositivo com base na partição, nos diretórios correspondentes à partição e ao valor de hash do objeto.

Assim, quando você precisa recuperar o objeto, ele o hashes novamente, procura a partição e, em seguida, vai diretamente para o local, em qualquer um dos dispositivos de armazenamento que o contém, geralmente o mais próximo.

A página acima explica com mais detalhes.

    
por 18.11.2014 / 15:25

Tags