arquitectura
Como se muestra en el diagrama siguiente, la pila DAOS está estructurada como una colección de servicios de almacenamiento en una arquitectura cliente/servidor.
Ejemplos de servicios DAOS son Pool, Container, Object y Rebuild.
Los servicios DAOS se distribuyen en los planos de control y datos y se comunican internamente a través de dRPC. La mayoría de los servicios tienen componentes de cliente y servidor que se pueden sincronizar mediante gRPC o CART. La comunicación entre servicios se realiza directamente a través de llamadas API, y estas funciones pueden ser invocadas por componentes de servidor o cliente entre servicios.
Si bien cada servicio DAOS está diseñado para ser autónomo y aislado, algunos servicios están más estrechamente acoplados que otros. Este suele ser el caso del servicio de reconstrucción, que necesita interactuar estrechamente con los servicios de grupo, contenedor y objetos para restaurar la redundancia de datos después de una falla del servidor DAOS.
La flexibilidad y la escalabilidad son proporcionadas por una arquitectura basada en servicios, que se combina con un conjunto de bibliotecas de infraestructura que brindan un rico ecosistema de software accesible a todos los servicios DAOS (por ejemplo, comunicación, acceso persistente al almacenamiento, ejecución de tareas asincrónicas de gráficos, soporte de acelerador, etc.). .).
estructura del código fuente
A cada biblioteca y servicio de infraestructura se src/
le .
Los componentes de cliente y servidor de un servicio se almacenan en archivos separados. Las funciones que son componentes del lado del cliente tienen el prefijo dc_
(para DAOS Client), mientras que las funciones del lado del servidor tienen el prefijo ds_
(para DAOS Server). Los protocolos y formatos RPC utilizados entre los componentes del cliente y del servidor generalmente se rpc.h
definen en archivos de encabezado denominados .
Todo el código Go ejecutado en el contexto del plano de control se encuentra en src/control
el directorio. Los servicios de gestión y seguridad se distribuyen entre Control Plane (Go) y Data Plane ©, comunicándose internamente a través de dRPC.
Los archivos de encabezado de la API DAOS oficial expuestos a los usuarios finales (es decir, middleware de E/S o desarrolladores de aplicaciones) se encuentran en el src/include
directorio y utilizan daos_
el prefijo.
Cada biblioteca de infraestructura exporta una API, el archivo de encabezado de la API se encuentra src/include/daos
en el directorio y puede ser utilizado por cualquier servicio. La API del lado del cliente (con prefijo) exportada por un servicio determinado dc_
también se almacena en src/include/daos
el directorio, mientras que la interfaz del lado del servidor (con ds_
prefijo) se almacena src/include/daos_srv
en el directorio.
Biblioteca de infraestructura
Las bibliotecas GURT (una biblioteca común de rutinas y tipos útiles de Gurt) y común ( libdaos_common
) proporcionan registro, depuración y estructuras de datos comunes (como tabla hash, btree, etc.) para servicios DAOS.
El almacenamiento NVM local se administra mediante las bibliotecas Versioning Object Store (VOS) y Blob I/O (BIO) . VOS implementa índices persistentes en SCM, mientras que BIO es responsable de almacenar los datos de la aplicación en NVMe SSD o SCM según la política de asignación. La capa Versioned Block Allocator (VEA) está integrada en VOS y es responsable de gestionar la asignación de bloques en SSD NVMe.
Los objetos DAOS se distribuyen en múltiples objetivos para lograr rendimiento (fragmentación) y resiliencia (replicación o codificación de borrado). La biblioteca de Ubicación implementa diferentes algoritmos (por ejemplo, ubicación basada en anillos, hash consistente con saltos...) para generar el diseño de los objetos a partir de la lista de objetivos y los identificadores de objetos.
La biblioteca del marco de servicio replicado ( RSVC ) proporciona código común para admitir la tolerancia a fallas.
Los servicios de grupo, contenedor y administración se utilizan junto con la biblioteca de base de datos replicada (RDB), que implementa un almacén de valores clave replicado en Raft.
Para obtener más información sobre estas bibliotecas de infraestructura, consulte:
- Biblioteca común
- Almacén de objetos de control de versiones (VOS)
- E/S de blobs (BIO)
- Asignador de bloques versionado (VEA)
- Colocación algorítmica de objetos
- Base de datos replicada (RDB)
- Marco de servicio replicado (RSVC)
servicio DAOS
El siguiente diagrama muestra las capas internas de los servicios DAOS y la interacción con las diferentes bibliotecas mencionadas anteriormente:
Los cuadros verticales representan servicios DAOS, mientras que los cuadros horizontales representan bibliotecas de infraestructura.
Para más información sobre la estructura interna de cada servicio:
- Servicio de piscina
- Servicio de contenedores
- Servicio de objetos de matriz de claves
- Autocuración (también conocida como reconstrucción)
- Seguridad
Información relacionada
GitHub: https://github.com/storagezhang
Correo electrónico: [email protected]
DAOS: https://github.com/daos-stack/daos
Este artículo está traducido de https://github.com/daos-stack/daos/blob/master/src/README.md