Canalización de flujo de datos de Google con caché local de instancia + llamadas a la API REST externa
Queremos construir una tubería de Streaming de flujo de datos en la nube que ingiera eventos de Pubsub y realice múltiples operaciones similares a ETL en cada evento individual. Una de estas operaciones es que cada evento tiene unIdentificación del dispositivo que necesitan ser transformados a un valor diferente (vamos a llamarloid-mapeado), la asignación de laid-dispositivo-> id-mapeado proporcionado por un servicio externo a través de una API REST. Lo mismoIdentificación del dispositivo podría repetirse en múltiples eventos, por lo que estosid-dispositivo-> id-mapeado Las asignaciones se pueden almacenar en caché y reutilizar. Dado que podríamos estar lidiando con hasta 3 millones de eventos por segundo en el pico a través de la tubería, la llamada a la API REST debe reducirse tanto como sea posible y también optimizarse cuando las llamadas sean realmente necesarias.
Con esta configuración en mente, tengo las siguientes preguntas.
Para optimizar la llamada a la API REST, ¿Dataflow proporciona optimizaciones integradas como la agrupación de conexiones o si decidimos utilizar nuestros propios mecanismos, hay restricciones / limitaciones que debemos tener en cuenta?
Estamos analizando algunas de las opciones de caché en memoria, para almacenar localmente las asignaciones, algunas de las cuales también están respaldadas por archivos locales. Entonces, ¿hay alguna restricción sobre la cantidad de memoria (como una fracción de la memoria de instancia total) que puede usar esta caché sin afectar las operaciones regulares de flujo de datos en los trabajadores? si usamos un caché respaldado por archivos, ¿hay una ruta en cada trabajador que la aplicación misma pueda usar de manera segura para construir estos archivos?
El número de únicosIdentificación del dispositivo podría ser del orden de muchos millones, por lo que no todas esas asignaciones se pueden almacenar en cada instancia. Por lo tanto, para poder utilizar mejor la memoria caché local, necesitamos obtener cierta afinidad entreIdentificación del dispositivo y los trabajadores donde son procesados. Puedo hacer un grupo basado en elIdentificación del dispositivo antes de la etapa donde ocurre esta transformación. Si hago eso, ¿hay alguna garantía de que lo mismoIdentificación del dispositivo ¿será procesado más o menos por el mismo trabajador? Si hay alguna garantía razonable, entonces no tendría que acceder a la API REST externa la mayor parte del tiempo que no sea la primera llamada, que debería estar bien. ¿O hay una mejor manera de asegurar esa afinidad entre los identificadores y los trabajadores?
Gracias