arquitetura
Conforme mostrado no diagrama abaixo, a pilha DAOS é estruturada como uma coleção de serviços de armazenamento em uma arquitetura cliente/servidor.
Exemplos de serviços DAOS são Pool, Container, Object e Rebuild.
Os serviços DAOS são distribuídos pelos planos de controle e de dados e se comunicam internamente via dRPC. A maioria dos serviços possui componentes de cliente e servidor que podem ser sincronizados via gRPC ou CART. A comunicação entre serviços é feita diretamente por meio de chamadas de API, e essas funções podem ser invocadas por clientes ou componentes de servidor entre serviços.
Embora cada serviço DAOS seja projetado para ser autônomo e isolado, alguns serviços são mais fortemente acoplados do que outros. Geralmente, esse é o caso do serviço Rebuild, que precisa interagir estreitamente com os serviços Pool, Container e Object para restaurar a redundância de dados após uma falha do servidor DAOS.
A arquitetura baseada em serviços fornece flexibilidade e escalabilidade, que é combinada com um conjunto de bibliotecas de infraestrutura que fornecem um rico ecossistema de software acessível a todos os serviços DAOS (por exemplo, comunicação, acesso de armazenamento persistente, execução de tarefas assíncronas com gráfico de dependências, suporte a aceleradores, etc. .).
estrutura do código-fonte
Cada biblioteca e serviço de infra-estrutura recebe um src/
diretório .
Os componentes cliente e servidor de um serviço são armazenados em arquivos separados. As funções que são componentes do lado do cliente são prefixadas com dc_
(para cliente DAOS), enquanto as funções do lado do servidor são prefixadas ds_
com (para servidor DAOS). Os protocolos e formatos RPC usados entre os componentes cliente e servidor são geralmente rpc.h
definidos em arquivos de cabeçalho denominados .
Todo o código Go executado no contexto do plano de controle reside no src/control
diretório. Os serviços de gerenciamento e segurança são distribuídos entre Control Plane (Go) e Data Plane ©, comunicando-se internamente via dRPC.
Os arquivos de cabeçalho da API DAOS oficial exposta aos usuários finais (ou seja, middleware de E/S ou desenvolvedores de aplicativos) estão localizados no src/include
diretório e usam daos_
o prefixo.
Cada biblioteca de infraestrutura exporta uma API, o arquivo de cabeçalho da API está localizado src/include/daos
no diretório e pode ser usado por qualquer serviço. A API do lado do cliente (com prefixo) exportada por um determinado serviço dc_
também é armazenada src/include/daos
no diretório, enquanto a interface do lado do servidor (com ds_
prefixo) é armazenada src/include/daos_srv
no diretório.
Biblioteca de infraestrutura
As bibliotecas GURT (uma biblioteca comum de rotinas e tipos úteis de Gurt) e Common ( libdaos_common
) fornecem registro, depuração e estruturas de dados comuns (como tabela hash, btree, etc.) para serviços DAOS.
O armazenamento NVM local é gerenciado pelas bibliotecas Versioning Object Store (VOS) e Blob I/O (BIO) . O VOS implementa índices persistentes no SCM, enquanto o BIO é responsável por armazenar os dados da aplicação em SSD NVMe ou SCM de acordo com a política de alocação. A camada Versioned Block Allocator (VEA) está integrada ao VOS e é responsável por gerenciar a alocação de blocos em SSDs NVMe.
Os objetos DAOS são distribuídos em vários destinos para desempenho (fragmentação) e resiliência (replicação ou codificação de eliminação). A biblioteca Placement implementa diferentes algoritmos (por exemplo, posicionamento baseado em anel, hashing consistente com saltos...) para gerar o layout de objetos a partir de uma lista de alvos e identificadores de objetos.
A biblioteca Replicated service framework ( RSVC ) fornece alguns códigos comuns para oferecer suporte à tolerância a falhas.
Os serviços Pool, Container e Management são usados em conjunto com a biblioteca de banco de dados replicado (RDB) , que implementa um armazenamento de valor-chave replicado no Raft.
Para obter mais informações sobre essas bibliotecas de infraestrutura, consulte:
- Biblioteca Comum
- Controle de versão do armazenamento de objetos (VOS)
- E/S de blob (BIO)
- Alocador de Bloco Versionado (VEA)
- Posicionamento algorítmico de objetos
- Banco de dados replicado (RDB)
- Estrutura de serviço replicado (RSVC)
Serviço DAOS
O diagrama abaixo mostra as camadas internas dos serviços DAOS e a interação com as diferentes bibliotecas mencionadas acima:
As caixas verticais representam serviços DAOS, enquanto as caixas horizontais representam bibliotecas de infraestrutura.
Para leitura adicional sobre a estrutura interna de cada serviço:
- Serviço de piscina
- Serviço de contêiner
- Serviço de objeto de matriz de chaves
- Autocura (também conhecida como reconstrução)
- Segurança
Informação relacionada
GitHub: https://github.com/storagezhang
E-mail: [email protected]
DAOS: https://github.com/daos-stack/daos
Este artigo foi traduzido de https://github.com/daos-stack/daos/blob/master/src/README.md