Funciones de nivel empresarial de Apache Pulsar: introducción al multiinquilino
Apache Pulsar nació originalmente en Yahoo. En ese momento, fue para resolver el problema de la coordinación de datos entre varios departamentos dentro de Yahoo. Por lo tanto, Pulsar ha adoptado la función multiinquilino. tenencia en cuenta desde su nacimiento y seguirá mejorándolas durante el posterior proceso de implantación. La característica de arrendamiento múltiple permite que varios departamentos compartan los mismos datos sin tener que implementar sistemas independientes para operar los datos. Esto garantiza la coherencia de los datos entre departamentos y simplifica los costos de mantenimiento.
Antes de presentar el multiinquilino de Pulsar, echemos un vistazo a lo que debe hacer un sistema normal para implementar el multiinquilino:
El diseño de multiinquilino de Pulsar cumple con los requisitos anteriores:
p>
Como se muestra en la siguiente figura: En un clúster Pulsar, hay tres conceptos: inquilino (la propiedad en la figura tenía un nombre anterior, y ahora es más habitual llamarla: inquilino), espacio de nombres y tema. Esto también se puede reflejar en la composición de nombres de los temas en Pulsar, por ejemplo: persistente://inquilino/espacio de nombres/tema. En Pulsar, el inquilino, el espacio de nombres y el nombre del tema se utilizan para identificar de forma única un tema.
El inquilino representa el nombre del inquilino, que es una unidad de aislamiento de recursos. Puede haber varios espacios de nombres bajo un inquilino. El espacio de nombres se utiliza para administrar los temas a los que pertenece. Puede establecer las políticas correspondientes para los temas en el nivel del espacio de nombres, como retención, trabajo pendiente y límite de tasa. Puede haber varios temas en un espacio de nombres y sus permisos también son de arriba a abajo. El multiinquilino de Pulsar forma un sistema de gestión de varios niveles a través de inquilino, espacio de nombres y tema.
Como se mencionó al principio, un sistema multiinquilino debe proporcionar seguridad a nivel de sistema dentro del inquilino. En términos de desglose, se puede clasificar principalmente en los dos puntos siguientes:
En Pulsar, la seguridad multiinquilino se logra mediante mecanismos de autenticación y autorización. Cuando un cliente se conecta a un corredor de Pulsar, el corredor utiliza el complemento de autenticación para verificar la identidad del cliente y luego le asigna un token de función de tipo cadena. El token de rol tiene principalmente las siguientes funciones:
Pulsar actualmente admite dos tipos de autenticación de identidad:
Por supuesto, los usuarios también pueden utilizar sus propios procedimientos de autenticación de identidad.
Cuando el sistema de autenticación de identidad reconoce el token de rol del cliente, Pulsar broker utilizará el sistema de autorización para decirle al cliente qué operaciones puede realizar actualmente. Las operaciones de autorización se configuran a nivel de inquilino, lo que significa que en el clúster Pulsar, los usuarios pueden establecer múltiples esquemas de autorización basados en diferentes roles. Las operaciones de permisos específicas se configuran y administran en el nivel del espacio de nombres. Por ejemplo, si un tema tiene permisos de producción o consumo se controla en el nivel del espacio de nombres. En otras palabras: a nivel de inquilino, los usuarios pueden configurar qué tipo de roles tienen permisos para operar en qué inquilinos. A nivel de espacio de nombres, los usuarios pueden configurar qué permisos tiene el rol actual para un tema determinado. Al principio Sí, el espacio de nombres se utiliza principalmente para administrar los atributos de los temas que contiene.
A través del sistema de autenticación y autorización, cuestiones como los permisos de ejecución entre inquilinos y temas se separan inteligentemente, logrando así el propósito de cumplir con la seguridad a nivel del sistema dentro del inquilino.
El aislamiento se divide principalmente en los dos tipos siguientes:
En Pulsar, para garantizar una buena escalabilidad, se adopta un diseño arquitectónico para separar el almacenamiento y la informática, y el almacenamiento (apuestas) y Computación (corredor) es el recurso compartido por producir y consumir. Para lograr un mejor aislamiento, Pulsar realiza diferentes procesamientos en las capas de almacenamiento y computación, respectivamente.
En términos de almacenamiento, Apache Pulsar utiliza otro proyecto de nivel superior de Apache, Bookkeeper, como capa de almacenamiento. Un corredor de apuestas es una instancia en Bookkeeper. Un corredor de apuestas tiene varios libros de contabilidad y cada libro de contabilidad corresponde a un tema en Pulsar. La propia separación de E/S del contable puede soportar esto muy bien. En una sola casa de apuestas, hay un archivo de registro de diario (generalmente hay un disco de diario dedicado para escribir archivos de diario) (similar al archivo WAL en LSMTree), y todas las operaciones de escritura se agregarán a él en forma de anexo interno. . Cuando se completa la escritura, un hilo separado descargará los datos del archivo de diario en el disco periódicamente en segundo plano. El diseño de esta arquitectura de E/S logra el aislamiento entre las operaciones de escritura y lectura, de modo que los inquilinos puedan leer datos lo más rápido posible, mientras que el rendimiento de escritura y la latencia no se ven afectados por las operaciones de lectura.
Además del aislamiento de E/S, diferentes inquilinos pueden configurar diferentes cuotas de almacenamiento para diferentes espacios de nombres. Si el tamaño de los mensajes dentro de un inquilino alcanza el límite de la cuota de almacenamiento, Pulsar tomará las medidas adecuadas, como impedir la generación de mensajes, generar excepciones o descartar mensajes, etc.
Para cumplir con los SLA, Pulsar también proporciona múltiples mecanismos a nivel de Broker. En primer lugar, todas las operaciones en el corredor Pulsar se realizan de forma asincrónica. Existe un límite superior en los recursos de memoria utilizados por cada Broker. Cuando un Broker alcanza el umbral de uso de memoria o CPU configurado, Pulsar transferirá rápidamente el tráfico a un Broker con una carga menor para su procesamiento. En Pulsar, hay un componente de administrador de carga de componentes diseñado específicamente para manejar esta situación, que se beneficia del excelente diseño arquitectónico de Pulsar: separación de computación y almacenamiento. Esto hace que el Broker sea casi sin estado y el Broker en sí no almacena ningún dato, por lo que el costo de transferencia de esta carga de tráfico es muy pequeño y rápido, por lo que no hay necesidad de preocuparse si las características del inquilino se verán comprometidas durante el proceso. carga de tráfico.
En segundo lugar, Pulsar implementa el control de flujo tanto en la producción como en el consumo de mensajes. Del lado del productor, los inquilinos pueden configurar la velocidad a la que se envían los mensajes actuales a los corredores y corredores de apuestas para evitar que los usuarios actuales envíen mensajes más rápido que la capacidad del propio sistema para procesar mensajes. Del lado del consumidor, los inquilinos pueden configurar cuántos mensajes pendientes el corredor actual puede enviar al consumidor. Además, Pulsar también puede limitar al corredor para que entregue mensajes a los consumidores a una velocidad específica para evitar que la capacidad de consumo del consumidor sea mayor que la capacidad de procesamiento del corredor actual.
El mecanismo mencionado en el aislamiento suave puede garantizar que Pulsar pueda garantizar un buen aislamiento al compartir recursos de Broker y Bookies. Sin embargo, en algunos casos, las aplicaciones también requieren aislamiento de recursos físicos. Pulsar permite aislar ciertos inquilinos o espacios de nombres de corredores específicos. Esto garantiza que esos inquilinos o espacios de nombres puedan utilizar plenamente los recursos de ese corredor en particular.
Esta opción también se puede utilizar para probar diferentes configuraciones, depurar y responder rápidamente a cualquier situación inesperada que ocurra en producción. Por ejemplo, actualmente hay un usuario que puede provocar un mal comportamiento en el Broker que puede afectar el desempeño de otros inquilinos. En este caso, el inquilino específico puede aislarse físicamente y luego identificarse o remediarse.
Además de aislar físicamente el tráfico en el Broker, también puede aislar los servicios relacionados con el almacenamiento. Se pueden configurar políticas de ubicación relevantes a nivel de espacio de nombres para lograr este objetivo.