PgDog está financiado y llegará pronto a una base de datos cerca de ti
Qué hace PgDog
- Actúa como un proxy de PostgreSQL que proporciona:
- Agrupación de conexiones
- Balanceo de carga de lecturas
- Sharding / enrutamiento de consultas entre múltiples instancias de Postgres
- Se sitúa delante de servidores Postgres sin modificar; no es una extensión ni un motor de almacenamiento personalizado.
- Busca ofrecer una experiencia al estilo Aurora/Vitess, pero puramente en la capa de proxy.
Rendimiento y arquitectura
- Escrito en Rust por seguridad y velocidad, pero las principales ganancias provienen de:
- Desplazar el coste de las conexiones fuera de los procesos de Postgres
- Distribuir las lecturas entre réplicas
- Distribuir las escrituras mediante sharding para evitar cuellos de botella de WAL / vacuum en un solo nodo.
- Los números de producción mencionados incluyen ~2M QPS; el uso de memoria está determinado en gran medida por AST de consultas almacenados en caché.
- Dos enfoques para conjuntos de resultados grandes que pueden provocar OOM en el proxy: fallar y añadir RAM vs paginar a disco; ambos se reconocen como compromisos.
Modelo de sharding y limitaciones
- Modelo actual:
shard_number = hash(key) % num_shards; los críticos señalan que esto hace que el resharing sea costoso frente a esquemas de shards virtuales o basados en rangos. - Las transacciones entre shards se admiten mediante 2PC, pero:
- Son costosas y frágiles ante fallos.
- Se recomiendan solo para tablas de “metadatos” de bajo throughput.
- Las lecturas pueden ser eventualmente consistentes; el ACID fuerte entre shards no es “más rápido que una sola máquina.”
- Existe cierto enrutamiento automático de shards, pero no está bien documentado; a menudo hay que dirigir explícitamente a los shards.
Despliegue y configuración
- Configuración basada en archivos TOML; varios usuarios informan fricción en entornos Kubernetes altamente dinámicos y multiinquilino.
- Los paliativos incluyen controladores/operators personalizados que regeneran la configuración y desencadenan recargas coordinadas.
- La edición Enterprise (de pago) añadirá:
- Un control plane para la gestión de múltiples nodos / despliegue que “simplemente funciona”.
- Funciones de QoS para bloquear consultas malas.
- Soporte respaldado por SLA.
- Se promete que la funcionalidad principal de sharding y escalado seguirá siendo open source; la infraestructura/UX en torno a ello es comercial.
Alta disponibilidad y actualizaciones
- PgDog proporciona balanceo de carga con comprobaciones de salud y enrutamiento de failover, pero:
- No promueve réplicas; espera herramientas externas de HA (Patroni, RDS, etc.).
- No resuelve directamente las grandes actualizaciones de versión de Postgres; la discusión apunta a la replicación lógica y a cambios de pooler como la norma actual.
Comparaciones con otros sistemas
- vs PgBouncer/Pgpool-II: más funciones (sharding, pooling más inteligente, manejo de LISTEN/NOTIFY, ajustes por conexión), pero más complejidad.
- vs Citus: Citus tiene un motor OLAP/consulta más rico; PgDog se centra en OLTP, concurrencia basada en proxy y escalado independiente del coordinador.
- vs Mongo/Dynamo/Cockroach/Yugabyte:
- El hilo señala que Postgres, en esencia, sigue siendo de un solo escritor por fila.
- Algunos sostienen que los sistemas KV/NoSQL escalan las escrituras de forma más natural; otros prefieren Postgres + sharding por su ecosistema.
Recepción y preocupaciones
- Muchos usuarios informan experiencias positivas en producción y migraciones más fluidas frente a PgBouncer.
- Otros cuestionan:
- La QA y el riesgo operativo de un equipo central pequeño.
- La postura de seguridad de la cadena de suministro (tranquilizados por las prácticas de revisión de los mantenedores).
- Afirmaciones de marketing como “no usarías nada más”, vistas por algunos como exageradas.
- El tono general: entusiasmo por opciones más serias para escalar Postgres, atenuado por el realismo sobre la complejidad del sharding y el hecho de que la HA/las actualizaciones siguen requiriendo un diseño cuidadoso.